转自:https://blog.csdn.net/ransom0512/article/details/50440316
http://www.360doc.com/content/16/0712/11/9200790_574921580.shtml
https://www.cnblogs.com/kkyycom/p/9359090.html
VoltDB数据库是一个分布式,可扩展,shared-nothing的内存数据库。使用JAVA 写的存储过程来定义事务。使用标准SQL访问数据,使用并行的单线程处理方式确保数据一致性,同时避免了传统数据库的锁,插销,资源管理开销。
VoltDB具有如下特点:
- 高吞吐量:百万次每秒
- 横向拓展:可以根据需求自由拓展,性能线性增长。
- 高可用性:数据支持副本、也可以持久化保存、除此之外,还支持双活机制。
- 实时数据分析:数据实时性高,因为都是内存计算。
- 完整ACID支持,保证事务性和可靠性。
VoltDB的设计动机来源于内存成本的大幅下降,系统对于数据的时效性要求越来越高,而传统数据库由于数据在本地文件保存,所以不论并发还是处理速度,都难以满足要求。而新型的NoSQL数据库,又缺乏SQL支持以及完整的ACID的支持,完全无法提单传统数据库。
VoltDB、NoSQL和传统关系型数据库的对比如下所示:
VoltDB适合OLTP系统,单个事务较小,但是事务总量非常之多的应用。比如金融,零售,WEB2.0等传统OLTP应用。不适合进行范围查询或者频繁多表Join这样的场景。
VoltDB通过对传统数据库进行分析,发现数据只有12%的CPU时间在做真正有意义的数据操作,而其他绝大部分时间都被缓存,并发控制等步骤消耗了。
- 索引管理(Index Management):数据库的索引一般是基于B树的,这些索引会显著消耗IO和CPU。
- 日志(Logging):传统数据库一般会写两次日志,一个是数据库数据存储部分,一个是数据库恢复日志,而且这些操作都必须强制性刷到磁盘上去,这就带来显著的IO消耗。
- 锁(Locking):数据的读写操作都会涉及到锁,这是一个十分频繁的操作。
- 锁管理器(Latching):全局共享的数据比如索引数据,表元数据,资源信息等,都必须保障多线程环境下的可靠运行,所以这种锁管理器无疑会消耗更多的CPU资源。
- 缓存管理(Buffer Management):数据存储在固定大小的磁盘页中,缓冲池则管理着这些磁盘页,这些都会来言密集的IO操作。
综上,有88%的CPU时间都浪费在这些对于实际操作无意义的步骤上去了,要提升数据库性能,只有从根本上减少这种冗余的步骤,集中进行数据运算,才能完全利用CPU。
VoltDB通过内存存储、数据分区和无锁计算来实现高性能运算。
VoltDB多分区设计,使得数据分散在各个分区中,每个分区可以提供并发访问,既提升了性能,也达到了无锁的效果。所以理论上,VoltDB的横向拓展可以使得性能得到线性提升。
VoltDB使用K-safety、双活、snapshot、WAL机制组合机制保证数据的高可用性。
VoltDB 宣称具备非常高的可伸缩性,超过 120 个分区、39台服务器,可在 300 个 CPU 核心上每秒钟处理 160 万的复杂事务
VoltDB在资料中有一个和数据库进行的性能对比,结果如下:
Dell R610, 2x 2.66Ghz Quad-Core Xeon 5550 with 12x 4GB (48GB) DDR3-1333 Registered ECC DIMMs, 3x 72GB 15K RPM 2.5in Enterprise SAS 6GBPS Drives
- 原子性(Atomicity)
VoltDB通过使用存储过程来确保原子性,一个存储过程执行必须等待前一个存储过程成功或因为失败而回滚结束。- 一致性(Consistency)
VoltDB强数据类型约定,在所有的数据库查询中强制schema与数据类型约束.- 隔离性(Isolation)
VoltDB事务全局(所有被影响的分区)顺序执行(没有交叉)(任何一个分区同一时间只有一个执行,即串行的)。- 持久性(Durability)
VoltDB提供K-safely机制以及snapshot,确保数据持久化。
License为AGPL,该许可比GPL要求更加严格,产品即使以WEB的方式发布了,也必须公开源代码。在使用的时候需要小心。
原文:https://www.cnblogs.com/goodfuture/p/11584225.html