DynamoDB:仅获取所有唯一哈希键的最新项目
DynamoDB: Getting only most recent items of all unique hash keys
给定一个带有分区键 id
和排序键 date_epoch
的 DynamoDB table。
我会有这样的物品:
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 and this example 所示) , 但似乎必须有更好的方法来做到这一点。
我们可以设置一个扫描过滤器来限制最大项目或其他我没有想到的东西吗?
这与其说是一个答案,不如说是一个评论,但它是这样的:不 - 你无法通过扫描获得你正在寻找的答案。无法制作过滤器,即使有,您仍然需要为扫描支付全额费用(尽管您可以节省网络带宽)。
您的选择是:
使用您正在使用的技术:获取唯一 ID,然后使用限制 1
进行迭代和查询
使用两个表:一个保存历史值,一个保存每个项目的最新值
请注意,在第二个示例中有一些注意事项:您必须容忍最终一致性;并且您不能每秒更新任何项目超过 1000 次(尽管实际限制实际上更低 - 可能是 6-700)
给定一个带有分区键 id
和排序键 date_epoch
的 DynamoDB table。
我会有这样的物品:
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 and this example 所示) , 但似乎必须有更好的方法来做到这一点。
我们可以设置一个扫描过滤器来限制最大项目或其他我没有想到的东西吗?
这与其说是一个答案,不如说是一个评论,但它是这样的:不 - 你无法通过扫描获得你正在寻找的答案。无法制作过滤器,即使有,您仍然需要为扫描支付全额费用(尽管您可以节省网络带宽)。
您的选择是:
使用您正在使用的技术:获取唯一 ID,然后使用限制 1
进行迭代和查询
使用两个表:一个保存历史值,一个保存每个项目的最新值
请注意,在第二个示例中有一些注意事项:您必须容忍最终一致性;并且您不能每秒更新任何项目超过 1000 次(尽管实际限制实际上更低 - 可能是 6-700)