【问题标题】:How to query DynamoDB by string between + other keys如何通过+其他键之间的字符串查询DynamoDB
【发布时间】:2020-08-20 02:06:32
【问题描述】:

我正在尝试设计一个满足以下条件的 DynamoDB 查询:

get items by type, category, and date between(date_1, date_2)

我已经将这些属性存储在全局二级索引中:

  • 类型(字符串)
  • 类别(字符串)
  • 日期(字符串)

我知道我可以使用between 运算符按给定的日期字符串进行查询:

gsi_1_pk = 'products' and gsi_1_sk between '2019-01-01T00:00:00.000Z' and '2019-01-01T00:00:00.000Z'

但在某些情况下,我想通过 3 个属性进行查询,而不仅仅是日期。

所以,我想要一个允许我通过所有可能的过滤组合进行查询的解决方案:typecategorydate betweentype + categorytype + date betweencategory + date betweentype + category + date between

如何将此between 操作与 GSI 中的其他属性结合起来?

【问题讨论】:

  • 客户是否总是按类型或类别搜索,或者他们可以在不指定任何一个的情况下搜索产品?您是否需要支持“按日期获取所有产品”访问模式?
  • 如果您想要类型和类别均为已知值且日期在特定范围内的项目,则使用 pk=type+category 和 sk=date 创建一个 GSI。
  • @jarmod 我还需要能够按“类型+日期”或“类别+数据”进行查询。只有当我总是需要使用“类型 + 类别”时,你的建议才合适。我会将这个添加到问题中,谢谢。
  • 您可以对类型/日期、类别/日期和类型+类别/日期查询使用 3x GSI。
  • 可能是一个不受欢迎的答案,但也许 DynamoDB 不是这项工作的正确工具,您应该使用 RDS 数据库。您仍然可以使用 Aurora 进行无服务器 RDS。

标签: amazon-web-services nosql amazon-dynamodb dynamodb-queries


【解决方案1】:

我最终创建了一个新的全局二级索引,将date 单独存储在排序键中,这使我可以毫无问题地使用between Dynamo 操作。

缺点是我必须为这样一个简单的查询创建一个新的 GSI。但正如许多人所说,DynamoDB 似乎不是这项工作的“正确/最佳”工具。

【讨论】:

  • 我很好奇单个 GSI 将如何支持您描述的所有 7 种访问模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多