对于同时具有分区键和排序键的表,如何最好地仅对主分区键执行查询?

时间:2019-01-10 08:10:23

标签: amazon-dynamodb graphql aws-appsync

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  1. 员工表
  2. 项目表
  3. Employee-Project参考表(即员工ID和项目ID的两个属性)