Hbase仅在更改时更新

时间:2014-10-20 08:30:47

标签: hbase updates

我有一个用例,我需要检查Hbase Puts是否实际上是在写更改值。

我完成了我的作业并知道checkAndPut方法,但这并没有真正解决问题:

  • 我有一个价值客户端,可能是Hbase中最新值的变化,或者不是
  • 如果不是改变我宁愿不写它
  • 使用checkAndPut,我只能检查客户端值和服务器端值的相等性
  • checkAndPut将执行Put,如果它是真的

我可以想到两种解决方案,两者都不太吸引人:

  1. 从HBase获得最新值(2次往返)后,执行预先检查客户端
  2. 如上所述执行checkAndPut,当它返回false时,重新提交没有checkAndPut的Put(2次往返,再加上所有成功checkAndPut的未更改值的重写)
  3. 有没有办法在比较失败时立即关闭checkAndPut逻辑并立即执行Put?或者甚至是解决这个问题的不同方法?

2 个答案:

答案 0 :(得分:1)

为了仍在寻找的人的利益:HTable#checkAndPut

从Hbase版本生效:0.98.7, 0.99.1

答案 1 :(得分:0)

您可以使用Hbase 1.1.8中引入的新checkandPut

如果您希望仅更新不同的值,则可以使用比较器NOT_EQUAL

public void write(final byte[] row, final byte[] family, final byte[] qualifier, final byte[] value, final Put put) throws IOException {
 CompareFilter.CompareOp compareOp = CompareFilter.CompareOp.NOT_EQUAL;
  this.table.checkAndPut(row,family,qualifier,compareOp,value,put);
}