voltdb介绍

介绍

voltdb是由2014年图灵奖获得者 Michael Stonebraker创建的一种基于内存的新数据库产品。

基础信息

传统的数据库如mysql提供的是一种满足所有的场景的架构,限制了其优化的空间。
voltdb充分利用了现代计算环境:

  • 采用内存存储来提升吞吐,减少昂贵的磁盘读写。
  • 通过串行访问数据,避免了在传统数据库中的加锁、锁碰撞、记录事务日志的时间浪费。
  • 通过集群化和多服务器间复制保证了扩展性、可靠性、高可用。

voltdb支持ACID,并且兼容标准SQL,减少了学习成本。
voltdb并不是用来解决所有数据库问题,主要偏向于解决快速数据,例如金融应用、社交媒体应用等。如果需要对大数据进行查询,这个不是voltdb擅长的,建议使用其他数据仓库的解决方案。

安装要求

| 操作系统 | 64位 linux类系统 |
| CPU | 2核 64位 1.6GHz |
| 内存 | 4G |
| JDK | server:JDK8 client:JDK7 or 8 |
| 必需软件 | NTP python2.6+ |

工作原理

voltdb号称最快的内存操作数据库,能够支持每秒百万级事务执行。
官方声明
为了做到这些,voltdb主要采用了以下方式:

  1. 分区 对于存储的数据和存储过程都进行分区。
  2. 串行化处理 基于分区后,就可以将要执行的存储过程排队,串行执行。对于不同的分区意味着可以并行进行多个存储过程执行。由于对于一个分区来说是串行化执行的,也就规避了锁、锁碰撞、事务日志记录的消耗。对于全局来说,cpu核数越多,能同时执行的存储过程越多,性能越好。
  3. 分区和复制表 voltdb提供了复制表用于读多写少记录少的场景,方便对不同节点,同一份数据的就近获取。 同时提供了分区表用来提升执行效率。
  4. 符合应用需要的快速扩容 在扩容的时候可以通过–count参数重新设置来扩容,也可以在数据库运行的时候增加新的节点。

优势

基本上也就是voltdb设计的初衷。

  1. 纯内存数据库。
  2. 对表进行了分区,使存储过程执行串行化,以支持多存储过程并发执行,提高吞吐量。
  3. 较好的SQL兼容性,学习成本低。

劣势

在学习voltdb官方文档的过程中发现了以下问题:

  1. 服务器端编程 需要准备jar包或者sqlcmd中创建存储过程,大部分事务的执行都依靠存储过程。在代码动态部署、代码调试方面会引入诸多不便。
  2. DDL修改 对于部分DDL的修改如 null 变为 not null,改变分区列等操作,需要先清空表再进行,并且有相关存储过程依赖时需要依次删除重建。
  3. Bigdecimal表达精度 对于小数位只支持12位,需要更高支持的话需要业务实现,例如需要18位小数精度,则需要乘以10^6再存入,取出时除以10^6。
  4. windows支持 较少的一个只支持linux 64位系统,不支持windows的,对于使用windows系统的开发人员进行本机全环境搭建都不行。

总结

总体上看voltdb是一个通过内存化、分区、串行化处理来提升数据库吞吐的数据库解决方案,有自己的擅长之处,但也相较于mysql引入了一些新的不足。

本文标题:voltdb介绍

文章作者:roytrack

发布时间:2018年12月02日 - 23:12

原始链接:http://www.roytrack.com/2018/12/id2/

许可协议: 转载请保留原文链接及作者。