gpt4 book ai didi

java - HBase 中事务的模拟

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:53:33 24 4
gpt4 key购买 nike

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

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

但它只适用于一张表。谷歌搜索,我找到了类 MultiAction :

Container for Actions (i.e. Get, Delete, or Put), which are grouped by regionName. Intended to be used with HConnectionManager.processBatch()

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

最佳答案

HBase 不支持事务。虽然你在单个表上有一些关于原子性的东西,但如果你需要更新多个表,你会注意到像事务一样。交易意味着 4 个首字母缩略词 ACID .简而言之

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

您必须更改 HBase 代码才能获得隔离,但如果您可以放宽该要求,您可以实现一个事务协调器,它大致可以做类似的事情

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

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

关于java - HBase 中事务的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com