0

我正在努力在 hbase 中实现回滚操作。我的组件被提供了所有信息来做 put(实际上有数百个这样的 put)——表、时间戳(可能为空)、家庭、限定符、值。它缓冲它们,然后批量调用 HTable.put()。考虑到数据未经预先验证的事实,任何 put 都可能失败。

我正在尝试实现回滚失败 put() 之前已经完成的操作的方法。

正如我所见,有 3 种回滚方式:

  1. 删除新项目(如果之前不存在此类项目)
  2. 什么都不做(如果之前存在完全相同的项目(包括时间戳))
  3. 执行另一个 Put(如果新的 Put 更改了旧行中的一些数据。注意:我知道在 hbase 中无法更改数据。通过“更改”,我指的是新数据被写入同一行的事实/timestamp/family/qualifier,旧的被丢弃了——因为在我的设置中,hbase 被指示只保留一个版本的项目)。

所以问题是 - 如何区分这 3 个看跌期权?当然,查询特定项目的 hbase 是很重要的,但是对我来说,对几百个项目进行简单的获取/扫描似乎不是很有效。

所以我正在寻找一些方法来在 hbase 上进行批量获取/扫描。

4

1 回答 1

0

我会使用Apache BookKeeper之类的东西来存储事务日志,然后使用 HBAse checkAndPut读取分类帐来执行回滚

于 2012-11-19T20:06:29.550 回答