voltDB学习笔记.docx_第1页
voltDB学习笔记.docx_第2页
voltDB学习笔记.docx_第3页
voltDB学习笔记.docx_第4页
voltDB学习笔记.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VoltDB逐步深入第一章 概述VoltDB是StoneBraker最新研究成果,是一个优化吞吐率的高性能集群开源SQL RDBMS,支持ACID。从硬件上看,VoltDB基于PC+以太网+本地存储;从体系结构上看,其内部是一个ShareNothing的内存数据库,通过并行单线程来保证事务一致性和高性能,所有事务被实现为Java存储过程,所有存储过程(事务)均全局有序,由于避免了锁的使用,因此可以保证每个事务在所有分区上并行执行完成后才继续执行下一个事务,事务不会乱序执行。存储过程内部支持分组、多路Join、聚合、函数等等,如果希望提高吞吐率,使用单事务多SQL可以有效提高吞吐率。VoltDB的可靠性通过冗余和自动恢复来保证。VoltDB值得关注的一个特性是自动数据分区,数据表会被自动分配到集群节点。可以看成是传统Sharding的升级、整合版本。另外一个特性是自动快照,这样在一个事务内部无需进行IO操作,可以在微秒级别完成事务,据说性能提高50倍。第三个特性是异步事务提交。从某种意义上看,VoltDB是一个共享内存的集群,有些像此前有人提到的“Ram Cloud“。VoltDB的系统性能据说在几个节点就可以达到百万TPS VoltDB支持多节点并行事务处理,理论上不存在节点上限,不过VoltDB开发人员最大测试集群是20个节点。第二章 简单应用2.1 voltdb创建数据库及简单操作1. 首先创建一个文件,命名为:abner.sql,文件内容为:CREATE TABLE towns (town VARCHAR(64),county VARCHAR(64),state VARCHAR(2);备注:以上的语句称为:schema2. 编译文件:abner.sql,命令如下:voltdb compile o abner.jar abner.sql备注:voltdb编译abner.sql中包含的schema,并创建abner.jar,“-o”选项表示自己命名jar包的名字,如果不带“-o”参数,则默认生成catalog.jar,命令如下:voltdb compile abner.sql3. 编译成功,创建一个应用catalog,可以启动数据库,启动数据库的参数很多,这里不再描述,详细选项看第一章,启动数据库命令如下:命令:voltdb create catalog abner.jar 备注:catalog关键字告诉voltdb创建数据库时使用哪个应用catalog4. 启动成功后,验证数据库是否可进行操作,例如:插入数据,查询数据等新打开一个会话,进入voltdb的bin目录,在命令行输入:./sqlcmd命令执行成功,进入voltdb的sql命令行接口,然后可进行记录插入和数据查询。插入数据:insert into towns values (Billerica, middlesex, MA);insert into towns values( Buffalo, Erie, NY);验证插入记录是否成功:select count(*) as total from towns;操作完成,需要退出sql命令行模式,输入:exit即可;如果想关闭数据库进程,在启动数据库的会话上,通过发送终结信号给操作系统,按下:Ctrl-C这样数据库就可以关闭了。2.2 导入批量数据工具在voltdb的bin目录下有个文件:csvloader,此文件为shell脚本,可批量导入数据待导入的数据为:data.txt,字段间的分隔符为:“|”,位于:/home目录下首先启动数据库:voltdb compile catalog abner.jar启动成功后,打开一个新会话,进入voltdb的bin目录,执行如下命令:./csvloader -separator “|” -skip 1-file /home/data.txt towns备注:-separator:表示字段间以什么作为分隔符-skip:文件中跳过的行数,-skip 1 表示第一行不导入-file:文件位置towns:表示导入数据的表名导入完成后,进入sql命令行模式:./sqlcmd可进行查询:select * from towns;2.3 分片Partitioning:分片或者说分区,是voltdb的最重要的特性之一。分区的目的是分割数据和处理数据的过程。如果一个表被分区,每次插入数据,voltdb按照分区列决定此行记录插入到哪个分区,例如towns表,安好town列分区,那么对于有同样town的行,存在同一个分区中。按照指定列分区命令如下:PARTITION TABLE towns ON 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_num,但是两张表中的state不完全一致,在towns中state是缩写,在people中是全称,因此用state_num作为分区字段更好。PARTITION TABLE towns ON COLUMN state_num;PARTITION TABLE people ON COLUMN state_num;如果使用state进行查询的情况更加频繁,则可以创建一个replicated table复制表: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/voltdbroot/snapshots/有了复制数据库的功能,可以通过recover命令代替create来启动数据库命令:Voltdb recover如果有多个快照,Voltdb查找最新的快照进行恢复,快照包含了catalog和数据,在恢复时不需要指定catalog用voltadmin update 实现更新,命令如下:命令:voltadmin update towns.jar voltdbroot/deployment.xml必须指定schema和deployment对表结构的调整要先保存数据,然后将数据导入新数据库voltadmin restore命令可以恢复数据但不包括catalog,命令:voltadmin restore /home/voltdbroot/snapshots/ states将快照的数据导入表:states,但catalog已经存在,不会修改catalog在开发或者测试阶段,我们手动恢复数据或者更新catalog是必须的,但在应用阶段,就有必须保持快照是最新的,以防宕机或者其它意外。解决方法:定时执行快照计划,对数据库的数据进行备份,通过配置文件的配置项完成配置项如下:Snapshot的名字叫做:tutorial,快照执行的频率为:5min,保留3分最近的快照。其余的快照将被删除,以节省空间。通过命令:voltdb recover host localhost deployment deployment.xml更新配置项,如果是集群则把“localhost”替换为集群的leader2.5 存储过程每次执行复杂的查询是令人讨厌的,voltdb支持通过存储过程执行。每次只修改输入。创建存储过程的schema:Create procedure as例如:CREATE PROCEDURE leastpopulated ASSELECT TOP 1 county, abbreviation, populationFROM people, states WHERE people.state_num=?AND people.state_num=states.state_numORDER BY population ASC;leastpopulated:存储过程的名字?:作为输入参数,用户可以指定条件查询的具体条件值创建的存储过程中也可以指定单分区或者多分区,可以在不停止数据库的情况下,更新数据库,更新方式和更新表的方法一样:例如:$ voltdb compile -o towns.jar towns.sql$ voltadmin update towns.jar deployment.xml存储过程支持java客户端,可以用于设计更加复杂的存储过程import org.voltdb.*;public class LeastPopulated extends VoltProcedure public final SQLStmt getLeast = 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.5110.1.1.5210.1.1.55要在三个节点执行相同的操作:1. 安装voltdb2. 创建schemaCREATE TABLE HELLOWORLD ( HELLO VARCHAR(15), WORLD VARCHAR(15), DIALECT VARCHAR(15) NOT NULL, PRIMARY KEY (DIALECT);PARTITION

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论