2014-10-20 72 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); 
} 
相關問題