在BigTable单元格中保持最小值/最大值

时间:2019-07-18 23:16:20

标签: google-cloud-dataflow apache-beam bigtable google-cloud-bigtable apache-beam-io

我有一个问题,如果我能够向BigTable发送ReadModifyWrite请求,则该问题将非常有帮助,该请求仅在新值大于/小于现有值时才覆盖该值。这可能吗? 注意:我想到了一种不可靠的方式,其中将时间戳记用作我的实际值,并且具有最大数量的版本1,因此可以保留“最新”值,即较高的时间戳记。但这些时间戳记的值将从1到10,而不是15亿。这行得通吗?

我研究了现有的API,但是没有找到任何可以帮助我完成此操作的东西。似乎DynamoDB中提供了它,所以我想要求BigTable也有它https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#API_UpdateItem_RequestSyntax

是合理的

1 个答案:

答案 0 :(得分:3)

您的时间戳方法可能可以起作用,但与基于年龄的垃圾收集之类的东西交互作用较弱。

我还假设您的意思是CheckAndMutate,而不是ReadModifyWrite?前者让您进行条件覆盖,后者让您进行无条件增量/追加。如果您实际上希望增量仅在结果更大时起作用,请确保只发送正增量;)

我的建议(假设您的客户端语言支持)是将CheckAndMutateRow请求与value_range_filter一起使用。这将要求您对值使用固定宽度的编码,但这与重用时间戳没有什么不同。

示例:如果要将值设置为000768,但只有在将其增加的情况下,请使用从000000到000767(含)的value_range_filter,然后在CheckAndMutate的true_mutation中进行写入。 / p>