VoltDB FAQ

1.概要信息

1.1VoltDB为何物?

VoltDB是为满足极端多的事务处理以及以下需求而设计的关系数据库系统:

  可以提供比传统数据库系统好很多的性能。

  可以线性扩展。

  兼容SQL作为数据库管理接口。

  兼容ACID,满足数据一致与完整性。

  7*24*365高可用。

1.2VoltDB架构

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

1.3VoltDB如何获得ACID兼容

  为确保数据可靠性,必须满足原子性,一致性,隔绝性,持久性四个特征。

  原子性:

    VoltDB通过使用存储过程来确保原子性,一个存储过程执行必须等待前一个存储过程成功或回滚结束。

  一致性:

    VoltDB在所有的数据库查询中强制schema与数据类型约束.

  隔绝性:

    VoltDB事务全局(所有被影响的分区)顺序执行(没有交叉)(任何一个分区同一时间只有一个执行,即串行的)。

  持久性:

    VoltDB提供分区复制以及周期性的数据库snapshot,确保数据持久化。

1.4可扩展性是如何得来的?

  VoltDB自动在集群中的可用节点分发行记录。通过增加集群节点,可以提高数据库集群的性能和容量,当数据重新载入时,VoltDB自动重分布数据。

1.5VoltDB如何处理数据库分区

  VoltDB通过分区计划将行分发到各个数据库分区。用户通过指定被分区的表的列,作为内部HASH函数的输入参数。注意,不是所有的表都需要被分区,读比较多的表考虑复制较合适

1.6VoltDB分区与传统数据库分片的不同

  传统的数据库分片,数据表被存放在完全不相干的数据库当中。更加可怕的是,数据一致性必须通过应用逻辑来保证。但是使用VoltDB的话,ACID兼容性是基于整个数据库集群的,不需要应用来考虑。

  另一个传统数据库分片的弱点是数据备份,恢复以及管理,都必须基于单个节点。而使用VoltDB就没有这么麻烦了,这些操作都被集中化了。

1.7适合VoltDB的应用场景

  VoltDB适合OLTP系统,单个事务较小,但是事务总量非常之多的应用。比如金融,零售,WEB2.0等传统OLTP应用。

2.比较信息

2.1VoltDB与MySQL数据库分片的区别

VoltDB设计的初衷是提供高并发能力,对应用来说透明的分区解决方案。MySQL的数据库分片方案,需要应用编写代码来管理和访问数据库分片,或者理解为MySQL的数据库分片对应用来说不是透明的。

VoltDB的水平分区不牺牲ACID特性,可管理性。同时不会增加程序设计的复杂度。

对于OLTP系统,在同等硬件的情况下,VoltDB提供比MySQL分片更好的性能。

2.2VoltDB与MySQL with Memcached的区别

Memcached,分布式内存缓存.一般放在应用和数据库之间,提供频繁访问的数据库对象的缓存,但是需要应用来管理这个缓存。memcached本身并没有可靠性和一致性保障,需要应用来管理缓存和数据库的HASH算法。更重要的是CACHE的使用一般只对读性能有提高,而写的话可能反而更差劲。

VoltDB提供比memcached同等或更高的读性能,同时不失ACID特性,更加重要的是,VOLTDB提供与读同等性能的写性能。

2.3VoltDB与Key-Value数据库的区别

Key-Value数据库用于存储任意数据,基于各自KEYS。因为只有一个KEY,所以Key-Value数据库做分布式架构非常的简单。但是Key-Value不提供结构化数据存储,不提供系统数据可靠性。

使用VoltDB可以存储结构型或非结构型数据,同时提供数据存储的可靠性,一致性,持久化,标准SQL接口。VOLTDB甚至可以在一个事务中通过多个KEY对数据进行读写.VoltDB提供与键值数据库相当或者更好的事务吞吐能力

3.技术信息

3.1VoltDB支持的平台

