gpt4 book ai didi

python-3.x - 使用 boto3 从 DynamoDB 表中获取主键的最大值

转载 作者:行者123 更新时间:2023-12-04 13:02:19 25 4
gpt4 key购买 nike

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

表结构:
| id | name |
|-----|-------|
| 1 | Bob |
| 4 | Alice |
| 5 | Eve |
哪里id是主键(散列键),没有排序键(范围键)。

结果,我应该得到 5(id 最大值)。

我看了想docs而这个 answer但没有找到答案。
ScanIndexForward属性来自 table.scan()方法需要排序键。 table.query()方法需要条件(例如 Key={"name":"Bob"} )。
id值不是自动递增的(表可能缺少 id 值)这就是为什么 this解决方案没有帮助。

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

谢谢阅读!

最佳答案

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

Dynamo 以构建可扩展系统的名义为您提供了很多限制。其中大部分都围绕着您的查询选项;提供比传统数据库更多的 key 文档存储(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 的结果“ View ”存储在另一个表或版本化的 s3 文档中。 (n.b. 仍然存在一些限制,如果使用此实现删除了两个最大的 ID,您可能需要执行 scan)。

关于python-3.x - 使用 boto3 从 DynamoDB 表中获取主键的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com