checkAndPut 总是成功
checkAndPut always succeeds
我在 bigtable 中保留了一个计数器,并希望在计数器达到 X 时放入一些数据。我目前是这样做的:
Put put = new Put(EXAMPLE_ROW_KEY);
put.addColumn(EXAMPLE_COLUMN_FAMILY, NEW_QUALIFIER, NEW_VALUE);
boolean success = table.checkAndPut(EXAMPLE_ROW_KEY,
INFO_COLUMN_FAMILY_NAME,
SIZE_COLUMN,
CompareFilter.CompareOp.LESS,
Bytes.toBytes(10000L), put);
问题是,即使大小超过 10000L,成功总是正确的,并且总是放入新值。我尝试将 CompareFilter.CompareOp.GREATER_OR_EQUAL
与完全相同的值一起使用,结果仍然如此。
是bigtable不支持checkAndPut,还是我做错了什么?
我们支持 Cloud Bigtable 中的 table.checkAndPut 操作。
但是一般来说,尝试以这种方式使用 CompareFilter 并不是一个好的做法,因为它是对字节执行词法比较,而不是逻辑整数比较。
有关更多信息和上下文,请参阅:
- How to use filters over atomic counter in hbase
- Simple integer comparison in HBase
- HBase "between" Filters
- http://apache-hbase.679495.n3.nabble.com/Filters-failing-to-compare-negative-numbers-int-float-double-or-long-td4057268.html
至于主要的 HBase API,有计划在未来的 HBase 版本中更好地处理这个问题,例如在提议的 HBase 2.0 中,它结合了受有序项目启发的新 OrderedBytes 数据类型:
- https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
- https://github.com/ndimiduk/orderly
与此同时,您也许能够以某种方式有序合并,或者使用 HBase 计数器和增量操作。
问题是,我正在使用依赖项 bigtable-hbase-1.2:0.9.6.2
,它可能与另一个依赖项发生冲突。我认为,这导致了不正确的 CheckAndMutateRequest
被静默发送,并且 checkAndPut
中的检查始终通过。我切换到 bigtable-hbase-1.2:0.9.2
,一切都被正确评估。
我在 bigtable 中保留了一个计数器,并希望在计数器达到 X 时放入一些数据。我目前是这样做的:
Put put = new Put(EXAMPLE_ROW_KEY);
put.addColumn(EXAMPLE_COLUMN_FAMILY, NEW_QUALIFIER, NEW_VALUE);
boolean success = table.checkAndPut(EXAMPLE_ROW_KEY,
INFO_COLUMN_FAMILY_NAME,
SIZE_COLUMN,
CompareFilter.CompareOp.LESS,
Bytes.toBytes(10000L), put);
问题是,即使大小超过 10000L,成功总是正确的,并且总是放入新值。我尝试将 CompareFilter.CompareOp.GREATER_OR_EQUAL
与完全相同的值一起使用,结果仍然如此。
是bigtable不支持checkAndPut,还是我做错了什么?
我们支持 Cloud Bigtable 中的 table.checkAndPut 操作。
但是一般来说,尝试以这种方式使用 CompareFilter 并不是一个好的做法,因为它是对字节执行词法比较,而不是逻辑整数比较。
有关更多信息和上下文,请参阅:
- How to use filters over atomic counter in hbase
- Simple integer comparison in HBase
- HBase "between" Filters
- http://apache-hbase.679495.n3.nabble.com/Filters-failing-to-compare-negative-numbers-int-float-double-or-long-td4057268.html
至于主要的 HBase API,有计划在未来的 HBase 版本中更好地处理这个问题,例如在提议的 HBase 2.0 中,它结合了受有序项目启发的新 OrderedBytes 数据类型:
- https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
- https://github.com/ndimiduk/orderly
与此同时,您也许能够以某种方式有序合并,或者使用 HBase 计数器和增量操作。
问题是,我正在使用依赖项 bigtable-hbase-1.2:0.9.6.2
,它可能与另一个依赖项发生冲突。我认为,这导致了不正确的 CheckAndMutateRequest
被静默发送,并且 checkAndPut
中的检查始终通过。我切换到 bigtable-hbase-1.2:0.9.2
,一切都被正确评估。