快照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.

欧路云(22元) 新增美国Cera线路VPS主机且可全场8折

欧路云(oulucloud) 商家在前面的文章中也有陆续介绍过几次,这不今天有看到商家新增加美国Cera线路的VPS主机,而且有提供全场八折优惠。按照最低套餐最低配置的折扣,月付VPS主机低至22元,还是比较便宜的。不过我们需要注意的是,欧路云是一家2021年新成立的国人主机商,据说是由深圳和香港的几名大佬创建。如果我们有介意新商家的话,选择的时候谨慎且月付即可,注意数据备份。商家目前主营高防VP...

美国200G美国高防服务器16G,800元

美国高防服务器提速啦专业提供美国高防服务器,美国高防服务器租用,美国抗攻击服务器,高防御美国服务器租用等。我们的海外高防服务器带给您坚不可摧的DDoS防护,保障您的业务不受攻击影响。HostEase美国高防服务器位于加州和洛杉矶数据中心,均为国内访问速度最快最稳定的美国抗攻击机房,带给您快速的访问体验。我们的高防服务器配有最高层级的DDoS防护系统,每款抗攻击服务器均拥有免费DDoS防护额度,让您...

hosthatch:14个数据中心15美元/年

hosthatch在做美国独立日促销,可能你会说这操作是不是晚了一个月?对,为了准备资源等,他们拖延到现在才有空,这次是针对自己全球14个数据中心的VPS。提前示警:各个数据中心的网络没有一个是针对中国直连的,都会绕道而且ping值比较高,想买的考虑清楚再说!官方网站:https://hosthatch.com所有VPS都基于KVM虚拟,支持PayPal在内的多种付款方式!芝加哥(大硬盘)VPS5...

voltdb为你推荐
马云将从软银董事会辞职马云为什么辞职租车平台哪个好租车哪家好?聚酯纤维和棉哪个好聚酯纤维和纯棉的相比,哪个好?录屏软件哪个好有什么好用的游戏录屏软件推荐吗?闪迪和金士顿哪个好固态硬盘哪个好,是金士顿好还是闪迪的手机管家哪个好手机管家哪个软件好手机炒股软件哪个好手机炒股软件哪个好啊?空间登录qq如何在空间里登陆qqgoogle广告申请怎么样申请谷歌广告成功首选dns服务器首选DNS服务器和备用DNS服务器有什么区别?
yaokan永久域名经常更换 深圳域名注册 联通vps 域名备案中心 idc评测网 512m内存 云图标 eq2 牛人与腾讯客服对话 服务器干什么用的 帽子云排名 photobucket ledlamp 万网注册 七牛云存储 谷歌搜索打不开 开心online webmin e-mail server2008 更多