gpt4 book ai didi

amazon-dynamodb - DynamoDB 查询性能 - 唯一分区键与唯一分区+排序键

转载 作者:行者123 更新时间:2023-12-04 12:29:46 24 4
gpt4 key购买 nike

假设我有一个名为“student_course”的 Dynamo DB 表。我想存储每个学生在大学学习的类(class)。一名学生一次可以参加多门类(class),一门类(class)一次可以有多名学生参加。所以基本上它是一个多映射。
我的数据访问模式只有一个用例 -

  • 一次获取一名学生和一门类(class)的记录,即获取每个 StudentId 和 CourseId 组合的数据。可以保证对于学生 ID 和类(class) ID 组合,只有一个记录可用。

  • 为了实现这一点,我可以通过这两种方式存储数据 -
  • 分区键 = {student-id},排序键 = {course-id}
  • Partition-key = "studentId:{student-id}_courseId:{course-id}", sort-key 不存在

  • 我的问题是 - 哪个查询会表现得更好,如果有任何区别,那就是?我应该选择哪个而不是另一个,为什么?

    最佳答案

    在设计方面DDB性能,Get API是 DDB 毫秒级数据检索能力的关键,因此围绕此 API 设计数据是合乎逻辑的
    带有分区键 + 排序键的表

    Partition Key | Sort Key    
    --------------+-------------
    Course1 | Student1
    Course1 | Student2
    优势:
  • 可以使用Get API通过 Partition Key 获得单条记录和 Sort Key例如获取分区键 = "Course1"和排序键 = "Student1"的单条记录
  • 可以使用Get API仅通过 Partition Key 获取记录列表例如获取 Partition Key = "Course1"
  • 的所有记录

    坏处:
  • 如果您只知道 Sort Key (即学生)而不是 Partition Key (即类(class)),您将无法使用 Get API仅通过 Sort Key 检索记录

  • 注意:一般来说,DDB ReadThroughput 的效率(这样查询不会轻易命中 Get API 异常“Roof”)查询与 Partition Key 的唯一性和分布相当相关。 .您拥有和分散的分区键越多,性能就越好
    仅带分区键的表
    Partition Key Only   
    --------------------
    Course1#Student1
    Course1#Student2
    优势:
  • 可以使用Get API通过 Partition Key 获得单条记录例如获取 Partition Key = "Course1#Student1"的单条记录

  • 坏处:
  • 将无法使用Get API仅使用 Partition key 的子集获取记录列表例如获取 Partition Key = "Course1"
  • 的记录列表

    关于 GSI
    注意:添加 是一个常见的场景全局二级指数在表支持 Get API使用备用键调用,例如获取记录列表,其中 GSI Partition Key = 类(class)名称
    Partition Key Only   | Non Key Attribute (Course) For GSI
    ---------------------+---------------------------
    Course1#Student1 | Course1
    Course1#Student2 | Course1
    您最多可以拥有 20 个 GSI索引(软限制),可选择通过支持请求删除此限制
    Partition Key Only   | Non Key Attribute (Course) For GSI | Lecturer (For GSI 2)
    ---------------------+------------------------------------+---------------------
    Course1#Student1 | Course1 | Lecturer1
    Course1#Student2 | Course1 | Lecturer1
    结论
    我会设计一个表来拥有尽可能多的 唯一 Partition Keys 的值如果性能是关键,即分区键 = Course1#Student1 VS 分区键 = Course1,排序键 = Student1,则尽可能
    添加 GSIs如果您需要通过备用键查询,则按需添加到表
    (历史上 GSIs 被限制为每个表 5 个,并且必须在表创建期间指定,但这些限制已被取消)

    关于amazon-dynamodb - DynamoDB 查询性能 - 唯一分区键与唯一分区+排序键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66419067/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com