Hbase事务原子性保证
Hbase的数据首先会写入WAL,再写入Memstore。写入Memstore异常的话很容易实现回滚,因子只要保证WAL的原子性即可,每个事务只会产生一个WAL单元,这样就可以保证其原子性。
Hbase事务一致性保证
Hbase事务隔离性保证
写写并发控制
实现写写并发控制,只需要在写入或者更新之前先获取行锁,如果获取不到,就说明有其它的线程已经获得了该锁,就需要不断的重试等待或者自旋等待(自旋锁),直至其他线程释放该锁。拿到锁以后开始写数据,写完数据以后释放该行锁即可。
批量写写并发控制
一个线程同时更新一个Region中的多行记录,使用的方法是行锁,两阶段锁协议:
1.获取所有待写入或者更新行记录的行锁。
2.开始执行写入或者更新操作。
3.写入完成以后再同一释放所有行记录的行锁。
注:不能更新一行就是释放一个行锁,这样容易形成事务的死锁。
读写并发控制
当有两个事务更性同一行数据,当第二个事务更新到一半的时候过来一个读操作,读请求就会读到一个不一致的数据。Hbase采用的MVCC机制,主要分为两个步骤:
1.为每一个写入或者更新分配一个Region级别自增的序列号
2.为每一个读请求分配一个已完成的最大写事务系列号
Hbase事务持久性保证
Hbase事务持久性保证可以理解为WAL持久化。