在数据存储层,还有很多类似的系统和某些系统的变种,这里,仅仅列出较为出名的几个。
一、数据存储层
宽泛地讲,据对一致性(consistency)要求的强弱不同,分布式数据存储策略,可分为ACID和BASE两大阵营。
ACID是指数据库事务具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。ACID中的一致性要求比较强,事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
BASE对一致性要求较弱,它的三个特征分别是:基本可用(Basically Available), 软状态/柔性事务(Soft-state,即状态可以有一段时间的不同步), 最终一致性(Eventual consistency)。BASE还进一步细分基于键值的,基于文档的和基于列和图形的 – 细分的依据取决于底层架构和所支持的数据结构(注:BASE完全不同于ACID模型,它以牺牲强一致性,获得基本可用性和柔性可靠性,并要求达到最终一致性)。在数据存储层,还有很多类似的系统和某些系统的变种,这里,我仅仅列出较为出名的几个。如漏掉某些重要系统,还请谅解。
1、BASE
(1)键值存储(Key Value Stores)
Dynamo:这是由亚马逊工程师们设计的基于键值的高可用的分布式存储系统(注:Dynamo放弃了数据建模的能力,所有的数据对象采用最简单的Key-value模型存储,可简单地将Dynamo理解为一个巨大的Map。Dynamo是牺牲了部分一致性,来换取整个系统的高可用性)。
Cassandra:这是由Facebook工程师设计的一个离散的分布式结构化存储系统,受亚马逊的Dynamo启发,Cassandra采用的是面向多维的键值或面向列的数据存储格式(注:Cassandra可用来管理分布在大量廉价服务器上的巨量结构化数据,并同时提供没有单点故障的高可用服务)。
Voldemort:这又是一个受亚马逊的Dynamo启发的分布式存储作品,由全球最大的职业社交网站LinkedIn的工程师们开发而成。
(2)面向列的存储(Column Oriented Stores)
BigTable:Bigtable是一个基于Google文件系统的分布式数据存储系统,是为谷歌打拼天下的“三驾马车”之一,另外两驾马车分别是分布式锁服务系统Chubby和下文将提到的MapReduce。
HBase:Hbase是一个分布式的、面向列的开源数据库。其设计理念源自谷歌的 BigTable,用Java语言编写而成。
Hypertable:Hypertable也是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable类似的模型。
(3)面向文档的存储(Document Oriented Stores)
CouchDB:这是一款面向文档的、开源数据存储管理系统。
MongoDB:是目前非常流行的一种非关系型(NoSQL)数据库。
(4)面向图(Graph)的存储
Neo4j:Neo4j是一款目前最为流行的高性能NoSQL 图数据库,它使用图来描述数据模型,把数据保存为图中的节点以及节点之间的关系。这是最流行的图