【问题标题】:Get largest value of primary key from DynamoDB table using boto3使用 boto3 从 DynamoDB 表中获取主键的最大值
【发布时间】:2018-11-03 21:45:29
【问题描述】:

我正在尝试使用 boto3 获取主键的最大值(在特定情况下为 id)。

表结构: | id | name | |-----|-------| | 1 | Bob | | 4 | Alice | | 5 | Eve | 其中id 是主键(哈希键),没有排序键(范围键)。

因此,我应该得到 5(id 最大值)。

我曾想过docs 和这个answer,但没有找到答案。

来自table.scan() 方法的ScanIndexForward 属性需要排序键。 table.query() 方法需要条件(例如Key={"name":"Bob"})。

id 值不是自动递增的(表可能缺少id 值),这就是this 解决方案没有帮助的原因。

问题:是否可以从没有排序键的表中获得最大的id? (当然,我不想扫描all表并使用python找到它。)

感谢阅读!

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-dynamodb boto3


    【解决方案1】:

    这可能不是你想听到的——但你不能直接使用表操作来做到这一点。

    Dynamo 以制作可扩展系统的名义为您提供了很多限制。其中大部分都围绕着您的查询选项;提供比传统数据库 (further discussion about using scan with some, dubious, suggestions) 更多的密钥文档存储。

    我建议您查看访问数据所需的方式,并在分区/排序/索引的限制范围内考虑您的架构设计。

    对于这样的情况(例如,当您需要从表中派生属性时),您可以使用的架构模式是:

    DynamoDB
      -> DynamoDB Streams (shares Create/Update/Delete events)
      -> Lambda checks id against a stored value of 'current max id':
           - if create/update and higher, saves 'current max id' and 'last max id'
           - if delete and equal, replace 'current max id' with 'last max id'
    

    在这种情况下,您可以将生成的最大 id 的“视图”存储在另一个表或版本化的 s3 文档中。 (n.b. 仍有一些限制,如果使用此实现删除了两个最大的 id,您可能需要执行 scan)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多