amazon-web-services - 如何为 DynamoDB 查询选择分区键?

标签 amazon-web-services flask amazon-dynamodb boto3

我创建了一个名为“sample”的发电机数据库表。它有以下几列。 CreatedDate 将具有插入到该表中的任何记录的创建时间。

Itemid,
ItemName,
ItemDescription,
CreatedDate,
UpdatedDate

我正在创建一个基于 python-flask 的 rest api,它总是获取插入到该表中的最后 100 条记录。此 API(python-flask 函数)没有任何输入参数。它应该只返回插入到该表中的最后记录。

问题一

这个表的分区键应该是什么?我正在使用 boto3 库从 DynamoDB 中获取记录。我不想做扫描操作,因为它可能会导致性能问题。如果我使用查询功能,它会要求提供分区键。由于此 rest API 不接受任何输入,我不确定如何使用它。

问题二

有人遇到过类似情况吗?采取了什么措施来解决这个问题?

注意:我是 DynamoDB、NoSQL 和 Boto 的新手

最佳答案

要在不知道 ItemId 的情况下使用 CreatedDate 查询您的表,您可以通过添加属性(例如,ShardId)来使用 Global Secondary Index 写入分片>) 包含您将用于全局二级索引分区键的每个项目的 (0-N) 值。

根据您的项目根据 CreatedDate 的分布方式,您可以设置 ShardId 以便它可能具有均匀分布的访问模式。例如:YYYYYYYYMMYYYYMMDD。然后,您创建一个全局二级索引,使用 ShardId 作为索引分区键,使用 CreatedDate 作为索引排序键。

了解 GSI 的主键(因为 ShardId 值派生自 CreatedDate),您可以使用查询的 查询表中最近的 100 个项目>Limit 参数(或 LastEvaluatedKey 如果您的项目集大小大于 1 MB 的数据)。

参见 Using Global Secondary Index Write Sharding for Selective Table Queries .

关于amazon-web-services - 如何为 DynamoDB 查询选择分区键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959141/

相关文章:

python - 布局中的 Flask css 未加载

python - 如何删除类似的 alembic 版本?

javascript - 将 Dynamo DB 流数据解码为 Json 格式

amazon-dynamodb - 未找到 AWS X-Ray AmazonDynamoDBv2 段

amazon-dynamodb - 我们可以避免在 dynamodb 中扫描吗

amazon-web-services - AWS Cognito : Best practice to handle same user (with same email address) signing in from different identity providers (Google, Facebook)

image - AWS API Gateway 从 base64 浏览器错误返回二进制文件

amazon-web-services - 如何使 AWS 上的 redis 实例可以从 VPC 外部访问

amazon-web-services - AWS 多区域 Web 应用程序

python - 我可以跨 Flask 请求保持一个 http 连接(或其他数据)吗?