Database design Dynamodb表设计多键过滤

Database design Dynamodb表设计多键过滤,database-design,amazon-dynamodb,Database Design,Amazon Dynamodb,我已经阅读了,我正在尝试设计一个表,允许我以灵活的方式查询它,并避免扫描 以下是我能得到的最佳设计: 表格:项目 散列:ClientId#ProjectId 范围:名称 其他属性: CreatedAt(时间戳) 标签(TagId1、TagId2、TagId3) 类型 请注意,我将多个值放入范围键的散列中,并使用“#”作为分隔符,以便具有更大的查询功能。 我的实际模式允许我通过以下方式查询表: 获取客户机的所有项目(操作员:开始) 通过知道客户id的id获取特定项目(操作员:EQ) 按名称对

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

以下是我能得到的最佳设计:

表格:项目
散列:ClientId#ProjectId
范围:名称
其他属性:

  • CreatedAt(时间戳)
  • 标签(TagId1、TagId2、TagId3)
  • 类型
请注意,我将多个值放入范围键的散列中,并使用“#”作为分隔符,以便具有更大的查询功能。
我的实际模式允许我通过以下方式查询表:

  • 获取客户机的所有项目(操作员:开始)
  • 通过知道客户id的id获取特定项目(操作员:EQ)
  • 按名称对结果排序
  • 筛选名称上的结果
我想允许我的用户在已经可用的过滤器之外,还可以对“标签”属性进行过滤。
我还需要我的用户通过CreationAt而不是名称进行订购,但仍然能够根据名称进行筛选

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

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

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

对我的实际情况有什么评论吗
如何优化它
如何设计辅助本地索引或自定义索引表以实现我的请求
有没有办法重现mysql的“LIKE”比较运算符

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


谢谢您的输入。

我认为您混淆了散列键和范围键

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

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

编辑:

关于复杂查询:使用二级索引,您将无法将查询与条件和/或条件之间进行组合