首页 > 解决方案 > DynamoDB:仅获取所有唯一哈希键的最新项目

问题描述

给定一个带有分区键id和排序键的 DynamoDB 表date_epoch

我会有这样的物品:

id  |  date_epoch
-----------------
1   |  1535961978
2   |  1535961996
1   |  1535962033
2   |  1535962055
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085

对于每个给定的 unique id,我只想要它的最新项目。所以从这个样本数据中,我只想要以下结果:

id  |  date_epoch
-----------------
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085

我可以用非常难看的代码弄清楚如何做到这一点。我已经获得了每个 unique id,然后遍历每个人id并仅获得最新的项目.withScanIndexForward(false)and .withMaxResultSize(1)(如本示例本示例所示),但似乎必须有更好的方法来做到这一点。

我们可以设置一个扫描过滤器来限制最大项目或其他我没有想到的东西吗?

标签: javaamazon-dynamodbaws-sdkaws-java-sdk

解决方案


这更像是一个评论而不是一个答案,但它是这样的:不 - 您无法通过扫描获得您正在寻找的答案。没有办法制作过滤器,即使有,您仍然需要为扫描支付全价(尽管您会节省网络带宽)。

您的选择是:

  1. 使用您正在使用的技术:获取唯一 ID,然后使用限制 1 进行迭代和查询

  2. 使用两张表:一张保存历史值,一张保存每个项目的最新值

请注意,在第二个示例中,有一些警告:您必须容忍最终的一致性;并且您每秒更新任何项目的次数不得超过 1000 次(尽管实际限制实际上较低 - 可能 6-700 次)


推荐阅读