如何为DynamoDB查询选择分区键?

时间:2018-04-21 18:48:40

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

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

Itemid,
ItemName,
ItemDescription,
CreatedDate,
UpdatedDate

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

问题1

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

问题2

有没有人遇到类似的情况?为解决这个问题做了什么?

注意:我几乎是DynamoDB,NoSQL和Boto

的新手

1 个答案:

答案 0 :(得分:1)

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

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

了解GSI的主键(因为ShardId值来自CreatedDate),您可以在表格中查询查询限制的100个最新项目参数(或 LastEvaluatedKey ,如果您的项目设置大小超过1 MB数据)。

请参阅Using Global Secondary Index Write Sharding for Selective Table Queries