为什么HBase是比Cassandra和Hadoop更好的select?
为什么使用HBase
比使用Cassandra
和Hadoop
更好?
任何人都可以给这个详细的解释吗?
谢谢
我不认为任何一个都比别人好,不只是其中之一。 这些是非常不同的系统,每个系统都有自己的优缺点,所以这取决于你的使用情况。 它们绝对可以在相同的基础设施中互相配合使用。
为了更好地解释这个差别,我想借用一张来自卡桑德拉的图片:权威指南 ,他们通过CAP定理。 他们所说的基本上是任何分布式系统,你必须在一致性 , 可用性和分区容限之间find一个平衡点,并且你只能真实地满足其中的两个属性。 从中可以看出:
- Cassandra满足Availability和Partition Tolerance属性。
- HBase满足一致性和分区容差属性。
在Hadoop方面,HBasebuild立在HDFS的基础上,如果您已经拥有Hadoop堆栈,使用起来非常方便。 它也支持Cloudera,它是Hadoop的标准企业分布。
但是Cassandra也与Hadoop更加融合,即正在stream行的Datastax Brisk。 现在,您也可以使用一些Cassandra提供的输出格式(例如BulkOutputFormat
)将来自Hadoop作业输出的数据本地stream式传输到Cassandra集群中。我们已经不再是Cassandra只是一个独立项目的地步。
根据我的经验,我发现Cassandra对于随机读取来说非常棒,而对于扫描来说并不是那么重要
为了给图片添加一些色彩,我一直在同一个基础设施上使用这两种工具,而HBase与Cassandra有着非常不同的用途。 我主要使用Cassandra进行实时非常快速的查找,而我更多地使用HBase来处理延迟要求较低的重要ETL批处理作业。
这是一个真正值得一篇博客文章的问题,所以我不想将这两个系统之间的许多关键区别总结为一个文章 。 底线是,没有优秀的解决scheme恕我直言,你应该真的考虑你的用例,看看哪个系统更适合。
我们必须比较两个数据库的利弊,并根据业务需求做出谨慎的决定。
卡桑德拉
优点:
- 满足CAP理论的可用性和划分并最终一致 。
- 具有无单点故障的大型集群可扩展
- 像开发语言SQL一样,开发人员可以轻松地从RDBMS背景转换
- 只要最终的一致性语义足以满足用例,Cassandra就具有出色的单行读取性能
- Datastax的支持是一个很大的优势
- 优化写入
缺点:
- 不支持基于范围的行扫描
- 不支持primefaces比较和设置
- Cassandra不支持协处理器function
- Cassandra支持列名称已知的列族的二级索引 。 (不在dynamic列上)。
- Cassandra节点不支持Cassandra中的聚合
HBase的
优点:
- 一致性强 ,符合CAP理论的一致性和划分 。
- RDBMS等价触发器和存储过程
- Hadoop支持
- 基于范围的行扫描
- 支持primefaces比较和设置
- 针对读取进行了优化,由单写主机支持
- 支持聚合
- 高可扩展性和数据自动分片
缺点:
- 缺乏发展友好的语言
- 不支持对单个行进行读取负载平衡
- 行间操作不是primefaces的
- 如果只使用一个HBase Master ,则会出现单点故障
看看第1条 , 第2条和这个演示文稿的进一步细节。