Cassandra和HBase对比

本文对比了HBase、Cassandra和MongoDB三种NoSQL数据库的主要特点、适用场景及限制。HBase适用于读取优化和范围扫描,Cassandra适用于高可用性和快速随机读写,MongoDB则适合文档管理和实时分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Cassandra和HBase对比:

 CassandraHBase
一致性Quorum NRW策略

通过Gossip协议同步Merkle Tree,维护集群节点间的数据一致性

单节点,无复制,强一致性
可用性1,基于Consistent Hash相邻节点复制数据,数据存在于多个节点,无单点故障。

2,某节点宕机,hash到该节点的新数据自动路由到下一节点做 hinted handoff,源节点恢复后,推送回源节点。

3,通过Gossip协议维护集群所有节点的健康状态,并发送同步请求,维护数据一致性。

4,SSTable,纯文件,单机可靠性一般。

1,存在单点故障,Region Server宕机后,短时间内该server维护的region无法访问,等待failover生效。

2,通过Master维护各Region Server健康状况和Region分布。

3,多个Master,Master宕机有zookeeper的paxos投票机制选取下一任Master。Master就算全宕机,也不影响Region读写。Master仅充当一个自动运维角色。

4,HDFS为分布式存储引擎,一备三,高可靠,0数据丢失。

5,HDFS的namenode是一个SPOF。

伸缩性1,Consistent Hash,快速定位数据所在节点。

2,扩容需在Hash Ring上多个节点间调整数据分布。

1,通过Zookeeper定位目标Region Server,最后定位Region。

2,Region Server扩容,通过将自身发布到Master,Master均匀 分布。

负载均

请求Zookeeper取得整个集群地址,然后根据Consistent Hash选择合适的节点。client会缓存集群地址。请求Zookeeper取读写数据路由表定位Region Server,Master会修改这个路由表。Client自身也会缓存一部分路由信息。

如果Key的第一部分是时间或者序列数,所有新的Key都会被插入同一个区域,一直到此区域被塞满。此处存在热点问题。

数据差异比较算法Merkle Tree , Bloom FilterBloom Filter
锁与事务Client Timestap(Dynamo使用vector lock)Optimistic Concurrency Control
读写性能数据读写定位非常快。数据读写定位可能要通过最多6次的网络RPC,性能较低。
可维护性架构无中心化,维护成本低。

新增keyspace需要重启整个集群。

组件过多,架构复杂,维护成本较高。

删除表非常方便。

列排序支持不支持
map/reduce支持不是很好源生支持
访问接口Thrift多种,包括Thrift
点评1,弱一致性,数据可能丢失。AP

2,可用性高。

3,扩容方便。

4,如果不需要map/reduce的话,维护相当简单。

1,强一致性,0数据丢失。CP

2,可用性低。

3,扩容方便。

4,组件过多,架构复杂,维护成本较高。

一、HBase:宽列式数据库,基于Apache Hadoop和BigTable的概念。

Apache HBase是一种NoSQL键/值存储系统,它在Hadoop分布式文件系统(HDFS)上运行。不像Hive,HBase操作在数据库上,而不是MapReduce作业上实时运行。HBase分成表,表又细分成列族(column family)。列族必须在模式中加以声明,它将某一组列(列不需要模式定义)分为小组。比如说,“message”列族可能包括以下这几列:“to”、“from”、“date”、“subject”和“body”。HBase中的每个键/值对被定义为一个单元(cell),每个键含有行键、列族和时间戳。HBase中的行是一组键/值映射,由行键来识别。HBase可以使用Hadoop的基础设施,并使用现成服务器实现横向扩展。

HBase的工作方式是,将数据存储为键/值。它支持四种主要的操作:添加或更新行的put,检索一组单元的scan,返回某个指定行的单元的get,以及从表上删除行、列或列版本的delete。拥有版本控制功能,那样可以获取数据的之前值(历史记录可以通过HBase压缩时不时删除,以释放空间)。虽然HBase包括表,但只有表和列族才需要模式,列不需要模式,它还包括增量/计数器功能。

HBase查询用一种需要学习的自定义语言来编写。可以通过Apache Phoenix,获得类似SQL的功能,不过其代价是需要维护模式。此外,HBase并不完全符合ACID,不过它确实支持某些属性。最后但并非最不重要的是,为了运行HBase,就需要ZooKeeper――这是面向分布式协调的服务器,比如配置、维护和命名。

HBase最适合大数据的实时查询。Facebook将它用于消息传递和实时分析。Facebook甚至将它用于计数Facebook点赞。

Hbase有集中式架构, Master服务器负责监控集群中的所有RegionServer(负责服务和管理区域)实例,它也是查看所有元数据变化的界面。它提供了CAP原理中的CP(一致性和可用性)。

HBase针对读取操作进行了优化,得到单次写入master的支持,支持因而获得的严格一致性模型,以及使用支持行扫描的顺序分区(Ordered Partitioning)。HBase很适合执行基于范围的扫描。

