【问题标题】:How best to perform a query on primary partition key only, for a table which has both partition key and sort key?对于同时具有分区键和排序键的表,如何最好地仅对主分区键执行查询?
【发布时间】:2019-06-05 01:32:33
【问题描述】:

好的,我有一个带有主分区键(员工 ID)和排序键(项目 ID)的表。现在我想要一份员工从事的所有项目的清单。我还想要一个项目中所有员工的列表。这种关系是多对多的。我在 AppSync (GraphQL) 中创建了架构。 Appsync 为类型 (EmployeeProjects) 创建了所需的查询和突变。现在 ListEmployeeProjects 采用具有不同属性的过滤器输入。我的问题是,当我只对员工 ID 或项目 ID 进行两次搜索时,它会是完整的表扫描吗?这将是多么有效。如果是表扫描,是否可以通过创建索引(GSI 或 LSI)来降低时间复杂度。最终产品将拥有大量数据,因此我无法事先使用这些数据测试应用程序。我的项目运行良好,但我担心以后有大量数据可能会出现问题。有人可以帮忙吗?

【问题讨论】:

    标签: amazon-dynamodb graphql aws-appsync


    【解决方案1】:

    您不需要(也不应该)为此执行Scan

    要获取员工正在从事的所有项目,您只需在基表上执行Query,将员工 ID 指定为分区键。

    要让所有员工参与一个项目,您应该在表格上创建一个 GSI。分区键应该是项目 ID,排序键应该是员工 ID。然后使用项目 ID 的分区键对 GSI 执行查询。

    为了正确建模,您可能需要三个表

    1. 员工表
    2. 项目表
    3. Employee-Project 引用表(即只有员工 ID 和项目 ID 两个属性)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多