HBase并行写机制(mvcc)
HBase在保证高性能的同时,为用户提供了便于理解的一致性数据模型MVCC (Multiversion Concurrency Control),即多版本并发控制技术,把数据库的行锁与行的多个版本结合起来,从而去提高数据库系统的并发性能。
要理解mvcc,首先需知道为什么需要进行并发控制,我们知道关系型数据库一般都提供了跨越所有数据的ACID特性,为了性能考虑,HBase只提供了基于单行的ACID,维基上是这样介绍ACID的:
- 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
- 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
- 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
具体写入数据时是以KeyValue为数据单位的,对于上图中的数据来说,实际写入时有四个KeyValue,每个写入线程负责写入两个KeyValue,如果HBase没有相应的并发控制,则这四个KeyValue写入MemStore的顺序是无法预料的,可能会出现以下情况:
最终得到的结果是:
这样就得到了不一致的结果。显然我们需要对并发写操作进行同步。最简单的一种方案是在对某一行进行操作之前,首先显式对该行进行加锁操作,加锁成功后才进行相应操作,否则只能等待获取锁,此时,写入流程如下:
- (0) 获取行锁
- (1) 写WAL文件
- (2) 更新MemStore:将每个cell写入到memstore
- (3) 释放行锁
引入行锁的机制后,就可以避免并发情景下,对同一行数据进行操作(写入或更新)时出现数据交错的情况。
可见需要对读和写也进行并发控制,不然会得到不一致的数据。最简单的方案就是读和写公用一把锁。这样虽然保证了ACID特性,但是读写操作同时抢占锁会互相影响各自的性能。
最简单的方案是和写入一样,在读取操作前后分别加入获取锁与释放锁的步骤,这样的话,性能一下子就下来了。HBase使用了一种mvcc的策略来避免读取的锁操作。mvcc对于写操作:
- (w1) 获取行锁后,每个写操作都立即分配一个写序号
- (w2) 写操作在保存每个数据cell时都要带上写序号
- (w3) 写操作需要申明以这个写序号来完成本次写操作
对于读操作:
- (r1) 每个读操作开始都分配一个读序号,也称为读取点
- (r2) 读取点的值是所有的写操作完成序号中的最大整数(所有的写操作完成序号<=读取点)
- (r3) 对某个(row,column)的读取操作r来说,结果是满足写序号为“写序号<=读取点这个范围内”的最大整数的所有cell值的组合
使用了MVCC策略的执行过程如下:
采用MVCC后,每一次写操作都有一个写序号(即w1步),每个cell数据写memstore操作都有一个写序号(w2,例如:“Cloudera [wn=1]”)),并且每次写操作完成也是基于这个写序号(w3)。
如果在“Restaurant [wn=2]” 这步之后,“Waiter [wn=2]”这步之前,开始一个读操作。根据规则r1和r2,读的序号为1。根据规则3,读操作以序号1读到的值是:
这样就实现了以无锁的方式读取到一致的数据了。
总结:
引入MVCC后写入操作流程如下:
- (0) 获取行锁
- (0a) 获取写序号
- (1) 写WAL文件
- (2) 更新MemStore:将每个cell写入到memstore
- (2a) 以写序号完成操作
- (3) 释放行锁
参考英文:https://blogs.apache.org/hbase/tags/mvcc

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
hadoop hive hbase 入门学习 (一)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// hadoop 自学系列 hadoop hive hbase 入门学习 (一) hadoop安装、hdfs学习及mapreduce学习 hadoop 软件下载 (hadoop-1.2.1.tar.gz) 点击下载 hadoop hive hbase 入门学习 (二) hbase 安装、hbase语句学习 hbase 软件下载 (hbase-0.94.26.tar.gz) 点击下载 hadoop hive hbase 入门学习 (三) hive安装、及hive语句学习 hive软件下载 (hive-0.9.0.tar.gz)点击下载 mysql 客户端软件下载 (MySQL-client-5.5.23-1.linux2.6.i386.rpm)点击下载 mysql 服务...
- 下一篇
十八款Hadoop工具帮你驯服大数据
Hadoop已经通过自身的蓬勃发展证明,它不仅仅是一套用于将工作内容传播到计算机群组当中的小型堆栈--不,这与它的潜能相比简直微不足道。这套核心的价值已经被广泛证实,目前大量项目如雨后春笋般围绕它建立起来。有些项目负责数据管理、有些负责流程监控、还有一些则提供先进的数据存储机制。 Hadoop业界正在迅速发展,从业企业拿出的解决方案也多种多样,其中包括提供技术支持、在托管集群中提供按时租用服务、为这套开源核心开发先进的功能强化或者将自有工具添加到方案组合当中。 在今天的文章中,我们将一同了解当下Hadoop生态系统当中那些最为突出的杰作。总体而言,这是一套由众多工具及代码构成的坚实基础、共同聚集在"Hadoop"这面象征着希望的大旗之下。 Hadoop 虽然很多人会把映射与规约工具广义化称为Hadoop,但从客观角度讲、其实只有一小部分核心代码算是真正的Hadoop。多个工作节点负责对保存在本地的数据进行功能执行,而基于Java的代码则对其加以同步。这些工作节点得到的结果随后经过汇总并整理为报告。第一个步骤被称为"映射(即map)",而第二步骤则被称为"规约(reduce)"。 Ha...
相关文章
文章评论
共有0条评论来说两句吧...