简单介绍一下HBase、Cassandra、Voldemort、Redis、VoltDB、MySQL

阅读更多

hbase

1.简介:

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群

2.HBase和RDBMS的关系


RDBMS(Relation DabaBase Management System-关系数据库):由关系模型构成的数据库就是关系数据库。关系数  据库由包含数据记录的多个数据表组成,用户可在有相关数据的多个表之间建立相互联系。在关系数据库中,数据被分散到不同的数据表中,以便使每一个表中的数 据只记录一次,从而避免数据的重复输入,减少冗余。


   1)关系数据库的主要特点:

       a.关系系中的每个属性必须是不可分割的数据单元(即表中不能再包含表)。

       b.关系中的每一列元素必须是类型相同的数据。

       c.同一个关系中不能有相同的字段(属性),也不能有相同的记录。

       d.关系的行、列次序可以任意交换,不影响其信息内容。

    2)Hbase里面有以下2个主要概念:

         Rowkey: Hbase 中的记录是按照rowkey来排序的;因此想用hbase存储数据设计好row-key很重要

         Column family:(列族)是在系统启动之前预先定义好的;可有多个列簇,可动态增加,一个列簇可包含多个列

         Hbase优缺点:      

          1.不支持条件查询以及orderby等查询;

          2.列可以动态增加,列为空则不存储数据,节省存储空间;

          3.会自动切分数据;

          4.可以提供高并发读写操作的支持;

3.表解析

    row-key:hbase是基于列的存储模式,所谓的基于列(HBase)就是基于row-key的存储模式,row-key 相当于关系数据库表的主键
    查询的时候根据row-key去查询

    列簇:hbase表中的每一列都归属为一个列簇,列簇是表的schema的一部分(列不是),必须在使用表之前定义,列名都是以列簇为前缀

          如:Column family:test1(test1为列)

              Column family:test2

          如上:test1,test2 都是列簇 Column family 的列

          *访问控制、磁盘和内存的使用统计都是在列族层面进行的。     

    时间戳:HBase中通过row和columns确定的为一个存贮单元称为cell。

            每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。

            时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,
            此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。

            如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

            每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

            当你插入一个数值的时候,如果不手工写时间戳,系统会自动生成一个。当你在hbase shell下scan某个具体表的时候,可以看到一大堆的时间戳    
          

4.优缺点

   a.列的可以动态增加,并且列为空就不存储数据,节省存储空间.

   b.Hbase自动切分数据,使得数据存储自动具有水平scalability.

   c.Hbase可以提供高并发读写操作的支持

   d.不能支持条件查询,只支持按照Row key来查询

   e.暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

cassandra

Apache Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。Cassandra使用了Google BigTable的数据模型,与面向行的传统的关系型数据库不同,这是一种面向列的数据库,列被组织成为列族(Column Family),在数据库中增加一列非常方便。对于搜索和一般的结构化数据存储,这个结构足够丰富和有效。
Cassandra的系统架构与Dynamo一脉相承,是基于O(1)DHT的完全P2P架构,与传统的基于分片的数据库集群相比,Cassandra可以几乎无缝地加入或删除节点,非常适于对于节点规模变化比较快的应用场景。
和其他数据库比较,Cassandra有三个突出特点:
模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。
真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
一些使Cassandra提高竞争力的其他功能:
范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
列表数据结构 :在混合模式可以将超级列添加到5维[来源请求]。对于每个用户的索引,这是非常方便的。
分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
与类似系统的比较

Hadoop HBase
Hadoop HBase是Apache Hadoop项目的一个子项目,是Google BigTable的一个克隆,与Cassandra一样,它们都使用了BigTable的列族式的数据模型,两者的主要不同在于:
Cassandra只有一种节点,而HBase有多种不同角色,又架构在Hadoop底层平台之上,部署上Cassandra更简单;
Cassandra的数据一致性策略是可配置的;
HBase提供了Cassandra没有的行锁机制,Cassandra要想使用锁需要配合其他系统,如Hadoop Zookeeper;
HBase提供更好的MapReduce并行计算支持,Cassandra在0.6版本也提供了这个功能;
Cassandra的读写性能和可扩展性更好,但不擅长区间扫描。

Voldemort

Voldemort is a distributed key-value storage system。
Voldemort is not a relational database, it does not attempt to satisfy arbitrary relations while satisfying ACID properties. Nor is it an object database that attempts to transparently map object reference graphs. Nor does it introduce a new abstraction such as document-orientation. It is basically just a big, distributed, persistent, fault-tolerant hash table. For applications that can use an O/R mapper like active-record or hibernate this will provide horizontal scalability and much higher availability but at great loss of convenience. For large applications under internet-type scalability pressure, a system may likely consists of a number of functionally partitioned services or apis, which may manage storage resources across multiple data centers using storage systems which may themselves be horizontally partitioned. For applications in this space, arbitrary in-database joins are already impossible since all the data is not available in any single database. A typical pattern is to introduce a caching layer which will require hashtable semantics anyway. For these applications Voldemort offers a number of advantages:

Voldemort combines in memory caching with the storage system so that a separate caching tier is not required (instead the storage system itself is just fast)
Unlike MySQL replication, both reads and writes scale horizontally
Data portioning is transparent, and allows for cluster expansion without rebalancing all data
Data replication and placement is decided by a simple API to be able to accommodate a wide range of application specific strategies
The storage layer is completely mockable so development and unit testing can be done against a throw-away in-memory storage system without needing a real cluster (or even a real storage system) for simple testing


redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操 作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的 是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步Redis一 个分布式缓存

voltdb


VoltDB数据库是一个分布式,可扩展,shared-nothing的内存数据库。是关系型数据库,它使用JAVA 写的存储过程来定义事务。使用标准SQL访问数据,使用并行的单线程处理方式确保数据一致性,同时避免了传统数据库的锁,插销,资源管理开销。它的数据主 要存储在内存中,Shared Nothing的集群结构,单机是单线程处理事务,不是用锁而是基于Optimistic的方法处理事务并发,所有的事务必须以存储过程形式先提交到 VoltDB系统。

MySQL

MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序。关于 Cluster 中这些组件的关系,请参见下图:
所有的这些节点构成一个完成的MySQL集群体系。数据保存在“NDB存储服务器”的存储引擎中,表(结构)则保存在“MySQL服务器”中。应用程序通过“MySQL服务器”访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理“NDB存储服务器”。
通过将MySQL Cluster 引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性能和可缩放性的 Cluster 数据管理。

你可能感兴趣的:(HBase,Cassandra,Voldemort,Redis,VoltDB)