HBase虽然不是严格意义上的ACID数据库,但其也在一定程度上对ACID做了适当的支持。本文将对HBase的ACID特性做一个简要的介绍。
首先对ACID做一个简单的定义,
A(Atomicity)原子性:一个事务中的一组操作要不全部完成,要不全部不完成,不可能只完成一部分。
C(Consistency)一致性:一个事务中所有的操作将保证数据表中的数据从一个有效状态转换到另一个有效状态,即从外部来看,数据是一致的。比如转账业务,从用户A中减去100块,存入用户B的账户中,在这个过程中,无论从用户A去查询还是从用户B去查询都可以确保这100块钱还存在于系统之中,不会出现程序将数据从A中减去了100块而没完成存入到B的过程,此时从A,B账户去查询都看不到这100块的情况。
I(Isolation)隔离性:同时执行事务中的操作相互之间不影响。
D(Durability)持久性:任何报告给client成功的操作都应该被永久保存在系统之中。
V(Visibility)可见性:任何更新操作都是可以被之后的读操作所见到的,就好像更新操作是被提交了一样。
以下从HBase的几方面来看HBase对于ACID的支持:
- 读APIs
- 写 APIs
- 混合操作(read-modify-write) APIs
- incrementColumnValue
- checkAndPut
-
HBase在ACID的特性上所能保证的包括以下的一些特性:
原子性
- 所有对于一个hbase行的操作都是原子的,也即在hbase的table中加入,更新一行要不成功要不失败,不会部分成功部分失败,特别说明的是
- 如果客户端(API)操作超时的话,改操作也是全部成功或全部失败,不会有部分成功的情况出现, 这个是hbase在行上的原子操作的保证。
- 操作跨多个CF(column family)也是一样,全部成功或全部失败
- API对于跨行的操作是不能保证原子性的。比如说通过multiput去创造行'a','b','c',可能从API的调用中得到对每一行各自的成功,失败了或超时状态。
- 对于行的操作会按照一定的顺序进行,而不会出照操作之间的叠加而导致数据的异常。如一个线程对于一行的操作是"a=1,b=1,c=1",另一个线程对于该行的操作是"a=2,b=2,c=2",该行的最终值有可能是"a=1,b=1,c=1"或者"a=2,b=2,c=2";不可能出现"a=1,b=2,c=1"的情况,这个是hbase来保证的。但是要注意的是,跨多行的批量操作是不能保证这一点的。
一致性和隔离性
- API对于hbase中的行访问,会得到在某一个时间点上的完整的数据行.对于同行跨多个CF(column family)的操作来说依然成立。
- 一个行的状态是通过对其历史版本不停的前滚而来
Consistency of Scans
一个scan不可以获得一个table的一致状态(scan后包括不同行不在同一个时间点值,如r1(t1),r2(t2)),但是可以保证的是每一行的状态都是一致的。
一个scan将一直反应在其被创建时刻的数据值,这包括以下几个方面:
1.如果Client A写了一个数据X并通过其它方式通知client B去访问该数据,client B将可以看到最起码X或其之后的数据X.
2.一个scan必需反应出在其创建之前所有的被提交的更新,并且也可能反应出在其创建过程中可能产生的更新。
如果你对关系数据库事务的隔离性熟悉的话,scan的行为实际上是一种'read committed'。
请注意以上所能保证的被称为‘事务提交时间’,并不是相应的行上‘timestamp'列,也就是说,一个scanner开始时间为t可能会看到一个timestamp的值为t的数据,如果那些版本是由于提交‘forward dated'的时间崔在scanner被创建之前。
可见性
1.当一个client收到一个更新操作的成功反馈,这个更新将会马上被当前client或任意其它连接进行查询的client可见。
可持久化:
1. 所有可见的数据都是被持久化的数据。也就是说,一个read不会把一个还没有写入磁盘的数据返回给client.
2. 任何返回成功的操作都会被持久化
3. 任何返回失败操作的数据都不会被持久化
分享到:
相关推荐
HBase_SI_--_实现HBase_ACID的理论
HBase 提供了强一致性的基于行和区域的 ACID 操作支持,但是牺牲了在跨区域操作的支持。这就要求应用开发者花很大力气来确保区域边界上操作的一致性。而 Tephra 提供了全局事务支持,可以夸区域、跨表以及多个 RPC ...
作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性,即通常所说的ACID特性。为了实现事务特性,HBase采用了...
但是HBase和传统意义上的关系型数据库(RDBMS)有所不同,它牺牲了传统数据库的ACID(原子性,一致性,隔离性和持久性)要求,达到超大容量和更快的处理速度。并且,HBase上面存储的数据不需要严格符合表结构,它可以存储非...
近些年来,各种互联网+的...一般来说,传统数据库包括以下三个鲜明的特点:ACID一言以蔽之就是原子性、一致性、隔离性、持久化事务,它是四个单词的缩写:1.Atomicity原子性事务中所有操作要么全部完成,要么全失败。
传统的关系型数据库处理方式是基于全面的ACID保证,遵循SQL92的标准表设计模式(范式)和数据类型,基于SQL语言的DML数据交互方式。长期以来这种基于关系型数据库的IT信息化建设中发展良好,但受制于关系型数据库...
Themis基于HBase的单行事务,通过两阶段提交和冲突解决来保证跨行事务的ACID特性。 Themis 依赖于提供全局严格增量时间戳,它定义了事务的全局顺序,使 Themis 可以在给定时间戳之前读取数据库快照。 Themis 采用 ...
NoSQL(Not Only SQL),指的是非关系型的数据库。随着web2.0的快速发展,非关系型、 分布式数据存储得到了快速的发展,它们不保证关系...的NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。
NoSQL的一些概念——ACID NoSQL的一些概念——BASE NoSQL的一些概念——BASE NoSQL的一些概念——BASE 常见NoSQLj介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB ...
ACID: Provides multi-row, multi-table transaction with full ACID semantics. Linearly scalable: Can linearly scale out throughput of transaction as scale out your HBase cluster. Serializability: ...
分布式存储的复制,高容错性4,支持很多字符集和热备份5,支持 ACID 和 eventual consistency(最终一致性)6,支持的索引ElasticSearchApache Lucene7,内置实现 TinkerPop graph APIGremlin graph query ...
5.3.1 使用MongoDB、HBase和Redis更新及修改数据 98 5.3.2 有限原子性和事务完整性 99 5.4 小结 100 第6章 查询NoSQL存储 101 6.1 SQL与MongoDB查询功能的相似点 101 6.1.1 加载MovieLens数据 103 6.1.2 ...
11单选(2分)NoSQL数据库的三大理论基石不包括() [单选题] * A.ACID(正确答案) B.CAP C.最终一致性 D.BASE 大数据技术原理与应用全文共10页,当前为第3页。12. 12单选(2分)在设计词频统计的MapReduce程序时,对于...
非关系型:Redis、Hbase、MongodDB 2.什么是事物,mysql如何支持事物? 事务:是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务。 事务的ACID属性: 1)原子性(Atomicity): 事务是...
(2)HBase:Apache Hbase源于Google的Bigtable,是⼀个开源、分布式、⾯向列存储的模型。在Hadoop和HDFS之上提供了像 Bigtable⼀样的功能。 (3)Amazon SimpleDB:Amazon SimpleDB是⼀个⾮关系型数据存储,它卸下...