线性可扩展性,支持大表和范围扫描--由于顺序分区,HBase很容易横向扩展,同时仍支持行键范围扫描。

辅助索引--Hbase并不直接支持辅助索引,但触发器的一个使用场合是,“put”方面的触发器会自动确保辅助索引是最新版本,因而并不给应用程序(客户端)添加负担。

简单聚合--Hbase Co Processors支持HBase中的即开即用的简单聚合。SUM、MIN、MAX、AVG和STD。如果定义java类,就可以构建其他聚合,从而执行聚合操作。

实际应用:Facebook Messanger

二、Cassandra: 宽列式数据库,基于BigTable和DynamoDB的概念

Apache Cassandra是一种主要的NoSQL分布式数据库管理系统,它支撑着如今的许多现代商务应用系统,它提供了持续可用性、高扩展性和高性能、强安全性和操作简单性,同时降低了总体拥有成本。

Cassandra拥有分散式架构。任何节点都能执行任何操作。它提供了CAP原理中的AP(可用性和分区可容忍性)。

Cassandra拥有出色的单行读取性能,只要最终的一致性语义足以满足使用场合的需要。Cassandra quorum读取是严格一致性所需要的,它自然不如Hbase读取来得快。Cassandra不支持基于范围的行扫描,这在某些使用场合可能具有局限性。Cassandra很适合支持单行查询,或者基于列值索引选择多行。

如果数据存储在Cassandra中的列里面以支持范围扫描,Cassandra中行大小的实际限制是10MB。大于这个数的行会在压缩开销和时间方面引起问题。

Cassandra支持列族辅助索引,其中列的名称已知(但不支持动态列)。

Cassandra中的聚合并不受到Cassandra节点的支持――客户端必须提供聚合机制。聚合需求横跨多个行时,随机分区(Random Partitioning)使得聚合对客户端来说很难。建议使用Storm或Hadoop用于聚合。

实际应用:Twitter

三、MongoDB:最流行的文档数据库之一

它是一种面向文档的数据库。Mongodb中的所有数据以JSON/BSON格式来处理。它是一种无模式数据库,数据库中的数据量超过TB级。它还支持主从复制方法,以便在服务器上复制数据的多个副本,从而使得某些应用系统中的数据整合来得更容易、更快速。

MongoDB结合了关系数据库的优点和NoSQL技术的创新,让工程师能够构建现代应用。

MongoDB保留了关系数据库最宝贵的功能特性:强一致性、表达式查询语言和辅助索引。因而,开发人员能够以比NoSQL数据库更快的速度来构建高度实用的应用程序。

MongoDB提供了NoSQL数据库的数据模型灵活性、弹性可扩展性以及高性能。因而,工程师可以不断改进应用,并且可以在商用硬件上实现几乎无限制的可扩展性。

支持全索引,以实现高性能

实际应用:FourSquare

HBase、Cassandra和MongoDB三大NoSQL数据库的比较

HBase:

主要特点:

  1. 分布式和可扩展的庞大数据存储系统
  2. 强一致性
  3. 建立在Hadoop HDFS的基础上
  4. CAP中的CP

适合于:

  1. 针对读取进行了优化
  2. 很适合基于范围的扫描
  3. 严格一致性
  4. 快速读取和写入,具有可扩展性

不适合于:

  1. 典型的事务型应用程序或甚至关系分析
  2. 应用程序需要全表扫描
  3. 数据需要跨聚合、累积以及跨行分析。

使用场合:Facebook消息

Cassandra:

主要特点:

  1. 高可用性
  2. 逐步可扩展性
  3. 最终一致性
  4. 兼顾一致性和延迟
  5. 最小化管理
  6. 没有单一故障点――Cassandra中所有节点都一样
  7. CAP中的AP

适合于:

  1. 简单的安装,维护节点
  2. 快速随机性读取/写入
  3. 灵活的解析/宽列需求
  4. 不需要多个辅助索引

不适合于:

  1. 辅助索引
  2. 关系数据
  3. 事务型操作(回滚和提交)
  4. 主记录/财务记录
  5. 对数据需要严格的授权
  6. 针对列数据的动态查询/搜索
  7. 低延迟

使用场合:Twitter和Travel门户网站

MongoDB:

主要特点:

  1. 应用程序完善后,模式随之变化(无模式)
  2. 支持全索引,实现高性能
  3. 复制和故障切换,实现高可用性
  4. 自动分片,易于扩展
  5. 基于丰富文档的查询,易于读取
  6. 主从模式
  7. CAP中的CP

适合于:

  1. 取代Web应用的RDBMS
  2. 半结构化内容管理
  3. 实时分析和高速日志、缓存和高扩展性
  4. Web 2.0、媒体、SaaS和游戏

不适合:

  1. 高度事务型系统
  2. 存在传统数据库需求的应用程序,比如外键约束。

使用场合:Craigslist和Foursquare

参考资料 : 解读NoSQL技术代表之作Dynamo 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值