Python 3.x 使用boto3从DynamoDB表中获取主键的最大值
我试图使用boto3获取主键的最大值(Python 3.x 使用boto3从DynamoDB表中获取主键的最大值,python-3.x,amazon-web-services,amazon-dynamodb,boto3,Python 3.x,Amazon Web Services,Amazon Dynamodb,Boto3,我试图使用boto3获取主键的最大值(id,在特定情况下) 表结构: |id |名称| |-----|-------| |1 |鲍勃| |4 |爱丽丝| |5 |夏娃| 其中,id是主键(散列键),没有排序键(范围键) 因此,我应该得到5(id的最大值) 我想了想,但没有找到答案 ScanIndexForward表中的属性。scan()方法需要排序键table.query()方法需要条件(例如Key={“name”:“Bob”}) id值不是自动递增的(表中可能缺少id值),这就是解决方案没
id
,在特定情况下)
表结构:
|id |名称|
|-----|-------|
|1 |鲍勃|
|4 |爱丽丝|
|5 |夏娃|
其中,id
是主键(散列键),没有排序键(范围键)
因此,我应该得到5(id的最大值)
我想了想,但没有找到答案
ScanIndexForward
表中的属性。scan()方法需要排序键table.query()
方法需要条件(例如Key={“name”:“Bob”}
)
id
值不是自动递增的(表中可能缺少id
值),这就是解决方案没有帮助的原因
问题:是否可以从没有排序键的表中获取最大的id
?(当然,我不想扫描所有表并使用python查找它。)
谢谢你的阅读 这可能不是您想要听到的,但是您不能直接使用表操作来实现这一点 Dynamo以创建可伸缩系统的名义为您提供了很多约束。其中大部分都围绕着查询选项;提供比传统数据库更多的密钥文档存储 我建议您查看一下您需要访问数据的方式,并在分区/排序/索引的限制下考虑您的模式设计。 对于这种情况(例如,当需要从表中派生属性时),可以使用的架构模式是:
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文档中。(注意:仍然存在一些限制,如果使用此实现删除了两个最大的ID,则可能需要执行扫描
)