Java 在HBase中模拟事务

Java 在HBase中模拟事务,java,transactions,nosql,hbase,Java,Transactions,Nosql,Hbase,我有一个小问题-我不明白如何在中创建事务(或类似事务)。例如,有两个表,我想在第一个表中插入值,在第二个表中更新值。我发现有一种方法: void batch(List<Row> actions, Object[] results) //Method that does a batch call on Deletes, Gets and Puts. void批处理(列出操作、对象[]结果) //方法,该方法对Deletes、get和put执行批处理调用。 但它只适用于一张桌子。在谷

我有一个小问题-我不明白如何在中创建事务(或类似事务)。例如,有两个表,我想在第一个表中插入值,在第二个表中更新值。我发现有一种方法:

void batch(List<Row> actions, Object[] results)
//Method that does a batch call on Deletes, Gets and Puts.
void批处理(列出操作、对象[]结果)
//方法,该方法对Deletes、get和put执行批处理调用。
但它只适用于一张桌子。在谷歌上搜索,我发现课堂上:

操作(即Get、Delete或Put)的容器,这些操作按 地区名称。拟与HConnectionManager.processBatch()一起使用

这就是我要找的吗?如果是的话,那我就不明白是什么了。
感谢您的帮助。

HBase不支持事务处理。 当您在单个表上有原子性的东西时,如果您需要更新多个表,您就没有事务这样的东西了。 “交易”指的是4件事。简而言之

  • 原子性-事务中的更改一起发生(“全部或全部”)
  • 一致性-状态应保持有效
  • 隔离-事务之外的操作无法看到一半的更改(中间不一致状态)
  • 耐久性-变化应该持续
您必须更改HBase代码以获得隔离,但如果您可以放宽这一要求,您可以实现一个事务协调器,它大致可以执行以下操作

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

请注意,因为您没有隔离,所以有时回滚不是一个选项,因此您需要实现补偿逻辑(还请看一下)

有一些项目旨在在HBase之上提供事务层,如我参与的项目