Hbase仅在更改时更新

Hbase仅在更改时更新,hbase,updates,Hbase,Updates,我有一个用例,需要检查Hbase put是否实际写入了更改的值 我做了家庭作业,知道checkAndPut方法,但这并不能真正解决问题: 我在客户端得到了一个值,它可能是对Hbase中最新值的更改,也可能不是 如果这不是一个改变,我宁愿不写它 使用checkAndPut,我只能检查客户端值和服务器端值是否相等 如果为true,则checkAndPut将执行Put 我可以想出两种解决方案,都不是很吸引人: 从HBase获取最新值后,在客户端执行预输入检查(2次往返) 如上所述执行checkAn

我有一个用例,需要检查Hbase put是否实际写入了更改的值

我做了家庭作业,知道checkAndPut方法,但这并不能真正解决问题:

  • 我在客户端得到了一个值,它可能是对Hbase中最新值的更改,也可能不是
  • 如果这不是一个改变,我宁愿不写它
  • 使用checkAndPut,我只能检查客户端值和服务器端值是否相等
  • 如果为true,则checkAndPut将执行Put
我可以想出两种解决方案,都不是很吸引人:

  • 从HBase获取最新值后,在客户端执行预输入检查(2次往返)
  • 如上所述执行checkAndPut,当返回false时,重新提交Put而不使用checkAndPut(2次往返,加上对所有成功的checkAndPut重写未更改的值)

  • 有没有办法扭转checkAndPut逻辑,只有在比较失败时才立即执行Put?或者甚至是一种不同的方法来解决这个问题?

    对于仍在寻找的人来说:


    从Hbase版本开始生效:
    0.98.7、0.99.1

    您可以使用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);
    }