当前位置: 首页 > 知识库问答 >
问题:

对于既有分区键又有排序键的表,如何最好地仅对主分区键执行查询?

劳宇
2023-03-14

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

共有1个答案

拓拔骁
2023-03-14

您不需要(也不应该)对此执行扫描。

要获取员工正在处理的所有项目,您只需要对基表执行查询,将员工ID指定为分区键。

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

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

  1. 员工表
 类似资料:
  • 我试图查询具有分区键和排序键的表(但是分区键和排序键是1:1,我只想使用分区键[仅返回一项]进行查询)。 这是我尝试过的代码,但没有成功(testId是分区键名,1234567890是字符串形式的分区键值);你们都知道我可以只使用分区键进行查询的方法吗?记住,由于分区键和排序键是1:1,所以只会返回一个项?提前非常感谢您。[这是我的第一篇堆栈溢出帖子-很抱歉,如果我用词不当,我很乐意回答关于我的措

  • 与主键、复合键和候选键相比,dynamodb中的分区键和排序键是什么?

  • 我已经阅读了很多关于设计分区键和排序键的DynamoDB文档,但我认为我一定缺少一些基本的东西。 如果分区密钥设计不好,那么当单个分区密钥值的数据超过10GB时会发生什么情况? “了解分区行为”部分指出: “单个分区可以容纳大约10 GB的数据” 它如何对单个分区键进行分区? http://docs.aws.amazon.com/amazondynamodb/latest/developergui

  • 我正在使用Node。js和DynamoDB JavaScript SDK开发。 我有一个表,它使用“ID”作为分区键(散列键),使用“time”作为排序键(范围键)。我想从多分区密钥中获取最新的N个数据。 我可以使用Query从分区键获取最新的N个数据。 但我不知道如何从多分区密钥中获取最新的N个数据。如果我想从10个分区键获取数据,我应该查询10次吗?

  • 我试图使用batchGetItem从表中返回多个项的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项,该怎么办?唯一的方法是创建不带范围键的表吗? 根据官方留档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html 如果表有一个复合主键(分

  • 假设我有一个名为“student_course”的Dynamo DB表。我想存储每个学生在大学学习的课程。一个学生可以一次学习多个课程,一个课程可以一次有多个学生。所以基本上它是一个多映射。 我的数据访问模式只有一个用例- 一次获取一个学生和一门课程的记录,即获取每个学生ID和CourseId组合的数据。它保证对于学生ID和课程ID组合,只有一条记录可用。 为了实现这一点,我可以通过以下两种方式存