我已阅读dynamodb best practises,我正在尝试设计一个表,允许我以灵活的方式查询它并避免扫描。
这是我能得到的最佳设计:
表:项目
哈希: ClientId #ProjectId
范围:名称
其他属性:
请注意,我在范围键中将多个值放在哈希中,并使用“#”作为分隔符,以便具有更大的查询功能。
我的实际架构允许我以下列方式查询表:
除了已有的过滤功能外,我还希望我的用户也可以过滤“tags”属性 我还需要我的用户通过CreationAt而不是名称订购,但仍然可以过滤名称。
以下是我无法使用以下方案进行的示例查询:
获取给定客户的所有项目,按“CreationAt”排序,包含特定的“TagId”,以及给定的名称和类型。
我无法实现的另一个问题,可能更简单:
获取包含名称部分和给定类型的给定子字符串的客户端的所有项目。
对我的实际情况有何评论?
如何优化呢?
如何设计我的辅助本地索引或自定义索引表以便能够实现我的请求?
有没有办法重现mysql的“LIKE”比较运算符?
我开始问自己,dynamodb是否适合我的项目。
感谢您的投入。
答案 0 :(得分:2)
我认为你混淆了哈希和范围键。
您应该将clientId作为哈希,将projectId作为范围。
这将允许您快速获取客户端的所有项目(QUERY
)和项目的快速行检索(GET
)。
您想要查询的其余条件在DynamoDB条件下可能是合理的,但是 - 如果特定客户端的项目数量不大,则可能更容易将逻辑移动到应用程序层之后使用QUERY
。
编辑:
关于复杂查询:使用辅助索引,您将无法在条件之间将查询与AND / OR组合。