VoltDB培训-第一讲-开发

VOLTDB大幅降低了资源开销,能在现有的廉价服务器集群或虚拟环境上实现每秒数百万次事务处理。单节点每秒数据处理远远高于传统数据库管理系统。 VOLTDB可以通过简单的在集群中增加节点的方式实现性能的线性增加,原生支持企业级高可用。
本次分享包括上下两部分,其中上半部分包括VOLTDB的特性介绍、部署开发,下半部分包括运维管理以及最佳实践,本次分享是上半部分。

展开查看详情

1. VoltDB分享 第一讲 开发 杜华兴 1 25-Apr-20

2.Stonebraker博士的数据库演进路线 1980 2 1990 2000 2010

3.我们需要一个新的数据库架构 目标: • 支撑快数据的OLTP架构 • 纯内存数据库 • 序列化执行 • 横向扩展 • ACID 3

4.VOLTDB 智能流计算框架 4

5.VOLTDB 智能流计算框架 流数据实时智能决策引擎 应用服务 流数据 符合ACID的实时运营 连接外部数据存储平 分析平台 台 单集群实现每秒数百万事件并结合上下文的实时决策 机器学习模型 (PMML等) 5

6. VoltDB 产品部署 6

7.VoltDB支持的部署方式 1 单节点部署 2 集群部署 3 主从模式部署 4 双活模式部署 7

8.VoltDB 单节点部署步骤 1 准备服务器 2 系统设置 3 准备安装文件 4 编辑配置文件 5 初始化并启动数据 8

9.VoltDB 单节点部署步骤 1 准备服务器 X86 64位 物理机 OR 虚拟机 项目 要求 操作系统 RedHat 7.0 and later CentOS 7.0 and later Ubuntu Version 14.04,16.04 and 18.04 Macintosh OS X 10.9 and later (for development only) CPU X86 64位 1.6 GHz 内存 4G Java VoltDB server: java 8 or java11 Java client or JDBC Client: java 8 or java11 Python V2.6 or later (2.7 is recommended) 9

10.VoltDB 单节点部署步骤 2 系统设置 Voltdb check $ echo never >/sys/kernel/mm/transparent_hugepage/enabled $ echo never >/sys/kernel/mm/transparent_hugepage/defrag $ export VOLT=/opt/voltdb 10 $ export PATH=$PATH:$VOLT/bin

11.VoltDB 单节点部署步骤 3 准备安装文件 下载后(https://www.voltdb.com/try-voltdb/download-enterprise/),一键解压 4 编辑配置文件 Deployment.xml <deployment> <cluster hostcount="1"/> </deployment> 11

12.VoltDB 单节点部署步骤 5 初始化并启动数据库 初始化数据库 $ voltdb init --dir=/data/ --force 启动数据库 $ voltdb start --dir=/data/ 访问数据库 $ sqlcmd >Create table A (event_id INTEGER, event varchar(128) ); 停止数据库:voltadmin stop --host=svr1 12 voltadmin shutdown

13.VoltDB 集群部署步骤 1 准备服务器 设置NTP or chrony 2 系统设置 3 准备安装文件 4 编辑配置文件 5 初始化并启动数据 voltdb start --host=node1,node2….nodex --dir=/data 13

14.VoltDB数据加载 DDL & SQL Statement: CSVLoader: csvloader --file towns.txt towns 14

15. VoltDB 代码开发 15

16.建立数据库连接 连接方式 示例 Java Client https://docs.voltdb.com/UsingVoltDB/ChapAppDesign.php#Desi gnAppConnect C++ Client https://docs.voltdb.com/UsingVoltDB/ChapOtherClientAPI.php#P rogLangCpp C# Client https://github.com/VoltDB/voltdb-client-nodejs Python Client https://github.com/VoltDB/voltdb-client-python Nodejs Client https://github.com/VoltDB/voltdb-client-nodejs Go Client https://github.com/VoltDB/voltdb-client-go PHP Client https://github.com/VoltDB/voltdb-client-php erlang Client https://github.com/VoltDB/voltdb-client-erlang JDBC Interface https://docs.voltdb.com/UsingVoltDB/ProgLangjdbc.php JSON HTTP Interface https://docs.voltdb.com/UsingVoltDB/ProgLangJson.php 16

17.Java Client 17

18.存储过程调用 • Procedure or AdHoc Synchronous or Asynchronous 18

19.JDBC Interface 19

20.JSON HTTP Interface http://localhost:8080/api/1.0/?Procedure=Select&Parameters=["French"] 20

21.VoltDB的数据处理方式 两个层次的分区分片 Site Site是最小单位 Select * from tableA 一致性哈希方式将数据分布在多个Site上 Where id=1 请求 Site分配给一个指定CPU内核 队列 Client 执行引擎 Cluster TableA id Partition 1 key val Val1 数据 node1 node2 node3 21

22.单分区事务 & 多分区事务 Select * from tableA a, tableB b where a,id=1 COORDINATOR and a.id = b.a_id Site Select * from tableA SiteA SiteB Where id=1 请求 请求 请求 队列 队列 队列 执行引擎 执行引擎 执行引擎 TableA TableA TableB id Partition 1 id Partition 1 id Partition 1 key key key val Val val Val a_id 1 1 1 数据 数据 数据 22

23.分区表 & 复制表 Cluster 分区表 Cluster 复制表 tableA tableA tableA tableA tableA tableA row1 row1 row1 row2 row1 row3 row2 row2 row2 row3 row3 row3 node1 node2 node3 node1 node2 node3 Select * from tableA a, tableB b where a.id=1 and a.id = b.a_id SiteA TableA TableB id Partition 1 id 2 key val Val a_id 1 1 node1 23

24.分区键 选择分区键的目标是确保表上最频繁的事务与访问的数据在同一个分区中执行。我们称之为单分区 事务。 • 选择一个值域分布合理的列,以便对数据行进行均匀分区。 • 选择分区键,应该选择每个表示上操作最频繁的列。 • 如果要关联多张表,则所有表共用同一个分区键 • 写事务的权重大于读事务 • 每个表只能有一个分区列,如果需要两列值做分布,则先合并两列。 • 如果表有主键,分区列必须要包含在主键中。 • 可以是任何整数(TINYINT、SMALLINT、integer或BIGINT)或字符串(VARCHAR)数据类型的列。 • 分区键不能为空。 24

25.Java 存储过程 25

26.定义一个存储过程 1.编译java类 $ javac -cp "$CLASSPATH:/opt/voltdb/voltdb/*" MakeReservation.java 2.打包class文件 $ jar cvf storedprocs.jar *.class 3.创建存储过程 $ sqlcmd 1> load classes storedprocs.jar; 2>CREATE PROCEDURE PARTITION ON TABLE reservation COLUMN flightID FROM CLASS MakeReservation.java ; 26

27.日志 voltdb/Log4j.xml 定义 调用 启动时指定配置文件 运行时更新配置文件 27

28. Q&A 入门:https://docs.voltdb.com/tutorial/ More:https://university.voltdb.com 28

VOLTDB诞生作为支持云端部署的内存数据库,并在持续增强流计算能力,原生分布式架构提供了可伸缩性,同时完全满足ACID要求,数据安全可靠。VOLTDB采用关系型数据存储,支持严格的事务模型和标准SQL。由2014图灵奖得主Mike Stonebraker博士领导全新设计的架构。