Amazon web services 如何查询:筛选多个主分区键和主排序键的范围

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(

背景 我有一个dynamoDB表,由一个主分区键
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
      ,那么我就不可能进行批处理获取…您是对的。我已经修复了我的答案。因此,看起来您被查询卡住了。