1.5.4 常见分布式存储系统
本节将着重介绍几个在实际生产环境中经常用到的分布式存储系统,而像Cassandra这样常见的键值存储系统,我们也会在后续的编程实战章节中使用到。
1.Hbase
HBase是一款面向列的开源分布式数据库。其实就是Google的BigTable的开源实现,是Hadoop的一个子项目,是专门用于存储非结构化数据的数据库。面向列数据库的逻辑模型前文已经介绍过,这里不再阐述。
HBase也是一个主从式的存储系统。其系统架构由以下几部分组成。
1)Zookeeper:一个独立的集群协调项目,用在许多项目之中,可以简化集群协调管理。
2)HMaster:整个集群的控制者,负责管理用户的增删改查,管理HRegionServer的负载均衡。同时若HRegionServer失效,负责进行失效方的资源迁移。此外,由于HBase使用了Zookeeepr的首领枚举功能,且启动后会启动多个HMaster,因此可以避免单点故障问题。
3)HRegionServer:相当于集群中的数据节点,负责相应用户I/O请求,并向HDFS中写入数据。
此外,正如BigTable将实际数据存储在GFS上一样,HBase将其数据存放在HDFS上,这样就可以简化数据的分布式存放问题。
2.Cassandra
Cassandra不同于其他的存储系统,它是一个全分布式的数据库系统。它是一款混合型的非关系型数据库。其基础是Amazon的Dynamo,在此基础上融合了Google BigTable的列族数据模型。同时又采用P2P的模型实现集群去中心化。Cassandra是一个在生产环境中广泛使用的分布式存储系统。在本书的后续实战中,将会使用Cassandra作为存储系统。
相比于HBase, Cassandra有以下几个特点。
1)模式灵活:HBase中所有数据都是二进制存储,而Cassandra则模仿一些面向文档的存储系统,支持一些基本类型,同时又采取列族的方式,便于扩展模式。
2)无单点故障:由于Cassandra去中心化,并不会像有些主从系统那样主节点宕机导致整个集群不可使用。
3)可扩展性好:由于Cassandra是全分布式系统,因此可以进行简单的水平扩展,方便扩大集群规模。
3.MongoDB
MongoDB是一种面向文档的非关系型数据库,也就是说,在MongoDB中每条记录就是一个文档,文档之间独立存储,而且可以很好地和面向对象的设计相结合,无须像关系型数据库那样手动封装SQL。此外,这种松散的存储形式便于系统实现分布式存储查询。
MongoDB使用BSON作为数据存储格式,这是一种类JSON的二进制存储协议。MongoDB利用这种协议实现了高效的数据读写性能。
MongoDB由于是面向文档的数据库,因此相对来说模式自由,同时又支持大量的基本数据类型,相对于其他的NoSQL数据库而言又有强大的查询功能,因此在当今需求变化迅速、对并发要求较高的互联网市场,是非常合适的产品。现在也成为最热门的NoSQL数据库之一。