我创建了一个名为“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
以便它可能具有均匀分布的访问模式。例如:YYYY
、YYYYMM
或 YYYYMMDD
。然后,您创建一个全局二级索引,使用 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/