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

Ftech:越南vps,2核/2G/20G SSD/1Gbps不限流量/可安装Windows系统,$12.5月

ftech怎么样?ftech是一家越南本土的主机商,成立于2011年,比较低调,国内知道的人比较少。FTECH.VN以极低的成本提供高质量服务的领先提供商之一。主营虚拟主机、VPS、独立服务器、域名等传统的IDC业务,数据中心分布在河内和胡志明市。其中,VPS提供1G的共享带宽,且不限流量,还可以安装Windows server2003/2008的系统。Ftech支持信用卡、Paypal等付款,但...

PQS彼得巧 年中低至38折提供台湾彰化HiNet线路VPS主机 200M带宽

在六月初的时候有介绍过一次来自中国台湾的PQS彼得巧商家(在这里)。商家的特点是有提供台湾彰化HiNet线路VPS主机,起步带宽200M,从带宽速率看是不错的,不过价格也比较贵原价需要300多一个月,是不是很贵?当然懂的人可能会有需要。这次年中促销期间,商家也有提供一定的优惠。比如月付七折,年付达到38折,不过年付价格确实总价格比较高的。第一、商家优惠活动年付三八折优惠:PQS2021-618-C...

ProfitServer$34.56/年,5折限时促销/可选西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

ProfitServer怎么样?ProfitServer好不好。ProfitServer是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对...

voltdb为你推荐
软银孙正义软银与孙正义是什么关系?软银是那个国家的?软银是做什么的?马云将从软银董事会辞职阿里巴巴马云为啥叫董事局主席而不叫董事会主席?董事局和董事会啥区别?电脑杀毒软件哪个好现在电脑用哪个杀毒软件最好少儿英语哪个好少儿英语哪套教材好哪里好呢?石英表和机械表哪个好手表是电子手表好还是机械手表好?绝地求生加速器哪个好绝地求生的加速器哪个好用?无纺布和熔喷布口罩哪个好大雾天气带什么样的口罩最好手机杀毒哪个好手机杀毒软件哪个好 五大手机安全软件杀毒大比拼清理手机垃圾软件哪个好手机垃圾清理软件哪个好视频软件哪个好什么看视频的软件好
网络域名 美国vps推荐 贝锐花生壳域名 香港ufo 博客主机 创宇云 java空间 网站木马检测工具 可外链相册 linux使用教程 免费私人服务器 免费mysql数据库 中国电信网络测速 贵阳电信测速 阿里云邮箱登陆地址 稳定空间 宿迁服务器 网络速度 .htaccess symantec 更多