快照voltDB学习笔记

voltdb  时间:2021-01-26  阅读:()

VoltDB逐步深入

第一章概述

VoltDB是StoneBraker最新研究成果是一个优化吞吐率的高性能集群开源SQL RDBMS支持ACID。从硬件上看 VoltDB基于PC+以太网+本地存储从体系结构上看其内部是一个ShareNothing的内存数据库通过并行单线程来保证事务一致性和高性能所有事务被实现为Java存储过程所有存储过程事务均全局有序 由于避免了锁的使用 因此可以保证每个事务在所有分区上并行执行完成后才继续执行下一个事务事务不会乱序执行。存储过程内部支持分组、多路Join、聚合、函数等等如果希望提高吞吐率使用单事务多SQL可以有效提高吞吐率。 VoltDB的可靠性通过冗余和自动恢复来保证。

VoltDB值得关注的一个特性是自动数据分区数据表会被自动分配到集群节点。可以看成是传统Sharding的升级、整合版本。另外一个特性是自动快照这样在一个事务内部无需进行IO操作可以在微秒级别完成事务据说性能提高50倍。第三个特性是异步事务提交。从某种意义上看 VoltDB是一个共享内存的集群有些像此前有人提到的“Ram Cloud“。VoltDB的系统性能据说在几个节点就可以达到百万TPSVoltDB支持多节点并行事务处理理论上不存在节点上限不过VoltDB开发人员最大测试集群是20个节点。

第二章简单应用

2.1 voltdb创建数据库及简单操作

1.首先创建一个文件命名为 abner.sql 文件内容为

CREATE TABLE towns (town VARCHAR(64) ,county VARCHAR(64) ,state VARCHAR(2)

) ;

备注 以上的语句称为 schema

2.编译文件 abner.sql 命令如下voltdb compile–o abner.jarabner.sql

备注 voltdb编译abner.sql中包含的schema并创建abner.jar “-o”选项表示自己命名jar包的名字

如果不带“-o”参数则默认生成catalog.jar命令如下voltdbcompi leabner.sql

3.编译成功创建一个应用catalog可以启动数据库启动数据库的参数很多这里不再描述详细选项看第一章启动数据库命令如下

命令 voltdbcreate catalogabner.jar

备注 catalog关键字告诉voltdb创建数据库时使用哪个应用catalog

4.启动成功后验证数据库是否可进行操作例如插入数据查询数据等

新打开一个会话进入voltdb的bin目录在命令行输入 ./sqlcmd

命令执行成功进入voltdb的sql命令行接口然后可进行记录插入和数据查询。

插入数据insert intotownsvalues(‘Bi l lerica’, ‘middlesex’, ‘MA’);insert intotownsvalues(‘Buffalo’, ‘Erie’, ‘NY’);

验证插入记录是否成功select count(*) astotal from towns;

操作完成需要退出sql命令行模式输入 exit即可

如果想关闭数据库进程在启动数据库的会话上通过发送终结信号给操作系统按下Ct r l-C这样数据库就可以关闭了。

2.2导入批量数据工具

在voltdb的bin目录下有个文件 csvloader此文件为shel l脚本可批量导入数据待导入的数据为 data.txt字段间的分隔符为 “|”位于 /home目录下

首先启动数据库voltdb compi lecatalogabner.jar

启动成功后打开一个新会话进入voltdb的bin目录执行如下命令

./csvloader --separator “|” --skip 1--fi le/home/data.txt towns

备注

--separator表示字段间以什么作为分隔符

--skip文件中跳过的行数 --skip1表示第一行不导入

--fi le文件位置towns表示导入数据的表名

导入完成后进入sql命令行模式

./sqlcmd

可进行查询 select*from towns;

2.3分片

Partitioning分片或者说分区是voltdb的最重要的特性之一。分区的目的是分割数据和处理数据的过程。

如果一个表被分区每次插入数据 voltdb按照分区列决定此行记录插入到哪个分区例如towns表安好town列分区那么对于有同样town的行存在同一个分区中。

按照指定列分区命令如下

PARTITIONTABLEtownsON COLUMN town

如果两个表有着同样的字段例如

CREATE TABLE towns (town VARCHAR(64) ,state VARCHAR(2) ,state_num TINYINT NOT NULL,county VARCHAR(64) ,county_num SMALLINT NOT NULL,elevation INTEGER

) ;

CREATE TABLE people (state_num TINYINT NOT NULL,county_num SMALLINT NOT NULL,state VARCHAR(20) ,county VARCHAR(64) ,population INTEGER

) ;

Towns和people表都有state state中state是缩写在people中是全称 因此用state_num作为分区字段更好。

PARTITION TABLE towns ON COLUMN state_num;

PARTITION TABLE people ON COLUMN state_num;

如果使用state进行查询的情况更加频繁则可以创建一个repl icatedtable复制表CREATE TABLE states (abbreviation VARCHAR(20) ,state_num TINYINT,name VARCHAR(20) ,

PRIMARY KEY (state_num)

) ;

这个表尽可能只用来进行读并且每个分区中都会创建。

实现方法用CREATE TABLE而不用PARTITION TABLE

缺点比较明显 降低并发性而且要插入数据要在所有的分区执行一次

2.4更新schema和持久化

保存数据

Voltdb数据库的快照完全基于磁盘的包括所有的数据。在voltdb数据库运行中可以通过

命令 voltadmin save创建快照

Voltadmin save/home/voltdbroot/snapshots/“towns”

创建的快照名是 towns存放的路径为 /home/voltd broot/snapshots/

有了复制数据库的功能可以通过recover命令代替create来启动数据库

命令 Voltdb recover

