Amazon web services 如何查询:筛选多个主分区键和主排序键的范围
背景 我有一个dynamoDB表,由一个主分区键Amazon web services 如何查询:筛选多个主分区键和主排序键的范围,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,背景 我有一个dynamoDB表,由一个主分区键clientID(“N”)和一个主排序键createdAt(“S”)(如UTC ISO 8601日期)+一些附加属性组成 问题 我想往回查询createdAt位于两个日期之间的所有项目,一次只查询大约100个特定的clientIDs 死胡同1:首先我考虑使用,但是尽管我知道我要查询的clientIDs,但我无法指定排序键,因为我正在查找在某个时间范围内发生的任何事情 死胡同2:第二,我考虑使用,但是其中一个不允许我同时查找多个clientIDs(
clientID
(“N”)和一个主排序键createdAt
(“S”)(如UTC ISO 8601日期)+一些附加属性组成
问题
我想往回查询createdAt位于两个日期之间的所有项目,一次只查询大约100个特定的clientID
s
- 死胡同1:首先我考虑使用,但是尽管我知道我要查询的
clientID
s,但我无法指定排序键,因为我正在查找在某个时间范围内发生的任何事情李>
- 死胡同2:第二,我考虑使用,但是其中一个不允许我同时查找多个
clientID
s(查看“in”操作符)。换句话说,我如何实现这一点,而不必对时间范围内的每个ClientID
进行Query
您提到的两个选项实际上是您仅有的选项
- 选项1:对所需的
clientID
使用BatchGetItem,然后在createdAt
上执行应用程序端筛选
- 选项2:为每个
clientID
和createdAt
范围触发1个查询,然后在应用程序端合并数据
根据您的访问模式、表结构和成本因素,您需要从这两个选项中选择一个
例如,如果每个
clientID
的createdAt
平均数量不高,那么选项1就足够了,因为它在读取容量单位上也很节省
编辑:正如Niels在这个答案的评论中指出的,选项1在这个特定场景中不起作用,因为BatchGetItem需要分区键和排序键。我最后做了一些其他事情:
我在index\u date
上添加了一个新属性,它只保存在创建的日期部分(而不是时间)。然后,我在这个属性上添加了一个新的二级全局索引,并在
处创建了作为排序键。通过这种方式,我可以一次高效地查询一天(如果我愿意的话,在特定的时间范围内)的所有项目。然后再处理它们。嗯,我看不出选项一是如何工作的。文件中说:“键-定义表中特定项的主键属性值数组。对于每个主键,必须提供所有键属性。例如,对于一个简单的主键,您只需要提供分区键值。对于复合键,您必须同时提供分区键值和排序键值。”因此,在我的情况下,如果我事先不知道createdAt
,那么我就不可能进行批处理获取…您是对的。我已经修复了我的答案。因此,看起来您被查询卡住了。