【问题标题】:DynamoDB: Getting only most recent items of all unique hash keysDynamoDB:仅获取所有唯一哈希键的最新项目
【发布时间】:2018-09-03 08:20:08
【问题描述】:

给定一个带有分区键 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 examplethis example所示),但它似乎在那里必须是更好的方法来做到这一点。

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

【问题讨论】:

    标签: java amazon-dynamodb aws-sdk aws-java-sdk


    【解决方案1】:

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

    您的选择是:

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

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

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

    【讨论】:

    • 欣赏坦率,很高兴我的解决方案中没有忽略某些内容
    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多