【问题标题】:Dynamodb Table design filtering on multiple keysDynamodb 表设计过滤多个键
【发布时间】:2013-12-01 13:47:08
【问题描述】:

我已经阅读了dynamodb best practises,我正在尝试设计一个表格,让我可以灵活地查询它并避免扫描。

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

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

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

请注意,我将多个值放入范围键中的散列中,并以“#”作为分隔符,以便具有更大的查询功能。
我的实际架构允许我通过以下方式查询表:

  • 获取一个客户的所有项目(运营商:BEGIN_WITH)
  • 通过知道客户ID(操作员:EQ)的ID获取特定项目
  • 按名称排序结果
  • 按名称过滤结果

我想让我的用户除了已经可用的过滤器之外,还可以过滤“标签”属性。
我还需要我的用户通过 CreationAt 而不是名称来订购,但仍然能够过滤名称。

以下是我无法使用以下方案的示例查询:

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

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

我的实际sheme上有任何cmets吗?
如何优化它?
如何设计我的二级本地索引或自定义索引表以实现我的要求?
有没有办法重现mysql的“LIKE”比较运算符?

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

感谢您的意见。

【问题讨论】:

    标签: database-design amazon-dynamodb


    【解决方案1】:

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

    您应该将 clientId 作为散列,将 projectId 作为范围。 这将允许您快速获取一个客户(QUERY)的所有项目和一个项目(GET)的快速行检索。

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

    编辑:

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

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多