NewSQL数据库VoltDB特性简介

VoltDB是一个革命性的新型数据库产品,被称作NewSQL数据库。它基于H-Store,号称比当前数据库产品的吞吐量高45倍,同时又具有很高的扩展性。它的特性主要有以下几点:

?  高吞吐、低延迟:通过内存计算,存储过程和串行数据访问实现。

?  可扩展性:自动分区和复制,保证性能和可扩展性。

?  高可用性:同步的多主复制(在VoltDB中叫K-safety)。

?  持久化:数据库快照与命令日志(command log)的创新技术组合。

1 高吞吐、低延迟

VoltDB能够提供高吞吐、低延迟的SQL操作,总体来说,它是通过内存计算避免磁盘阻塞(disk stall),通过存储过程避免用户阻塞(user stall),通过集群结点内的数据访问串行化,避免传统数据库锁、缓冲管理的开销。此外,VoltDB并不是纯Java开发,其SQL执行引擎是C++写成的,所以并不受GC暂停的影响。

?  内存计算:使VoltDB在事务执行期间无需等待磁盘加载,避免磁盘I/O开销。充分利用了现代服务器上庞大的内存,将吞吐量最大化。

?  存储过程:避免应用与数据库之间的多次通信开销,每个事务被定义成一个存储过程,因此事务只需一次通信往返。然而,VoltDB并不是只支持存储过程,从1.1版本开始已经能够支持来自JDBC、SQL命令行、HTTP/JSON、原生C++/PHP/C#/Node.js等等客户端的SQL查询。唯一的限制就是:VoltDB总是自动提交模式,不支持手动控制事务

?  数据访问串行化:传统数据库在前面两种阻塞等待的情况下,会切换执行其他事务,因此会导致很大的锁(latching and locking)开销。而一个VoltDB数据库由许多内存计算引擎组成(叫做partition分区),每个分区都是数据和相关处理过程的集合。VoltDB在集群内自动分发数据创建分区,每个分区内都是单线程的,从而避免了传统数据库对并发控制的开销。

?  C++执行引擎:VoltDB使用原生C++代码进行表数据的内存分配和SQL的执行,之所以核心不使用Java就是避免将表数据这种长时间存活的数据放置到JVM堆上,同时对内存使用进行更细粒度的控制。此外,像静态的部署相关和schema相关的数据,尽管是在Java中管理,但也使用DirectByteBuffer分配到堆外内存。所以其实JVM堆只是用来分配事务相关的一些存活期很短的数据,这对于GC来说是合适的负载。

如果某个事务只涉及一个单一分区内的数据,则其处理流程如下图所示:

2 扩展性架构

从架构上看,VoltDB属于shared nothing架构,因此可以很容易地实现扩展,可以通过增加已存在结点的容量和性能实现垂直扩展,通过动态增加新结点实现水平扩展,而在这个过程中不需要修改任何数据库schema和应用程序代码。

同时,VoltDB不仅支持表分区,还支持表复制。对于大表,可以通过分区来提高性能。对于频繁读取的小表,可以通过复制来减少join。

这与分布式缓存GemFire中的mirrored region和partitioned region的概念很像。在GemFire这,mirrored region包含全量数据,而partitioned region只包含分区数据。但不同的是,VoltDB是根据表的特点选择复制或分区,而GemFire则通过mirrored region将其他分区数据抓取到一起形成全量的数据镜像。

如果一个事务涉及多个分区的数据访问,那么其处理流程如下图所示。一个结点会充当协调者(coordinator),负责分发任务给其他结点,并收集结果,完成任务。

3 高可用性

不像传统RDBMS产品依赖第三方的HA解决方案,VoltDB提供三种HA能力:K-safety,网络故障检测,存活结点重连(rejoin)。

3.1 K-safety

当配置成K-safety时,VoltDB会自动地复制数据库分区,K表示副本的个数。例如K=0时表示没有副本,所以任何一个结点的故障都会导致整个数据库集群的停止服务。当K=1时表示有1个副本,即一共2份拷贝。要注意的是:VoltDB中的副本是可以读写的,而不是传统的主从复制关系。

关于数据同步问题的解决,任何发生在复制分区上的操作都会发送给各个拷贝的结点去执行,来保证一致性。如果其中一个结点失败,那么数据库会继续发送这个操作给失败的结点。因此在这一点上VoltDB与传统数据库有很大不同,不存在多主(multi-master)情况下的数据同步冲突问题。所以K-safety也叫做同步多主复制。

3.2 网络故障检测

当网络发生故障时,VoltDB的结点彼此之间被物理隔离开,而认为对方已经发生故障。那么K-safety机制会使这两侧的结点继续分别提供服务。如果不及时检测到的话,这种“分离的大脑”(split brain)会导致严重的数据同步问题。因此,VoltDB会自动检测网络故障,立即评估出那一侧结点应该继续服务,并快照另一侧的结点数据后停掉服务。当网络故障解决时,可以直接使用下面将介绍到的存活结点重连技术将结点重新加入到集群中。

3.3 存活结点重连

离线的VoltDB结点可以通过rejoin操作重新加入到集群中。具体过程是:首先从兄弟结点获得一份数据拷贝,当追赶上兄弟结点时,此存活结点就可以回到正常状态,接受任务了。

4 持久化

