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

v5server:香港+美国机房,优质CN2网络云服务器,7折优惠,低至35元/月

v5net当前对香港和美国机房的走优质BGP+CN2网络的云服务器进行7折终身优惠促销,每个客户进线使用优惠码一次,额外有不限使用次数的终身9折优惠一枚!V5.NET Server提供的都是高端网络线路的机器,特别优化接驳全世界骨干网络,适合远程办公、跨境贸易、网站建设等用途。 官方网站:https://v5.net/cloud.html 7折优惠码:new,仅限新客户,每人仅限使用一次 9...

PacificRack - 洛杉矶QN机房 低至年$7.2 同有站群多IP地址VPS主机

需要提前声明的是有网友反馈到,PacificRack 商家是不支持DD安装Windows系统的,他有安装后导致服务器被封的问题。确实有一些服务商是不允许的,我们尽可能的在服务商选择可以直接安装Windows系统套餐,毕竟DD安装的Win系统在使用上实际上也不够体验好。在前面有提到夏季促销的"PacificRack夏季促销PR-M系列和多IP站群VPS主机 年付低至19美元"有提到年付12美元的洛杉...

3G流量免费高防CDN 50-200G防御

简介酷盾安全怎么样?酷盾安全,隶属于云南酷番云计算有限公司,主要提供高防CDN服务,高防服务器等,分为中国境内CDN,和境外CDN和二个产品,均支持SSL。目前CDN处于内测阶段,目前是免费的,套餐包0.01一个。3G流量(高防CDN)用完了继续续费或者购买升级包即可。有兴趣的可以看看,需要实名的。官方网站: :点击进入官网云南酷番云计算有限公司优惠方案流量3G,用完了不够再次购买或者升级套餐流量...

voltdb为你推荐
天气预报哪个好用哪个最准确手机上的天气预报软件,哪个最准,最好用?免费阅读小说app哪个好求一个看书比较好的APP帕萨特和迈腾哪个好迈腾与帕萨特那个好?二手车网站哪个好想买台二手车,哪个二手车网站靠谱无纺布和熔喷布口罩哪个好表层水刺布,中间层pp无纺布+熔喷布,里层pp无纺布口罩好吗?雅思和托福哪个好考雅思和托福哪个好考一点牡丹江教育云空间登录我想知道校园云空间是用什么账号登录的?铁通dns服务器地址桂林铁通DNS服务器地址是多少?360云盘企业版有什么网盘好用的?360云盘即将停止个人版转向企业版了,百度云限速太厉害不好用,微云感觉空间小了点360云盘共享群360云盘共享群怎么没有了
免备案虚拟主机 万网域名 网站虚拟主机空间 宿迁服务器租用 南通服务器租用 新网域名解析 网易域名邮箱 edgecast asp.net主机 香港机房 国外服务器网站 香港机房托管 payoneer 英语简历模板word 光棍节日志 ubuntu更新源 常州联通宽带 创建邮箱 带宽租赁 789 更多