大数据对决:Cassandra vs. HBase
受bigtable启发的开源项目采用了不同的方式来实现高度可伸缩、高度灵活、分布式、宽列的数据存储
在这个美好的大数据新世界中,一项名为“Bigtable”的数据库技术似乎值得考虑——尤其是如果这项技术是谷歌的工程师们创造的,这家公司应该对管理大量数据有所了解。如果你相信,两个Apache数据库项目卡珊德拉和HBase你搞定了吗?
Bigtable最初是在2006年描述的谷歌研究出版。有趣的是,那篇论文并没有将Bigtable描述为一个数据库,而是将其描述为一个“稀疏的、分布式的、持久的多维映射”,用于存储pb级的数据并在商用硬件上运行。行被唯一地索引,Bigtable使用行键对数据进行分区,以便在集群中分布。可以动态地在行中定义列,这使得Bigtable在很大程度上没有模式。
[阅读全文评论:HBase具有大规模可伸缩性——而且非常复杂|卡桑德拉降低了大数据的门槛|2013年Bossie大奖:最佳开源大数据工具|获取每日重要新闻的摘要信息世界每日简报。]
Cassandra和HBase从最初的Bigtable定义中借鉴了很多东西。事实上,Cassandra是从Bigtable和Amazon的Dynamo继承而来的,而HBase将自己描述为“开放源码的Bigtable实现”。因此,两者有许多共同的特点,但也有重要的区别。
为大数据而生Cassandra和HBase都是NoSQL数据库,你可以找到很多对它的定义。通常,这意味着您不能使用SQL操作数据库。然而,Cassandra实现了CQL (Cassandra查询语言),其语法显然是模仿SQL的。
两者都是为管理超大数据集而设计的。HBase文档宣称,一个HBase数据库应该有数亿——甚至更好——数十亿行。如果有任何不足,建议您坚持使用RDBMS。
两者都是分布式数据库,不仅在数据存储方式上,而且在数据访问方式上。客户端可以连接到集群中的任何节点并访问任何数据。
两者都声称具有接近线性的可扩展性。需要管理两倍的数据?然后将集群中的节点数量增加一倍。
两者都可以通过复制防止群集节点故障导致数据丢失。写入数据库的行主要由单个集群节点负责(行到节点的映射由所使用的分区模式决定)。但是数据被镜像到称为副本节点的其他集群成员(用户可配置的复制因子指定了数量)。如果主节点发生故障,仍然可以从一个复制节点获取其数据。
这两种数据库都被称为面向列的数据库,这可能会让人感到困惑,因为它听起来像是一个在概念上旋转了90度的关系数据库。更令人困惑的是,数据最初显然是按行排列的,而表的主键是行键。但是,与关系数据库不同的是,面向列的数据库中没有两行需要具有相同的列。如上所述,您可以动态地(在创建表之后)向行添加列。实际上,您可以向一行添加许多列。精确的上限很难计算,但是即使您添加数万列,也不太可能达到这个上限。
除了源自Bigtable定义的特性外,Cassandra和HBase还有其他相似之处。
两种方法都实现了类似的写路径,首先将写操作记录到日志文件中,以确保持久性。即使剩余的写操作失败,保存在日志中的操作也可以重新播放。数据被写入到内存缓存的旁边,最后通过一个大的顺序写入(本质上是内存缓存的副本)写入到磁盘。Cassandra和HBase使用的总体内存和磁盘数据结构或多或少是一个日志结构的合并树。卡桑德拉的圆盘分量是SSTable;在HBase中,它是HFile。
两者都提供了用JRuby实现的命令行shell。两者都主要是用Java编写的,Java是用于访问两者的主要编程语言——尽管在许多其他编程语言中都可以使用客户端库。
当然,Cassandra和HBase都是由Apache Software Foundation管理的开源项目,并且都可以在Apache version 2许可下免费获得。
集群和对比然而,尽管有这些相似之处,你还是会发现一些关键的不同之处。
虽然HBase中两个Cassandra中的节点都是对称的——这意味着客户端可以连接到集群中的任何节点——但这种对称并不完全。Cassandra要求您将一些节点标识为种子节点,作为集群间通信的集中点。同时,在HBase上,必须让一些节点成为主节点,主节点的工作是监控和协调区域服务器的动作。因此,Cassandra通过允许集群中有多个种子节点来保证高可用性,而HBase通过备用主节点来保证高可用性——如果当前主节点失败,其中一个将成为新的主节点。
Cassandra使用八卦协议进行节点间通信,八卦服务与Cassandra软件集成。HBase依赖于Zookeeper——一个完全独立的分布式应用程序——来处理相应的任务。虽然HBase提供了一个Zookeeper安装,但没有什么可以阻止你使用一个已经存在的Zookeeper与HBase数据库集成。
虽然Cassandra和HBase都不支持真正的事务,但它们都提供了某种程度的一致性控制。HBase为您提供了强大的记录级(即行级)一致性。事实上,HBase支持液位语义以每行为基础。此外,可以在HBase中锁定一行,但不鼓励这样做,不仅因为它妨碍并发性,而且还因为行锁在区域分割操作中无法存活。此外,HBase还有一个“检查和放置”操作,它在单个数据元素上提供了原子性的“读-修改-写”语义。
DataStax OpsCenter——包含在Cassandra的免费DataStax社区版中——提供集群监视和管理。这里检查数据库的模式。注意,可以编辑键空间和添加或删除列族。
与此同时,尽管Cassandra被描述为具有“最终”一致性,但读写一致性都可以调优,不仅可以按级别调优,还可以在程度上调优。也就是说,您不仅可以配置在确认操作之前必须成功完成多少复制节点,还可以配置参与的复制节点是否跨越数据中心。雷竞技电脑网站
此外,Cassandra还添加了轻量级事务。Cassandra的轻量级事务是一种“比较和设置”机制,与HBase的“检查和放置”功能大致相当;HBase还有一个“读取-检查-删除”操作,Cassandra没有对应的操作。最后,Cassandra的2.0版本增加了行级写隔离:如果一个客户端更新了一行中的多个列,那么其他客户端要么看不到任何更新,要么看不到所有更新。
在Cassandra和HBase中,主索引都是行键,但是数据存储在磁盘上,这样就使得列家族成员之间保持着紧密的距离。因此,仔细计划列族的组织是很重要的。为了保持较高的查询性能,具有类似访问模式的列应该放在相同的列族中。Cassandra允许您在列值上创建额外的二级索引。这可以改进值具有高度重复的列中的数据访问,比如存储客户邮寄地址的状态字段的列。HBase缺乏对二级索引的内置支持,但提供了许多提供二级索引功能的机制。这些在HBase的在线参考指南和HBase社区博客中都有描述。
如前所述,两个数据库都有用于发出数据操作命令的“命令行”外壳程序。HBase和Cassandra的shell都构建在JRuby shell上,所以您可以编写脚本,利用JRuby shell的所有资源与数据库提供的特定api交互。此外,Cassandra还根据SQL定义了CQL。CQL比HBase使用的查询语言要丰富得多,它可以直接在Cassandra的shell中执行。
事实上,Cassandra正在转向CQL作为数据库的主要编程接口,尽管Cassandra仍然支持Thrift API。(Thrift是独立于语言的,但是现在它被认为是一个遗留的API。)Cassandra文档列出了Java、c#和Python的驱动程序,所有这些都采用了CQL版本3。最后,Cassandra还可以使用JDBC驱动程序。它使用CQL代替SQL作为其数据定义和数据管理语言。
HBase的本地Java API为程序员提供了最丰富的功能,尽管HBase还提供了与语言无关的节俭接口,以及基于rest的Web服务接口。虽然HBase的数据操作命令不如CQL丰富,但HBase确实有“过滤”功能,可以在会话的服务器端执行,并提高扫描(搜索)吞吐量。
HBase还引入了“协同处理器”,它允许在HBase进程的上下文中执行用户代码。其结果与关系数据库中的触发器和存储过程大致相当。Cassandra目前还没有HBase的协同处理器。
Cassandra的文档明显好于HBase的文档,好的文档当然可以平坦学习曲线。根据我的经验,设置一个开发Cassandra集群要比设置一个HBase集群简单。当然,这只对开发和测试目的很重要。
HBase主节点在端口60010上托管一个Web接口。在这里,您可以浏览诸如节点的执行历史、节点管理的表以及主域中的区域服务器等信息。
赢得列真正的工作出现在必须针对特定应用程序调优集群时。考虑到所涉及的数据集的大小以及构建和管理多节点集群(通常跨越多个数据中心)的复杂性,调优并不容易。雷竞技电脑网站它要求对集群的内存缓存、磁盘存储和节点间通信的相互作用有深入的理解,并且需要仔细监视集群行为。
的确,HBase对Zookeeper(一个独立的应用程序)的依赖引入了一个额外的故障点(以及随之而来的故障根源排除困难),而Cassandra避免了这一点。但是,对Cassandra集群进行调优并不是那么困难。最后,比较这两个数据库的集群调优所带来的困难,这可能是一场大扫除。
这意味着,一如既往,没有明确的赢家或输家。您将发现这两个数据库的狂热爱好者,并且每个阵营都将提供令人信服的证据来证明其系统的优越性。和往常一样,您将面临对每种工具进行测试并针对目标应用程序进行基准测试的繁琐工作。但是考虑到这些技术的范围,还有其他的方法吗?
- 对称的架构使得创建和扩展大型集群相对容易
- 类似sql的Cassandra查询语言简化了开发人员从RDBMS的转换
- 允许您调优性能或一致性或两者的平衡
- 管理GUI的社区版可用
- 良好的文档(由Datastax提供)
- 内置版本控制
- 在记录水平上的强烈一致性
- 通过协处理器提供类似rdbms的触发器和存储过程
- 基于可靠的Hadoop技术
- 积极开发社区
- 配置是复杂的
- 电流触发/存储过程机制实验
- 管理GUI难以启动和运行
- 缺乏友好的、类似sql的查询语言
- 很多活动部件
- 在单节点开发集群之外进行设置可能会很困难
,
这篇文章中,“大数据对决:Cassandra vs. HBase,最初发表于InfoWorld.com。关注最新的发展应用程序开发,数据管理,云计算,开源在InfoWorld.com上。了解最新的商业技术新闻,请跟随在Twitter上InfoWorld.com。
阅读更多关于大数据的文章在InfoWorld的大数据频道。
这个故事,“大数据摊牌:Cassandra vs. HBase”最初发表于信息世界 。
版权©2014Raybet2