目标平台CENTOSv5.4,兼容64-bit POSIX-compliant 平台。支持Ubuntu9.04 OSX10.5,10.6。使用源代码及编译脚本支持更多操作系统。

3.2VoltDB支持的SQL

VoltDB v1版支持ANSI-标准SQL子集,支持CREATE INDEX, CREATE TABLE,  CREATE VIEW ,SELECT, INSERT, UPDATE,  DELETE 。

其他SQL将陆续在后续的版本添加。参考VOLTDB手册。

3.3VoltDB是否支持blob

当前版本不支持blob,但是可以使用varchar存储BASE64来代替,限制最大1M大小。

3.4VoltDB为什么不支持ODBC/JDBC?

VoltDB的主要交互通过JAVA存储过程实现,使用ODBC,JDBC连接意义不大。应为所有的添加修改操作必须新建或修改JAVA存储过程。

3.5如何增加VoltDB集群的容量?

VoltDB的大小由初始话过程决定,编译应用CATALOG,启动数据库。要增加集群容量,需要做如下操作:

1。使用SnapshotSave存储过程将当前数据库内容镜像到磁盘。

2.重新编译应用CATALOG,指定VOLTDB集群新的SIZE。

3.重启VOLTDB数据库集群,使用新的CATALOG。

4.使用SnapshotRestore系统过程还原第一步备份的镜像至新的VOLTDB集群。

3.6VoltDB数据库集群最大支持多少节点?

VoltDB单个节点的性能约为传统DBMS的30-50倍,同时VOLTDB官方已经在3-12个节点的集群上都做过测试,在小于12个节点的集群中,性能指标可以达到10万TPS。并且已经成功部署20个节点的集群,尽管在VOLTDB的架构上没有限制节点数量,但是如果客户需要部署超过20个节点的集群,可以联系VOLTDB以便做得更好。

3.7VoltDB有哪些数据库管理工具?

在当前的版本中,VoltDB提供了一些命令行工具初始化,创建数据库,其他的如改变日志特征,创建镜像,修改CATALOG,关闭集群可以通过调用系统过程来实现。后续的版本将陆续添加更多的自动化脚本或命令。

3.8数据库监控工具

当前的版本提供的工具不多,可以通过调用Statistics, SystemInformation system procedures来监控数据库。后续的版本会添加更多的友好的工具。

 

4.最佳实践

4.1自增长的索引列的实现?

目前的版本没有AUTO_INCREMENT功能,如果要实现自增长的列值需求,可以新建一个表,这个表的每一行存储表名,列名,当前值。如

CREATE TABLE AUTOINCREMENT (    
TABLE_NAME VARCHAR[50] NOT NULL,    
CURRENT_VALUE BIGINT NOT NULL DEFAULT 1 
);

然后创建一个存储过程来维护这个表和返回当前值。

4.2使用VoltDB存储Key-Value

使用VoltDB不仅仅可以存储Key-Value,VOLTDB提供了很好的平台来满足类似目的,如通过创建一个两字段的表int|char[],varchar,然后根据int|char[]作为键值分区。这样的话就可以建立一个非结构化的存储结构了。使用VOLTDB存储KV的好处是,提供了同等或超越KV数据库的性能,并且保留了ACID特性。

使用VOLTDB存储KV的限制,单行长度最大1M(VARCHAR),以后可能增加。

4.3如何调整应用,使之在VOLTDB环境获得最大吞吐量

首先遵守如下三条规则:

1.通过设计,尽量减少跨节点的事务。

2.使用异步存储过程调用。如果每一次客户端调用存储过程都需要等待响应的话,VOLTDB的队列不能被充分利用,不能获得最好的性能体现。使用异步调用,同时可以避免客户端性能瓶颈。

3.客户端与VOLTDB的所有节点建立连接,在跨分区事务中性能较好。

其他:调用ExecuteSQL之前队列多个SQL(类似多步提交),

