当前位置: 首页 > 科技观察

Cassandra与HBase大数据对决谁是赢家?_0

时间:2023-03-12 17:06:03 科技观察

在全新的大数据领域[注],Bigtable数据库技术非常值得我们关注,因为这项技术是谷歌工程师发明的,谷歌是公认的非常擅长管理海量数据的公司。如果你非常了解这一点,那么你就知道并熟悉Apache的两个数据库项目Cassandra和HBase。谷歌在2006年的一份研究报告中首次描述了Bigtable。有趣的是,该报告当时并未将Bigtable称为数据库技术,而是将其称为“稀疏分布式多维”映射技术,用于存储PB级数据并在商用硬件上运行。首先以一种非常独特的方式对行进行索引,然后Bigtable通过行键对数据进行分区,将它们分布在集群中。可以在行中快速定义列,使Bigtable适用于大多数非模式环境。Cassandra和HBase都大量借鉴了早期Bigtable的定义。事实上,Cassandra起源于Bigtable和亚马逊的Dynamo技术,而HBase将自己定位为“开源Bigtable工具”。因此,这两个程序具有许多共同特征,同时也有许多重要差异。为大数据而生,Cassandra和HBase都是NoSQL数据库。一般来说,这意味着用户不能使用SQL数据库。然而,Cassandra使用CQL(Cassandra查询语言),其语法明显模仿了SQL。两者都旨在管理非常大的数据集。HBase文档指出HBase数据库可以有数亿甚至数十亿行。此外,建议用户继续使用关系型数据库。两者都是分布式数据库,不仅在数据存储方式上,在数据访问方式上也是如此。客户端可以连接到集群中的任何节点并访问任何数据。两者都声称具有近乎线性的可扩展性。想要管理两倍大小的数据?用户只需将集群中的节点数量增加一倍。两者都使用复制来防止由于集群节点故障而导致的数据丢失。行主要由单个集群节点写入数据库(行到节点的映射取决于用户使用的分区方案)。数据被镜像到称为冗余节点的其他集群成员(用户可配置的复制因子表示数量)。如果主节点发生故障,仍然可以从另一个冗余节点读取数据。两者都称为列式数据库。因为它们的名字听起来像关系型数据库,所以用户在接触时需要调整心态,导致用户对它们的认知产生混淆。最大的困惑是数据最初显然是按行排列的,表的主键是行键。但与关系数据库不同,在列式数据库中,没有两行需要具有相同的列。如上所述,在创建表之后,用户可以快速地向行中添加列。事实上,您可以将许多列添加到一行中。虽然最大上限很难准确计算,但用户要达到这样的上限几乎是不可能的,即使添加大量的列。除了这些源自Bigtable定义的特性外,Cassandra和HBase还有一些其他的相似之处。首先,两者都使用相似的写入路径,即写入操作首先记录在日志文件中以确保持久性。即使出现写入失败提示,也可以重新启动保存在日志中的操作记录。随后,数据被写入内存缓存。***,数据在一连串的写操作中写入磁盘(实际上是将内存缓存的副本复制到磁盘)。Cassandra和HBase使用的内存和磁盘数据结构在某种程度上都是日志结构的合并树。Cassandra的磁盘组件是SSTable,HBase的磁盘组件是HFile。两者都为JRuby语言提供命令行shell。两者都是通过Java语言大量编写的,Java是访问它们的主要编程语言,尽管在许多其他编程语言中都有适用于两者的客户端程序包。当然,Cassandra和HBase都是由Apache软件基金会管理的开源项目,在ApacheLicenseversion2.0许可下都可以免费使用。异同尽管两者之间有许多相似之处,但它们之间也有许多重要的区别。尽管Cassandra和HBase中的节点都是对称的,这意味着客户端可以连接到集群中的任何节点,但这种对称性并不完美。Cassandra要求用户设置一些节点作为种子节点,让它们在集群间通信中起到聚集点的作用。在HBase中,用户必须有一些节点作为主节点,其作用是监控和协调区域服务器的动作。为了保证高可用,Cassandra采用了允许在集群中设置多个种子节点的方式;HBase使用备份主节点。如果当前主节点发生故障,备份主节点将成为新的主节点。Cassandra使用Gossip协议进行节点间通信。目前Gossip服务已经与Cassandra软件集成。HBase依赖于一个完全独立的分布式应用Zookeeper来处理相应的任务。尽管HBase附带了Zookeeper,但用户通常使用预装在HBase数据库中的Zookeeper。虽然Cassandra和HBase都不支持实时事务控制,但都提供了一定程度的一致性控制。HBase为用户提供记录级别(即行级别)的一致性。事实上,HBase在每行的基础上支持ACID级语义。用户可以在HBase中锁定一行,但不鼓励这种行为,因为它不仅会影响并发性,而且行锁定还会阻止区域拆分操作。此外,HBase还可以执行“检查和写入”操作,为单个数据元素提供“读-修改-写”语义。Cassandra的免费DataStaxCommunityEdition包括一个DataStaxOperationsCenter。中心提供集群监控管理功能,可检测数据库schema,提示keyspace是否可编辑,列族是否可增删。虽然Cassandra被描述为具有“***”一致性,但是读写一致性是可以在级别和间隔上进行调优的。也就是说,您不仅可以配置必须成功完成操作的冗余节点的数量,还可以设置参与的冗余节点是否跨越数据中心。此外,Cassandra还在其计算机指令集中添加了一些轻量级事务。Cassandra的轻量级事务使用“比较和收集”机制,相当于HBase的“检查和写入”功能。但是对于HBase的“read-modify-write”操作功能,Cassandra缺乏相应的功能。最后,Cassandra2.0版添加了单独的行级写入功能。如果一个客户端连续更新多个列,其他客户端将看到所有未更新的部分或所有更新的部分。在Cassandra和HBase中,主索引是rowkey,但是数据存储在磁盘上,这导致列族成员之间的距离非常近。所以精心策划列族组织非常重要。为了保持较高的查询性能,具有相同访问模式的列应该放在同一个列族中。Cassandra允许用户在列值上创建额外的二级索引。此举改进了具有高度重复值的列的数据访问,例如在客户的电子邮件地址中存储国家/地区的列。尽管HBase缺乏对二级索引的内置支持,但它们有一些机制可以提供二级索引功能。HBase在线参考指南和HBase社区博客中提到了这些。如前所述,这两个数据库都有用于发出数据操作命令的命令行shell。由于HBase和Cassandra的shell都是基于JRubyshell的,用户可以编写一些脚本,让这些脚本调用JRubyshell的所有资源,与数据库提供的特定API进行交互。此外,Cassandra还定义了仿照SQL的CQL。与HBase使用的查询语言相比,CQL的功能更加丰富,可以直接在Cassandra的shell中执行。虽然Cassandra仍然支持ThriftAPI,但实际上Cassandra一直在推动让CQL成为数据库的主要编辑接口。Cassandra的文档列出了使用CQL版本3的Java、C#和Python驱动程序。最终,Cassandra将获得JDBC驱动程序。驱动程序用CQL代替SQL,使用CQL作为数据定义和数据管理语言。HBase也支持Thrift接口和RESTfulWeb服务接口,但是HBase原生的JavaAPI为程序员提供了丰富的功能(如图)。虽然HBase的数据操作命令没有CQL丰富,但是HBase有一个“过滤”的功能,可以在会话的服务器端执行,大大提高了扫描(搜索)的吞吐量。HBase还引入了“协处理器”的概念,它允许用户代码在HBase进程中执行。这与关系数据库中的触发和存储过程基本相同。目前,Cassandra没有类似HBase的协处理器。Cassandra的文档比HBase的文档更直观,并且学习曲线更平坦。设置开发Cassandra集群比设置HBase集群简单得多。当然,这仅对开发和测试目的很重要。附图HBase主节点在端口60010上托管一个Web界面。用户可以浏览信息,包括节点执行历史、节点管理的表以及主节点域中的区域服务器。棘手的地方是当必须针对特定应用程序调整集群时,用户需要做一些工作。一旦指定了数据集大小,以及创建和管理多节点集群(通常跨越多个数据中心)的复杂性,调整就变得棘手了。用户需要深入了解集群的内存缓存、磁盘存储和节点间通信之间的交互,并仔细监控集群的活动。HBase对Zookeeper的依赖引入了一些额外的故障点。虽然Cassandra避免了这个问题,但并不意味着调优Cassandra集群的难度会大大降低。我们对比了两个数据库的集群调优难点(见附表)。应该注意的是,没有确定谁是赢家,谁是输家。每个数据库的支持者都会找到一些证据表明他们的系统优于另一个。在确定它们对目标应用程序的性能之前,用户通常需要测试这两个数据库。那么从技术角度有没有更好的办法呢?原文链接:http://www.36dsj.com/archives/7179【小编推荐】ApacheWicket6.9.0发布,Web开发框架大数据生态环境搭建——离线计算与实时计算环境(CDH)