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

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值),这就是解决方案没

我试图使用boto3获取主键的最大值(
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,则可能需要执行
扫描