2014-10-20 71 views
2

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

我做了我的checkAndPut方法的功课,知道,但是这并不能真正解决问题:

  • 我这可能是一个变化中的HBase的最新值,或者不是一个价值客户端
  • 如果不改变,我宁愿把它写在所有
  • 随着checkAndPut我只能检查一个客户端价值的平等和服务器端值
  • checkAndPut将执行认沽如果这是真的

我能想到的2级的解决方案,无论是不是非常有吸引力:

  1. 进行预认沽检查客户端,正从HBase的最新值(2个往返)
  2. 在做checkAndPut为后以上,当它返回false,重新提交认沽没有checkAndPut(2个往返,加上所有非改值的改写成功checkAndPut S)

有没有办法扭转的checkAndPut逻辑和执行只要比较,立即放置n失败?甚至对这个问题采取不同的方法?

回答

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); 
} 
相关问题