确保最后一个ExecuteSQL调用包含TRUE标签作为一个参数,告知过程可以关闭数据库事务作为最后调用的一部分,而不是某一个步骤.

时间: 2024-09-27 09:44:43

VoltDB FAQ的相关文章

UML Use Case Diagrams: Tips and FAQ

UML Use Case Diagrams: Tips and FAQ 来源:http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html Contents: What is a UML Use Case Diagram (UCD), and when should I use it? How do you know who the actors are in a UCD? How do you know what to put in the "S

DotNET WinForm FAQ 16个(上)

Dotnet WinForm 建立 FAQ 小气的神 2001.08.31 如何建立你的第一个窗体,希望下面的说明可以成为你快速开始的一个指引. 1. 如何设置一个From的边界 2. 如何建立一个透明的From 3. 如何设置窗体在屏幕中的位置 4. 如何使最小化和最大化按钮不可用 5. 如何使一个窗体不见 6. 如何设置使窗体成为非矩形的. 7. 如何使一个窗体在屏幕的最顶端. 8. 如何显示一个Model和非Model的窗体 9. 如何制作一个MDI的窗体 10. 如何将你的窗体不显示在任

交互设计实例:如何设计高效的faq页面

文章描述:设计高效的faq页面. 这阵子没有精力完整翻译和发到译言(  现下正渐入状态,预计写博客量会逐步提升回来),简短做一个概要翻译,为近期工作需要做一个参考. 其中提到,维护良好的faq能令用户有参与感,很有体会,当寻找一个问题,赫然发现在置顶常见第一条的时候,有一种强烈的"找到组织"的感觉. 不过,faq还有一种挑战这里没提到,在充分收集到最常提出问题的基础上,对于一些功能.服务的缺陷如何提示,是坦然还是回避,这好像已经是另一个范畴的讨论了.ok下面是简短概要翻译,完整版和例子

JSP - FAQ (4)

js 27) How are servlets and JSP pages related? TOC JSP pages are focused around HTML (or XML) with Java codes and JSP tags inside them. When a web server that has JSP support is asked for a JSP page, it checks to see if it has already compiled the pa

JSP - FAQ (1)

js Java Server Pages Frequently Asked Questions Maintainer: Richard Vowles, rvowles@esperanto.org.nz (http://www.esperanto.org.nz) QuestionsWhat is JSP? What version is the current version of JSP? Where can I get the specification for JSP? Who suppor

ORA FAQ 性能调整系列之——压缩索引会提高性能么?

索引|性能|压缩 Will compressing my indexes improve performance ?压缩索引会提高性能么? Author's name: Jonathan Lewis Author's Email: Jonathan@jlcomp.demon.co.uk Date written: 26th Feb 2003 Oracle version(s): 8.1 - 9.2 Compressed indexes have been around for a couple

ORA FAQ 性能调整系列之——Oracle 9与Oracle 8中CPU

oracle|性能 What is the difference between cpu_costing in Oracle 9 and the old costing of Oracle 8 ?Oracle 9与Oracle 8中CPU_COSTING有什么变化? Author's name: Jonathan LewisAuthor's Email: Jonathan@jlcomp.demon.co.ukDate written: 15th Dec 2002 Oracle version(s

ORA FAQ 性能调整系列之——当索引第一列由序列产生,一个逆序索引有什么用?

索引|性能 ORA FAQ 性能调整系列之--The Oracle (tm) Users' Co-Operative FAQWhy would a reverse index be useful when the leading column of the index is generated from a sequence ?当索引第一列由序列产生,一个逆序索引有什么用?--------------------------------------------------------------

ADO.NET连接池FAQ

ado 摘要 连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接.一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程. 当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接:当应用程序使用完连接后,该连接被归还给连接池而不是直接释放. 如何实现连接池 确保你每一次的连接使用相同的连接字符串(和连接池相同):只有连接字符串相同时连接池才会工作.如果连接字符串不相同,应用程序