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
- get
- scan
- 写 APIs
- put
- batch put
- delete
- 混合操作(read-modify-write) APIs
- incrementColumnValue
- checkA