HBase交易的类比

时间:2011-12-15 12:18:19

标签: java transactions nosql hbase

我遇到一个小问题 - 我无法理解如何在HBase中创建交易(或模拟交易)。例如,有两个表,我想在第一个表中插入值,在第二个表中插入更新值。我发现HTable有方法:

void batch(List<Row> actions, Object[] results)
//Method that does a batch call on Deletes, Gets and Puts.

但它仅适用于一个表。谷歌搜索,我找到了课程MultiAction

  

操作的容器(即获取,删除或放置),按组分组   regionName。旨在与HConnectionManager.processBatch()

一起使用

这就是我要找的东西吗?如果是,那么我无法理解什么是region。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

HBase不支持交易。 虽然你在单个表上有一些原子性,如果你需要更新多个,你就会注意到事务。 交易意味着按首字母缩写词ACID发出的4件事。简而言之

  • 原子性 - 交易中的变化一起发生(“全有或全无”)。
  • 一致性 - 状态应保持有效
  • 隔离 - 事务外部的操作无法看到半变化(中间不一致状态)
  • 耐久性 - 应继续进行更改

您必须更改HBase代码以获得隔离,但如果您可以放宽该要求,您可以实现一个大致会执行类似

的事务协调器
  • 在特殊表(事务日志)
  • 中保存事务中需要完成的操作
  • 执行第一次更改
  • 执行第二次更改
  • 验证完成的步骤并将交易标记为已完成
  • 恢复时转到事务日志并完成/回滚更改

请注意,因为您没有隔离,有时回滚不是一个选项,因此您需要实现补偿逻辑(另请参阅saga pattern

答案 1 :(得分:2)

有些项目旨在提供HBase之上的交易层,例如Omid,我参与其中。