目 录
1 VoltDB简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
2 VoltDB部署安装环境. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
2.1.安装环境要求. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
2.2.安装VoltDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2.3.VoltDB是怎么工作的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
3.一个简单应用Hel lo,World!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
3.1创建一个目录用来存放项目所有源文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
3.2定义数据库结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
3.3创建存储过程文件用来插入记录文件名为Insert. java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
3.4创建存储过程用来查询记录,文件名为Select.java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
3.5创建客户端源文件名为Cl ient.java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
3.6创建工程定义文件project.xml,该文件用来定义数据库表和存储过程。. . . . . . . . . . . . . . . . . .7
3.7有了这些源文件和定义文件现在可以编译了过程如下. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
3.8.定义系统配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
3.9.运行Hel loWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
1 VoltDB简介
VoltDB是StoneBra ker最新研究成果是一个优化吞吐率的高性能集群开源SQLRDBMS支持ACID。从硬件上看 VoltDB基于PC+以太网+本地存储从体系结构上看其内部是一个ShareNothing的内存数据库通过并行单线程来保证事务一致性和高性能所有事务被实现为Java存储过程所有存储过程事务均全局有序 由于避免了锁的使用因此可以保证每个事务在所有分区上并行执行完成后才继续执行下一个事务事务不会乱序执行。存储过程内部支持分组、多路Join、聚合、函数等等如果希望提高吞吐率使用单事务多SQL可以有效提高吞吐率。 Volt DB的可靠性通过冗余和自动恢复来保证。
VoltDB值得关注的一个特性是自动数据分区数据表会被自动分配到集群节点。可以看成是传统Sharding的升级、整合版本。另外一个特性是自动快照这样在一个事务内部无需进行IO操作可以在微秒级别完成事务据说性能提高50倍。第三个特性是异步事务提交。从某种意义上看 VoltDB是一个共享内存的集群有些像此前有人提到的“Ram Cloud“。 VoltDB的系统性能据说在几个节点就可以达到百万TPS VoltDB支持多节点并行事务处理理论上不存在节点上限不过VoltDB开发人员最大测试集群是20个节点。
2 VoltDB部署安装环境
2.1.安装环境要求
Operating System VoltDB requires a 64-bit Linux-based operating system.Kits are built andqualified on CentOS version 5.6 and Ubuntu versions 10.4 and 10.10.
Development builds are also available for Macintosh OSX 10.61.
CPU•Dual core2 x86_64processor
•64bit
• 1.6 GHz
Memory 4 Gbytes3
Java Sun JDK 6 update 20 or later
Required Software NTP4
Recommended Software Ant 1.7 or later
Eclipse 3.x(or other Java IDE)
Footnotes:
1.CentOS 5.6 and later and Ubuntu 10.4 and later are the only officially supported operating systemsfor VoltDB.However,VoltDB is tested on several other POSIX-compliant and Linux-based 64-bitoperating systems, including Macintosh OSX 10.6.
2.Dual core processors are a minimum requirement.Four or eight physical cores are recommended foroptimalperformance.
3.Memory requirements are very specific to the storage needs of the application and the number ofn o des
in the cluster.However,4 Gigabytes should be considered a minimum configuration.
4.NTP minimizes time differences between nodes in a database cluster,which is critical for VoltDB.Allnodes ofthe cluster should be configured to synchronize against the same NTP server.Using asingle local NTP server is recommended,but not required.
2.2.安装VoltDB
下载安装包
# wget http://community.voltdb.com/sites/default/files/archive/2.5/LINUX-vo ltdb-2.5.tar.g z安装VoltDB到一个开发服务环境
# sudo tar -zxvf LINUX-voltdb-2.5.tar.gz -C /opt
# cd /opt
# sudo mv LINUX-voltdb-2.5/ voltdb
2.3.VoltD B是怎么工作的
VoltDB有如下图3.1组件
SQL Schema定义了数据库的布局。 VoltDB使用标准的SQL DDL语法来定义数据库模式。Store Procedures:存储过程定义了如何使用数据库。所有的数据请求都被存储过程执行
存储过程使用Java和SQL定义。
Client Application:应用客户端调用存储过程去执行数据库请求并调用定义在VoltDB客户端库函数。
VoltDB Project File:该文件指定了存储过程和模式的路径还包括一些额外的应用信息。被用来编译得到结果的VoltDB应用目录。
ApplicationCatalog:应用程序目录结合了部署集群的配置信息用来创建运行时数据库实例。
3.一个简单应用Hello,World!
在Linux下现在有许多开发环境IDE可用,为了简单此例仅使用了java(jre),Vo ltDB,和一个文本编辑器。 VoltDB是一个数据库用来从数据表存储和获得数据我们在这个应用用数据库存储“He l lo”和“W o rld”并获得它们。我用了不同的语言来表示这连个字段语言设为主键。
3.1.创建一个目录用来存放项目所有源文件
#mkdir h e llo world
#c d h e llo wo r ld
3.2.定义数据库结构
CREATE TABLE HELLOWORLD (
HELLO VARCHAR(15) ,
VOLTDB VARCHAR(15) ,
DIALECT VARCHAR(15) NOT NULL,
PRIMARY KEY (DIALECT)
) ;
3. 3.创建存储过程文件用来插入记录 文件名为Insert. java
# nano Insert. java
编辑为如下import org.voltdb.*;
@ProcInfo(partitionInfo = "HELLOWORLD.DIALECT: 2",singlePartition = true
)public class Insert extends VoltProcedure {public final SQLStmt sql = new SQLStmt(
"INSERT INTO HELLOWORLD VALUES (?, ?, ?) ; "
) ;public VoltTable[ ] run( String hello,
String voltdb,
String language)throws VoltAbortException {voltQueueSQL( sql, hello, world, language ) ;voltExecuteSQL( ) ;
return null;
}
}
3.4创建存储过程用来查询记录,文件名为Select.java# nano Select. java
编辑成如下import org.voltdb.*;
@ProcInfo(partitionInfo = "HELLOWORLD.DIALECT: 0",singlePartition = true
)public class Select extends VoltProcedure {public final SQLStmt sql = new SQLStmt(
"SELECT HELLO, WORLD FROM HELLOWORLD " +
" WHERE DIALECT = ?; "
) ;public VoltTable[ ] run( String language)throws VoltAbortException {voltQueueSQL( sql, language ) ;return voltExecuteSQL( ) ;
}
}
3.5.创建客户端源文件名为Client.java
#java Client.java
源码编辑为import org.voltdb.*;import org.voltdb.client.*;public class Client {public static void main(String[ ] args) throws Exception {/*
* Instantiate a client and connect to the database.
*/org.voltdb.client.Client myApp;myApp = ClientFactory.createClient( ) ;myApp.createConnection("localhost") ;
/*
* Load the database.
*/
myApp.callProcedure("Insert", "Hello", "World", "English") ;myApp.callProcedure("Insert", "Bonjour", "Monde", "French") ;myApp.callProcedure("Insert", "Hola", "Mundo", "Spanish") ;myApp.callProcedure("Insert", "Hej", "Verden", "Danish") ;myApp.callProcedure("Insert", "Ciao", "Mondo", "Italian") ;
/*
* Retrieve the message.
*/final ClientResponse response = myApp.callProcedure("Select",
"Spanish") ;if (response.getStatus ( ) != ClientResponse.SUCCESS) {
System.err.println(response.getStatusString( ) ) ;
System.exit(-1) ;
}final VoltTable results [ ] = response.getResults ( ) ;if (results.length == 0 | | results [0] .getRowCount( ) != 1) {
System.out.printf("I can't say Hello in that language. \n") ;
System.exit(-1) ;
}
VoltTable resultTable = results [0] ;
VoltTableRow row = resultTable.fetchRow(0) ;
System.out.printf("%s, %s! \n", row.getString("hello") ,row.getString("world") ) ;
}
}
3.6.创建工程定义文件project.xml,该文件用来定义数据库表和存储过程。
# nano project.xml
源文件为
<?xml version="1.0"?>
<project>
<database>
<schemas>
<schema path='helloworld.sql' />
</schemas>
<procedures>
<procedure class='Insert' />
<procedure class='Select' />
</procedures>
<partitions>
<partition table='HELLOWORLD' column='DIALECT' />
</partitions>
</database>
</project>
编辑保存。
3.7.有了这些源文件和定义文件现在可以编译了过程如下cd $HOME/helloworld
要将voltdb路径添加到类路径的环境变量重
# CLASSPATH=" ./:/opt/voltdb/lib/*:/opt/voltdb/voltdb/*"
# export CLASSPATH
接下来分别编译Client. java, Insert. java,Select. java文件
# javac Client. java
# javac Insert. java
# javac Select. java
最后是创建应用程序目录生产helloworld. jar文件
# java org.voltdb.compiler.VoltCompiler project.xml helloworld. jar
3.8.定义系统配置
当编译好源文件和创建好应用程序目录接下来就是创建数据库和运行应用程序了最后一步的目的是配置数据库和硬件环境
The number of servers that willbe used//定义数据库服务器数量
The number of sites per server
件名为deployment.xml
# nano deployment.xml
<?xml version="1.0"?>
<deployment>
<cluster hostcount="1"sitesperhost="2"
/>
<httpd enabled="true" port=”8081”>
<jsonapi enabled="true" />
</httpd>
</deployment>
3.9.运行HelloWorld
运行VoltDB应用包含两个分开的过程开启数据库服务和运行客户端应用首先在一个终端开启数据库服务
#java -Djava.library.path=/opt/voltdb/voltdb \org.voltdb.VoltDB \catalog helloworld. jar \deployment deployment.xml \leader localhost
如果服务开启成功 VoltDB将显示有关信息
……
……
再启动一个终端执行如下命令
# java Client
运行成功
HostKvm发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付仅5.95美元起。这是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面分享几款香港VPS和韩国VPS的配置和价格信息。...
野草云服务商在前面的文章中也有多次提到,算是一个国内的小众服务商。促销活动也不是很多,比较专注个人云服务用户业务,之前和站长聊到不少网友选择他们家是用来做网站的。这不看到商家有提供香港云服务器的优惠促销,可选CN2、BGP线路、支持Linux与windows系统,支持故障自动迁移,使用NVMe优化的Ceph集群存储,比较适合建站用户选择使用,最低年付138元 。野草云(原野草主机),公司成立于20...
百星数据(baixidc),2012年开始运作至今,主要提供境外自营云服务器和独立服务器出租业务,根据网络线路的不同划分为:美国cera 9929、美国cn2 gia、香港cn2 gia、韩国cn2 gia、日本cn2 gia等云服务器及物理服务器业务。目前,百星数据 推出的日本、韩国、香港cn2 gia云服务器,2核2G/40G/5M带宽低至60元/月,600元/年。百星数据优惠码:优惠码:30...