如果有多个快照 Voltdb查找最新的快照进行恢复快照包含了catalog和数据在恢复时不需要指定catalog

用voltadmin update实现更新命令如下

命令 voltadmin updatetowns.jarvoltdbroot/deployment.xml

必须指定schema和deployment

对表结构的调整要先保存数据然后将数据导入新数据库voltadmi n restore命令可以恢复数据但不包括catal og

命令 voltadmin restore /home/voltdbroot/snapshots/ "states"

将快照的数据导入表:states但catalog已经存在不会修改catalog

在开发或者测试阶段我们手动恢复数据或者更新catalog是必须的但在应用阶段就有必须保持快照是最新的 以防宕机或者其它意外。

解决方法

定时执行快照计划对数据库的数据进行备份通过配置文件的配置项完成

配置项如下

<snapshot prefix="tutorial"frequency="5m"retain="3"

/>

Snapshot的名字叫做 tutorial 快照执行的频率为 5min保留3分最近的快照。其余的快照将被删除 以节省空间。

通过命令voltdb recover host localhost deployment deployment.xml

更新配置项如果是集群则把“localhost”替换为集群的leader

2.5存储过程

每次执行复杂的查询是令人讨厌的 voltdb支持通过存储过程执行。每次只修改输入。创建存储过程的schema

Create procedure as

例如

CREATE PROCEDURE leastpopulatedAS

SELECT TOP 1 county, abbreviation, population

FROM people, states WHERE people.state_num=?

AND people.state_num=states.state_num

ORDER BY population ASC;

leastpopulated存储过程的名字

?作为输入参数用户可以指定条件查询的具体条件值

创建的存储过程中也可以指定单分区或者多分区

可以在不停止数据库的情况下更新数据库更新方式和更新表的方法一样

例如

$ voltdb compile -o towns.jar towns.sql

$ voltadmin update towns.jar deployment.xml

存储过程支持j ava客户端可以用于设计更加复杂的存储过程import org.voltdb.*;public class LeastPopulated extends VoltProcedure {public final SQLStmtgetLeast = new SQLStmt(

" SELECT TOP 1 county, abbreviation, population "

+ " FROM people, states WHERE people.state_num=?"

+ " AND people.state_num=states.state_num"

+ " ORDER BY population ASC; " ) ;public VoltTable[ ] run(integer state_num)throws VoltAbortException {voltQueueSQL( getLeast, state_num ) ;return voltExecuteSQL( ) ;

}

}

Jvava的存储过程作为一个单元、事务要么成功要么失败。

编写了java的存储过程将其编译然后利用命令

CREATE PROCEDURE FROM CLASS UpdatePeople;

PARTITION PROCEDURE UpdatePeople ON TABLE people COLUMN state_num;第三章集群实战

搭建集群三个节点

10.1.1.51

10.1.1.52

10.1.1.55

要在三个节点执行相同的操作

1. 安装voltdb

2. 创建schema

CREATETABLE HELLOWORLD(

HELLOVARCHAR(15),

WORLDVARCHAR(15),

DIALECTVARCHAR(15)NOT NULL,

PRIMARY KEY(DIALECT)

);

PARTITION TABLE HELLOWORLD ON COLUMN DIALECT;

CREATE PROCEDURE FROM CLASS Insert;

CREATE PROCEDURE FROM CLASSSelect;

PARTITION PROCEDURE Insert ON TABLE HELLOWORLD COLUMN DIALECT;

PARTITION PROCEDURESelectONTABLE HELLOWORLD COLUMN DIALECT;保存为 hel loworld.sql

3.

TmhHost暑假活动:高端线路VPS季付8折优惠,可选洛杉矶CN2 GIA/日本软银/香港三网CN2 GIA/韩国双向CN2等

tmhhost怎么样?tmhhost正在搞暑假大促销活动,全部是高端线路VPS,现在直接季付8折优惠,活动截止时间是8月31日。可选机房及线路有美国洛杉矶cn2 gia+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。点击进入:tmhhost官方网站地址tmhhost优惠码:Tm...

Megalayer美国服务器CN2优化线路30M带宽3独立IP限时月299元

Megalayer 商家算是比较新晋的国内主机商,主要方向是美国、香港、菲律宾等机房的独立服务器为主,以及站群服务器和显卡服务器。同时也有新增价格并不是特别优惠的VPS云服务器。上午的时候有网友问问有没有CN2线路的美国独立服务器的,这里我推荐他选择Megalayer看看,目前也是有活动截止到月底的。Megalayer 商家创办2年左右时间,如果我们初次使用建议月付体验。目前在进行且可能截止到6月...

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...

voltdb为你推荐
软银科技软银通信科技(上海)有限公司大连分公司怎么样?郑州软银科技有限公司河南比较出名的营销公司是哪家?我们下半年有新产品上市需要做一些推广2014年万圣节是几月几日万圣节是几月几日绿色桌面背景图片win7如何把的“计算机”背景设置成绿色304和316不锈钢哪个好304与316用哪个好?苹果x和xr哪个好苹果x,苹果xs,苹果xr,苹果xs max哪个更值得买?985和211哪个好211的院校和985的那个好?帕萨特和迈腾哪个好迈腾与帕萨特那个好?车险哪个好买汽车保险,买哪几种比较好空间登录页面登录QQ空间时,如何使登陆界面不直接进入个人中心?
asp虚拟主机 cn域名 服务器评测 highfrequency bbr 流媒体服务器 174.127.195.202 名片模板psd parseerror 京东商城双十一活动 中国电信测速112 天互数据 怎么测试下载速度 腾讯实名认证中心 个人免费主页 空间首页登陆 空间购买 空间租赁 上海电信测速 我的世界服务器ip 更多