`
lovnet
  • 浏览: 6865780 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

VoltDB内存数据库分析

 
阅读更多

引子

VoltDB是一个宣称性能超过Mysql 100倍的新型数据库。它源自Micheal Stonebraker一篇论文H-Store。在这篇论文发表后,Stonebraker成立了VoltDB公司带着他的一些学生开始在OLTP数据库领域打拼。Stonebraker从上世纪70年代——数据库刚开始发展的时间——就开始在数据库领域活跃,这样的老古董提出的数据库的新想法,给了整个存储领域很大的想象空间。

VoltDB源起于应用领域与硬件发展翻天覆地的变化。用户的使用方法发生了变化,在数据库开始发展的阶段,事务是一个较长的过程,用户或者管理员可以在”BEGIN TRANSACTION”和”END TRANSACTION”之间慢慢地人工执行整个事务的步骤。但是现在,大部分操作是由Web服务端发起的书写良好的事务,用户访问的是Web服务器,在Web服务器的执行逻辑里再访问数据库,所以即使是很复杂的事务也可以很快执行完。计算机硬件的发展更是一日千里。几十GB的内存服务器已经很常见。以太网络也已经步入Gbps时代,而且正在朝向10Gbps方向迈进。基于以太网的集群的机器价格也降低到比PC机贵不了太多。VoltDB的设计充分利用了这些特点,数据主要存储在内存中,Shared Nothing的集群结构,单机是单线程处理事务,不是用锁而是基于Optimistic的方法处理事务并发,所有的事务必须以存储过程形式先提交到VoltDB系统。下面分开来说。

事务提交

既需要支持复杂的事务操作,又需要快速的执行过程,VoltDB采取了一个比较极端的事务提交方式。虽然VoltDB支持部分SQL语句接口,但是不允许用户使用传统的”BEGIN TRANSACTION”和”END TRANSACTION”的语法模式,而是完全基于存储过程。用户通过写存储过程完成应用程序的逻辑,作为一个先置条件将存储过程提交到VoltDB。运行时,用户程序调用存储过程完成事务操作,所有事务的运行逻辑是由VoltDB在服务器进程中完成的。这种方式保证了事务不会被人为打断,并且服务器可以预先判断各个事务的逻辑,也为事务并发处理挖掘信息。

数据分布

VoltDB使用Shared Nothing结构,整个数据库的数据分散到集群的多台机器上。VoltDB的数据分布策略是基于哈希的,存储在VoltDB中的每一张表,对数据的主键哈希取模后的结果对应于数据存储的节点。相比较于BigTable基于主键的连续范围分段的方法,哈希方法的好处是数据分散的均匀,没有动态数据调整的烦恼。但也有很多缺点,采用这种方法后,集群的规模是事先确定好的,新增机器需要停止服务后重新分布数据。另外,数据哈希被分散后,数据的连续性被打乱了,在这个数据结构上做范围查询需要动用服务这张表的所有机器,这个后面会祥说。
VoltDB Distribution and Replication
上面这张图描述了数据的分布方式,VoltDB集群的每台机器都会服务多张表。从图里还能看到VoltDB的数据复制是基于机器单位的,蓝色框圈住的两台机器内的数据是完全同构的。

VoltDB的哈希分布数据的方法是系统设计的简化,这种简化让VoltDB工程实现难度降低,可以快速的商用。天下没有免费的午餐,这个设计也是VoltDB功能缺陷,导致VoltDB无法动态扩容以及其他一些问题。

数据一致性

同一份数据的多个副本之间需要保证数据一致性,VoltDB采用所有修改操作在每一个副本上单独更新的方式。如何保证更新操作在所有副本上以相同的顺序更改而不至于产生不一致,这就要提到VoltDB的并发控制方式。

VoltDB的事务并发控制需要依赖于集群内所有机器的时间是一致的,这个可以使用NTP之类的时间同步协议,保证机器之间的时间差异远远小于一个交换机下的两台机器之间的Round Trip时间。VoltDB对于用户每一次事务的调用分配一个时间戳,并且保证这个时间戳是全局有序的,虽然时间戳是由集群中的各台机器独自分配的,但是加上机器的序号,可以保证(机器序号,时间戳)的组合值是全局有序的。一台服务器执行事务之前,需要等待Round Trip时间后,如果其他机器没有开始比自己更早的事务,那么就执行自己的事务。以这种方式保证集群内多台机器之间事务的有序。数据的多个副本的更新操作也都以相同的顺序进行修改,所有副本之间保证了一致性。

事务并发处理

为了充分发挥多核机器的性能,而又不引入多线程执行事务的复杂性,VoltDB的数据分片规模是按照集群核数来划分的。一台物理机器上可能运行多个VoltDB服务器进程,每个进程对应于一个核,服务器进程之间都是通过网络进行通信。在单个进程内,只使用单线程,所有的事务执行都是顺序进行的。

多个事务在多个服务器节点同时执行,VoltDB保证如果事务之间有冲突,那么事务的执行是完全隔离的,即达到SERIALIZABLE ISOLATION。VoltDB会事先分析好存储过程之间的关系,如果两个事务可能存在冲突,则不让这两个进程在同一个时间执行。

在VoltDB的并发处理中,每一个事务在执行之前都要等待一个Round Trip时间,显然会增加事务执行的时延。这么做是为了确保别的节点没有发起比这个事务更早的事务,保证事务执行的顺序。在实现中,VoltDB用了另外一种优化方法。例如A,B两个节点,分别要执行事务1和2,A节点开始执行事务1的时间是T1,如果A收到B发了事务2的执行需求,并且T2 > T1,那么A节点可以确认从B节点不会有更早的事务再发送过来,A节点就不必等Round Trip时间,可以直接执行事务1。当整个系统压力比较大时,这个优化方法效果尤其明显,事务的时延有效降低。

VoltDB还花了很大精力在处理事务之间的逻辑关系,尽可能对事务分门别类进行处理,以期获得更好的性能。

范围查询的处理

VoltDB取巧的采用的哈希的方法做数据分布,在面对范围查询的需求时,再次吃到苦果。哈希方法打乱了数据的连续性,对于范围查询的处理能力显著下降。VoltDB执行某张表的范围查询,需要发送这个查询到这张表的所有数据分片上。在所有分片完成同样的范围查询,再将结果汇总,才能得到全局的准确结果。所以VoltDB处理范围查询会很低效

数据持久化

虽然Stonebraker在H-Store的论文里反复提到,在内存型数据库里,即使使用Group Commit写操作日志也是非常低效的,但是为了保证数据的持久性,VoltDB还是不得不采用记操作日志的办法。VoltDB使用定期做Snapshot加上记操作日志来保证数据持久性,这种方法没有什么特别的地方。

分享到:
评论

相关推荐

    常用内存数据库介绍

    这种设计使得内存数据库在实时分析、交易处理、物联网(IoT)应用以及任何需要高速数据访问的场景中表现卓越。下面,我们将深入探讨几种常用的内存数据库,包括它们的特点、应用场景以及为何它们能够在现代数据处理...

    常用内存数据库比较

    在JAVA开发中,有很多开源的内存数据库可以选择,本篇文章将对比分析这些数据库的特点、优缺点以及适用场景,帮助开发者做出最佳选择。 1. **HSQLDB** HSQLDB(HyperSQL Database)是一款轻量级、完全事务性的开源...

    VOLTDB中文文档.zip

    VOLTDB是一款高性能的内存数据库系统,专为处理大规模实时数据而设计。这款数据库系统以其卓越的速度、可扩展性和可靠性而备受关注,尤其在需要快速响应时间的领域,如金融交易、物联网(IoT)数据处理和实时分析等...

    Voltdb数据库配置文档[借鉴].pdf

    Voltdb数据库是一款高性能、分布式的关系型数据库,主要用于实时数据处理和分析。在进行Voltdb的部署和配置时,我们需要关注多个方面,确保数据库能够高效稳定地运行。以下是基于提供的文档内容,对Voltdb数据库配置...

    内存数据库对比

    在众多内存数据库产品中,Oracle TimesTen、Sybase ASE、SQLite和VoltDB是当前较为流行的几个选择。下面就针对这些内存数据库的特点、优势和不足进行详细分析,同时介绍选型标准。 首先,内存数据库与传统基于磁盘...

    voltdb-ent

    《VoltDB企业版7.1.1:高性能内存数据库的深度解析》 VoltDB,一个专为实时数据处理设计的高性能、内存中的关系型数据库管理系统(RDBMS),以其独特的架构和技术特性在大数据领域占据一席之地。"voltdb-ent-7.1.1...

    voltdb:B.Tech项目有关主内存数据库的实施

    本文将重点讨论“伏特分贝”(Voltdb),一个高性能、分布式的关系型主内存数据库,以及如何在B.Tech项目中进行其实施和研究。 **伏特分贝(VoltDB)** 伏特分贝是基于列式存储的开源数据库,由数据库专家Michael ...

    VoltDB资料

    VoltDB采用了分布式、可扩展的内存数据库架构,使用Java编写的存储过程来定义事务逻辑,利用标准SQL进行数据访问。通过并行的单线程处理方式确保数据的一致性,同时避免了传统数据库中常见的锁、死锁和资源管理开销...

    voltdb-tools:PHP VoltdDB 助手

    1. **VoltdB数据库**:VoltdB是一个内存中的分布式数据库,专为低延迟和高吞吐量而设计,支持ACID事务,特别适合实时分析和处理大数据。 2. **PHP集成**:PHP是一种广泛使用的开源脚本语言,特别适合Web开发。将PHP...

    voltdb-labs:VoltDB 实验室包括示例和配方代码示例

    VoltDB 是一个高性能、可扩展的、内存中的分布式数据库系统,设计用于处理大规模实时事务数据。它的主要特点是快速的数据处理速度和低延迟,这使得它在需要实时分析和决策的场景中表现出色,如金融交易、物联网(IoT)...

    动态数据库

    2. NewSQL数据库:如Google的Spanner、VoltDB等,旨在保持SQL的强大功能同时提供分布式和弹性。 3. 数据库管理系统(DMS)的动态特性:某些传统的关系型数据库管理系统,如Oracle和MySQL,也提供了部分动态数据库功能...

    UsingVoltDB

    VoltDB 是一个高性能的、分布式内存数据库系统。它通过利用多核处理器的并行处理能力,以及通过在内存中存储数据来提高读写速度,从而实现了远超传统关系型数据库的性能。相比MySQL等传统的关系型数据库,VoltDB 的...

    融合大数据技术的数据库课程改革.docx

    NewSQL数据库,如VoltDB和NuoDB,则是在保持ACID属性的同时,提高了大数据环境下的性能,适用于需要高性能事务处理的应用。 课程改革还应关注大数据处理平台,如Hadoop和Spark。Hadoop是分布式计算框架,能够处理和...

    天正集团智慧园区能源管理云平台方案_V02_0330.pptx

    1.VoltDB内存数据库:基于大数据平台研发,支持海量数据并发采集,支持实时数据流处理和历史数据批处理。 2. Netty socket通讯工具:支持上千个终端DTU,实现实时数据流处理和历史数据批处理。 3. 数据流处理STORM...

    Data Stack Overview

    - **Couchbase**:高性能的分布式内存数据库。 5. **列式数据库**: - **Hypertable**:分布式列式数据库,适用于大数据场景。 - **SAP HANA**:高速列式数据库,内置高级分析功能。 - **HP Vertica**:专为...

    高频大数据解决方案.pptx

    1. **VoltDB**: VoltDB是一个内存中的数据库系统,设计用于处理高频率的数据流,尤其适用于需要实时分析和决策的场景。它在电信、金融、广告、能源和电子商务等多个行业中有着广泛的应用。 2. **电信领域的应用**...

    4-6+Apache++Ignite在产险大数据中的实践.pdf

    Apache Ignite是一种分布式内存数据库和计算平台,它可以将数据和计算任务分布式处理,从而提高数据处理速度和效率。在产险大数据中,Apache Ignite可以作为一个中间件,提供高性能的数据处理和计算能力。 知识点1:...

    SQL、NoSQL、NewSQL 开发者如何应对

    此外,不断学习和了解新的数据库技术,如云数据库、内存数据库等,也是提升自身技能的重要途径。通过深入理解SQL、NoSQL和NewSQL,开发者可以更好地应对各种数据库挑战,为业务提供高效、可靠的数据库解决方案。

Global site tag (gtag.js) - Google Analytics