尽管VoltDB的HA能够降低当机概率,但故障还是偶尔会发生,而且DBA有时也要定期地停机维护。因此,VoltDB提供了高性能的快照和命令日志(command log)来支持各种持久化需求。对于日志,VoltDB支持同步和异步,以及刷新到磁盘的时间间隔等配置。

那command log与传统的WAL(write-ahead log)有什么区别呢?(待深入研究)

总结

但这样也不代表VoltDB是万能的,其设计和特性决定了其应用场景,VoltDB比较适合高频率请求、短事务的应用,像金融、零售、Web2.0等,以及流式数据应用,像推荐引擎、实时广告平台、点击流处理、欺诈交易检测等。

参考资料

1 VoltDB Technical Overview

2 Using VoltDB

Debunking Myths about the VoltDB in-memory database

Impact of Java Garbage Collection on in-memory databases

Command logging vs. Write-ahead Logging

时间: 2024-11-10 13:21:04

NewSQL数据库VoltDB特性简介的相关文章

十六款值得关注的NoSQL与NewSQL数据库--转载

原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼的移动.社交以及大数据负载类型,同时也并不适合处理极端规模处理任务.不过大家不必担心,十六家专业企业已经为我们带来他们各自的次世代NoSQL与NewSQL选项. 为什么在处理全新数据类型以及极端业务规模实例时,企业正越来越多地选择备用方案来替代占据领导地位的关系型数据库管理系统(简称RDMS)? 带

分库分表 or NewSQL数据库?终于看懂应该怎么选!【转】

最近与同行科技交流,经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允.本文通过对两种模式关键特性实现原理对比,希望可以尽可能客观.中立的阐明各自真实的优缺点以及适用场景. 一.NewSQL数据库先进在哪儿? 首先关于“中间件+关系数据库分库分表”算不算NewSQL分布式数据库问题,国外有篇论文pavlo-newsql-sigmodrec,如果根据该文中

bash特性简介

  1.命令补全.路径补全 Tab:按两次Tab可以给出系统中所有的命令 命令补全:根据给出的字符串在PATH环境变量中定义的路径进行查找:多余一个需要按两次Tab可以给出列表,否则直接补全 路径补全:根据给出的真实路径下的文件名进行补全     2.命令别名 在日常管理和维护linux系统过程中,会使用到大量的命令,有一些很长的命令或用法会经常用到,重复输入会很繁琐,这时可以使用命令别名功能将这个过程简化,提高工作效率 在系统中默认已经定义了一些别名,可以直接使用alias不加任何选项就可以查

CSS3新特性简介

1.CSS3 边框:通过 CSS3,能够创建圆角边框,向矩形添加阴影,使用图片来绘制边框,如border-radius:box-shadow:border-image 2.CSS3 背景:CSS3 包含多个新的背景属性,它们提供了对背景更强大的控制.background-size:background-origin 3.CSS3 文本效果:CSS3 包含多个新的文本特性.text-shadow:word-wrap 4.CSS3 @font-face规则:可将设计师希望使用的字体文件存放到web服

MySQL数据库新特性之存储过程入门教程

在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 .同时,存储过程可以接收和输出参数.返回执行存储过程的状态值,也可以嵌套调用. 存储过程的优点 作为存储过程,有以

Atitit.数据库新特性战略规划 mssql sql server 2008 SQL2012 SQL2014

Atitit.数据库新特性 mssql sql server 2008 SQL2012 SQL2014 1. Sql2012 新特性 1 1.1. 增加了Sequence对象. 1 1.2. 新的分页查询语法.offset和fetch 1 1.3. OVER子句的增强和新增一些分析函数. 之前OVER子句是用于RANK,ROW_NUMBER等排名函数,现在OVER子句得到了大大的增强, 可以将OVER子句应用到聚合函数中,也增加了一些分析函数. 2 1.4. 增强的审计功能 2 1.5. 增强的

Perl数据库DBI接口简介【转载】

本文转载自:http://blog.csdn.net/like_zhz/article/details/5441946 ##########################################################################可移植的DBI方法:connect    建立到一个数据库服务器的连接disconnect   断开数据库服务器的连接prepare    准备执行一个SQL语句execute    执行准备好的语句do    准备并执行一个SQL

Mysql数据库四大特性、事物的四个隔离、基本MySQL语句、独立表空间

Mysql数据库四大特性.事物的四个隔离.基本MySQL语句.独立表空间 本人学习mysql的时候感觉笔记有点散所以自己做了一个整合,而且有些概念介绍的太官方了,所以自己根据理解总结了一下.(有不对的请指点!) mysql: sql:关系型数据库:(复杂的关系形数据库). nosql:非关系型数据库:(储存的格式很简单) key,value(memcached),user1:1,user2:2(存在内存里) 事务:一组原子性的SQL查询,或者是一个或多个sql语句组成的独立工作单元:操作要么都执

数据库的特性与隔离级别和spring事务的传播机制和隔离级别

首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离性: 对于同一个表的操作,每个事务都是单独的,不会影响其他事务. Durability 持久性: 事务一旦提交,数据库中的数据就是永久的了. 对于以上四种特性中的隔离性,不同的策略会有不同的弊端:脏读,不可重复读,幻读. 脏读: 就是一个事务读取了别的事务执行过程中未提交的数据. 不可重复读: 就是