【发布时间】: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 个属性进行查询,而不仅仅是日期。
所以,我想要一个允许我通过所有可能的过滤组合进行查询的解决方案:type、category、date between、type + category、type + date between、category + 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