gpt4 book ai didi

database-design - Dynamodb 表设计对多个键进行过滤

转载 作者:行者123 更新时间:2023-12-01 19:03:51 26 4
gpt4 key购买 nike

我已阅读 dynamodb best practises我正在尝试设计一个表,允许我以灵活的方式查询它并避免扫描。

这是我能得到的最好的设计:

表:项目
哈希: ClientId#ProjectId
范围:名称
其他属性:

  • 创建时间(时间戳)
  • 标签(TagId1、TagId2、TagId3)
  • 类型

请注意,我将多个值放入范围键的哈希中,并使用“#”作为分隔符,以获得更大的查询能力。
我的实际架构允许我通过以下方式查询表:

  • 获取客户的所有项目(运算符(operator):BEGIN_WITH)
  • 通过知道客户端 ID 的 ID 获取特定项目(运算符(operator):EQ)
  • 按名称对结果排序
  • 根据名称过滤结果

除了已有的过滤功能之外,我还希望允许我的用户根据“标签”属性进行过滤。
我还需要我的用户按 CreationAt 而不是名称进行排序,但仍然能够过滤名称。

这是一个我无法使用以下方案执行的示例查询:

获取给定客户端的所有项目,按“CreationAt”排序,包含特定的“TagId”以及给定名称和类型。

另一个查询,也许更简单,我无法实现:
获取包含给定名称部分子字符串和给定类型的客户端的所有项目。

对我的真实形象有什么评论吗?
如何优化呢?
如何设计我的二级本地索引或自定义索引表才能实现我的要求?
有没有办法重现mysql的“LIKE”比较运算符?

我开始问自己 dynamodb 是否非常适合我的项目。

感谢您的投入。

最佳答案

我认为您混淆了哈希键和范围键。

您应该将 clientId 作为哈希值,将 projectId 作为范围。这将使您能够快速获取客户端的所有项目 (QUERY) 并快速检索项目的行 (GET)。

您想要查询的其余条件对于 DynamoDB 条件可能是合理的,但是 - 如果特定客户的项目数量并不大,那么之后将逻辑移至应用程序层可能会更容易使用QUERY

编辑:

关于复杂查询:使用二级索引,您将无法将查询与条件之间的 AND/OR 组合起来。

关于database-design - Dynamodb 表设计对多个键进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com