1 / 23

VoltDB 入门介绍

VoltDB 入门介绍. 概要. 一、 Technical Overview 二、 Technical Action 三、 Demo 演示. Technical Overview . What is VoltDB? It’s an open-source OLTP database that is designed to run on a cluster. It is an in-memory shared-nothing system. Tables are partitioned across multiple servers in the cluster.

bryony
Download Presentation

VoltDB 入门介绍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VoltDB入门介绍

  2. 概要 一、Technical Overview 二、Technical Action 三、Demo演示

  3. Technical Overview What is VoltDB? • It’s an open-source OLTP database that is designed to run on a cluster. • It is an in-memory shared-nothing system. • Tables are partitioned across multiple servers in the cluster.

  4. Technical Overview VoltDB的优点: • 可以提供比传统数据库系统好很多的性能。 • 可以线性扩展。 • 兼容SQL作为数据库管理操作接口。 • 兼容ACID,满足数据一致与完整性。 • 7*24*365高可用。

  5. Technical Overview 如何实现ACID: • 原子性(Atomicity): • VoltDB通过使用存储过程来确保原子性,一个存储过程执行必须等待前一个存储过程成功或回滚结束。 • 一致性(Consistency): • VoltDB在所有的数据库查询中强制schema与数据类型约束.  • 隔绝性(Isolation,又称独立性):  • VoltDB事务全局(所有被影响的分区)顺序执行(没有交叉)(任何一个分区同一时间只有一个执行,即串行的)。 • 持久性(Durability): • VoltDB提供分区复制以及周期性的数据库snapshot,确保数据持久化。

  6. Technical Overview VoltDB的架构: VoltDB数据库是一个分布式,可扩展,shared-nothing的内存数据库。使用JAVA 写的存储过程来定义事务。使用标准SQL访问数据,使用并行的单线程处理方式确保数据一致性,同时避免了传统数据库的锁,插销,资源管理开销。

  7. Technical Overview VoltDB的事务提交: • 运行前,用户自己写存储过程,并提交给服务端。 • 运行时,用户程序调用存储过程完成事务操作,所有事务的运行逻辑是由VoltDB在服务器进程中完成的。 • 缺点?

  8. Technical Overview VoltDB的数据分布: • 结构基于SNA。 • 数据分布策略是基于哈希的。 • 采用这种方法后,集群的规模是事先确定好的,新增机器需要停止服务后重新分布数据。另外,数据哈希被分散后,数据的连续性被打乱了,在这个数据结构上做范围查询需要动用服务这张表的所有机器,处理范围查询会很低效。

  9. Technical Overview VoltDB的事务处理: • 依赖NTP服务进行各节点之间的时间同步。 • 多个事务在多个服务器节点同时执行, • 如果事务之间有冲突,那么事务的执行是完全隔离的,即达到SERIALIZABLE ISOLATION。 • 事先分析好存储过程之间的关系,如果两个事务可能存在冲突,则不让这两个进程在同一个时间执行。 • 并发处理中,每一个事务在执行之前都要等待一个Round Trip时间,VoltDB已经进行了优化。

  10. Technical Overview VoltDB的性能(官方): VoltDB is very scalable; it should scale to 120 partitions, 39 servers, and 1.6 million complex transactions per second at over 300 CPU cores, VoltDB 宣称具备非常高的可伸缩性,超过 120 个分区、39台服务器,可在 300 个 CPU 核心上每秒钟处理 160 万的复杂事务。 测试例子

  11. Technical Overview VoltDB的局限性: • 灵活性&扩展性。必须停止服务进行修改而不能动态修改。 • SQL语法支持,不支持动态sql,不支持or语法。 • “select * from foo where bar = ?;” (YES) • “select * from ? where bar = ?;” (NO) • 性能?

  12. Technical Overview VoltDB的适用场景: VoltDB适合OLTP系统,单个事务较小,但是事务总量非常之多的应用。比如金融,零售,WEB2.0等传统OLTP应用。 http://voltdb.com/customers正在使用VoltDB的一些公司

  13. Technical Action VoltDB的运行要求:

  14. Technical Action VoltDB的安装: $ tar -zxvf voltdb-2.1.tar.gz -C $HOME/ $ sudo tar -zxvf voltdb-2.1.tar.gz -C /opt $ cd /opt $ sudomv voltdb-2.1 voltdb

  15. Technical Action • VoltDBApplication step by step: • Defining the Database Schema • Writing the Stored Procedure for CRUD • Writing the Client Application • Creating the Project Definition • Building the Application • Run

  16. Technical Action • 分表字段: • 建表时的主键索引不一定是voltdb里的分表字段(Partitioning column)。 • 分表字段是根据业务,频率来确定的,确定的分表字段需要在项目定义文件和存储过程文件中指明。 • @ProcInfo( • singlePartition = true, • partitionInfo = "Reservation.FlightID: 0" • ) • <partition table="Reservation" column="FlightID">

  17. Technical Action • 分表字段的建立规则: • 任意的int或string型字段都可以作为分表字段,类似索引,从上下文看是全局的。 • 对于每一个表来说分表字段有且只能有一个,如果有两个或以上的字段需要作为分表字段,就用这些字段组合起来形成一个新字段来做。 • 分表字段不能为null,可以为empty或0,分表字段的值不需要唯一。

  18. Technical Action • Replicated Tables: • VoltDB里如果不在项目定义文件中特别指定一个表有分表字段,则这个表默认被复制(Replicated)。 • 可以复制的表要满足的条件:Small, mostly read-only tables can be replicated。

  19. Technical Action VoltDB stored procedure(一般形式): import org.voltdb.*; @ProcInfo( singlePartition = true|false, partitionInfo = "Table-name.Column-name: 0" ) public class Procedure-name extends VoltProcedure { // Declare SQL statements ... public datatype run ( arguments ) throws VoltAbortException { // Body of the Stored Procedure ... } }

  20. Technical Action • Default Procedures for Partitioned Tables: • 表名大写,存储过程名小写。 • 针对最常用的insert、select、update和delete。 • Insert操作,参数按表结构定义的顺序排列。 • Select和delete只要主键。 • Update操作,参数也要按表结构定义的顺序排列,主键要出现两次。 • client.callProcedure("HELLOWORLD.insert","Howdy","Earth","American"); • client.callProcedure("HELLOWORLD.select“,"American").getResults(); • client.callProcedure("HELLOWORLD.update“,"Yo","Biosphere","American", • "American"); • client.callProcedure("HELLOWORLD.delete“,"American");

  21. Technical Action Shortcut for Defining Simple Stored Procedures: <procedure class="procedures.simple.CountReservations"> <sql>SELECT COUNT(*) FROM RESERVATION</sql> </procedure> <procedure class="procedures.simple.CountChildren"> <sql>SELECT COUNT(*) FROM CUSTOMER WHERE AGE &lt; 21</sql> </procedure> <procedure class="procedures.simple.MyReservationsByTrip"> <sql>SELECT R.RESERVEID, F.FLIGHTID, F.DEPARTTIME FROM RESERVATION AS R, FLIGHT AS F WHERE R.CUSTOMERID = ? AND R.FLIGHTID = F.FLIGHTID AND F.ORIGIN=? AND F.DESTINATION=? </sql></procedure>

  22. Technical Action • VoltDBTools: • 工程模版生成脚本- Generate Script • $ cd /opt/voltdb/tools • $ python generate test test $HOME/workspace/test • VoltDB Studio • a browser-based tool • test, debug and optimize • a catalog viewer, an ad hoc SQL query pane, and a cluster monitor

  23. Appendix VoltDB的资源: • Visit http://voltdb.com to… • Download VoltDB • Get sample app code • Join the VoltDB community • VoltDB user groups: www.meetup.com/voltdb • Follow VoltDB on Twitter @voltdb • 源码https://github.com/VoltDB/

More Related