zoukankan      html  css  js  c++  java
  • VoltDB开篇 简介(转)

    原文地址 :http://www.cnblogs.com/yuemenglong/archive/2011/05/26/2058266.html

    这是我在博客园开始的第一篇博客,也是抱着试一试的态度,试着写一些心得。  

      由于公司要做一个分布式数据库,有一定的noSQL特点,但也需要一定的关系能力,总之是一个难度比较大的项目,通过对各种产品的调研,决定在思路上借鉴voltDB的思想,我调试voltDB也有快一个月了,准备写一些系列的文章,下面照例是摘抄一些简介。

      VoltDB是StoneBraker最新研究成果,是一个优化吞吐率的高性能集群开源SQL RDBMS,支持ACID。从硬件上看,VoltDB基于PC+以太网+本地存储;从体系结构上看,其内部是一个ShareNothing的内存数据库,通过并行单线程来保证事务一致性和高性能,所有事务被实现为Java存储过程,所有存储过程(事务)均全局有序,由于避免了锁的使用,因此可以保证每个事务在所有分区上并行执行完成后才继续执行下一个事务,事务不会乱序执行。存储过程内部支持分组、多路Join、聚合、函数等等,如果希望提高吞吐率,使用单事务多SQL可以有效提高吞吐率。VoltDB的可靠性通过冗余和自动恢复来保证。

      VoltDB值得关注的一个特性是自动数据分区,数据表会被自动分配到集群节点。可以看成是传统Sharding的升级、整合版本。另外一个特性是自动快照,这样在一个事务内部无需进行IO操作,可以在微秒级别完成事务,据说性能提高50倍。第三个特性是异步事务提交。从某种意义上看,VoltDB是一个共享内存的集群,有些像此前有人提到的“Ram Cloud“。VoltDB的系统性能据说在几个节点就可以达到百万TPS    VoltDB支持多节点并行事务处理,理论上不存在节点上限,不过VoltDB开发人员最大测试集群是20个节点。

      目前VoltDB还存在不少限制,主要包括:(1)不支持动态修改Schema(2)增加节点需要停服(3)不支持xDBC(4)Adhoc查询性能不优化。

      适用于如下应用:

      Orders of magnitude better performance than conventional DBMS

      Linear scalability

      SQL as the DBMS interface

      ACID transactions to ensure data consistency and integrity

      High availability 24x7x365


    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提供与键值数据库相当或者更好的事务吞吐能力

  • 相关阅读:
    iOS语音合成
    5个可以帮你优化App的优秀网站
    全面谈谈Aspects和JSPatch兼容问题
    做一个 App 前需要考虑的几件事
    Swift 3必看:新的访问控制fileprivate和open
    iOS异常捕获
    LXNetwork – 基于AF3.0封装的iOS网络请求库
    POST方式提交表单时,后台接受实体如果继承了父类,将无法映射表单对应数据
    Angularjs promise对象解析
    H5基于iScroll实现下拉刷新,上拉加载更多
  • 原文地址:https://www.cnblogs.com/sky20081816/p/2439005.html
Copyright © 2011-2022 走看看