数据库设计 – Dynamodb表设计过滤多个键

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

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

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

> CreatedAt(时间戳)
>标签(TagId1,TagId2,TagId3)
>类型

请注意,我在范围键中使用哈希值放置多个值,并使用“#”作为分隔符,以便具有更大的查询功能.
我的实际架构允许我通过以下方式查询表:

>获取客户的所有项目(操作符:BEGIN_WITH)
>通过其知道客户端ID(操作符:EQ)的ID获取特定项目
>按名称排序结果
>在名称上过滤结果

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

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

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

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

对我的实际上的任何评论?
如何优化呢?
如何设计我的辅助本地索引或自定义索引表以便能够实现我的请求?
有没有办法重现mysql的“LIKE”比较运算符?

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

感谢您的投入.

最佳答案 我认为你混淆了哈希和范围键.

您应该将clientId作为哈希,将projectId作为范围.
这将允许您快速获取客户端的所有项目(QUERY)和项目的快速行检索(GET).

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

编辑:

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

点赞