给出一个带有分区键id
和排序键date_epoch
的DynamoDB表。
我将有这样的物品:
id | date_epoch
-----------------
1 | 1535961978
2 | 1535961996
1 | 1535962033
2 | 1535962055
3 | 1535962064
5 | 1535962073
1 | 1535962080
2 | 1535962085
对于每个给定的唯一id
,我只想要它的最新项目。因此,从此示例数据中,我只想要以下结果:
id | date_epoch
-----------------
3 | 1535962064
5 | 1535962073
1 | 1535962080
2 | 1535962085
我可以弄清楚如何用非常丑陋的代码来做到这一点。我获得了每个唯一的id
,然后遍历每个单独的id
,并且仅获得了最新的项目.withScanIndexForward(false)
和.withMaxResultSize(1)
(如this example和this example),但似乎必须有一种更好的方法。
我们可以设置扫描过滤器以限制最大项目或其他我没有想到的项目吗?
答案 0 :(得分:1)
这不是评论,而是答案,但事实是:不-您无法通过扫描获得所需的答案。没有办法制作过滤器,即使有过滤器,您仍然要为扫描的全部价格付费(尽管您可以节省网络带宽)。
您的选择是:
使用您正在使用的技术:获取唯一的ID,然后以限制1进行迭代和查询
使用两个表:一个用于保存历史值,一个用于保存每个项目的最新值
请注意,在第二个示例中,有一些警告:您必须容忍最终的一致性;而且您每秒更新任何项目的次数都不能超过1000次(尽管实际的限制实际上更低-可能是6-700)