【问题标题】:DynamoDB: Keys and what they meanDynamoDB:键及其含义
【发布时间】:2017-09-04 21:48:00
【问题描述】:

我对如何使用 DynamoDB 表键感到困惑。该文档提到了 HASH(似乎也称为分区)键和 RANGE(或 SORT?)键。我试图将这些与我之前对数据库索引理论的理解大致对齐。

我目前主要基于猜测的理解是,HASH 键本质上是一个主键 - 它必须是唯一的,并且会自动编制索引以便快速阅读 - 并且 RANGE 键基本上是你应该应用于任何其他领域的东西计划查询(在 WHERE 类或排序上下文中)。

本地和全球二级索引的引入使这有些混乱。他们是如何参与其中的?

如果有人能将我推向正确的方向,请记住我目前可能有缺陷的理解来自文档,我将非常感激。

谢谢!

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    基本上,DynamoDB 表是根据分区键(也称为哈希键)进行分区的。

    1) 如果表只有分区键,那么它必须是唯一的。 DynamoDB 表的性能几乎基于分区键。好的分区键应该是一个分散良好的值(不应该像旧系统中的 RDBMS 主键那样有一个序列号作为分区键)。

    2) 如果表同时具有分区键和排序键(也称为 RANGE 键),那么它们的组合需要是唯一的。它是 RDBMS 术语中的一种连接键。

    但是,DynamoDB 表中的用法有所不同。 DynamoDB 没有跨分区键的排序功能(即 ORDER BY 子句)。例如,如果您有 10 个具有相同分区键值和不同排序键值的项目,那么您可以根据排序键属性对结果进行排序。您不能对包括分区键在内的任何其他属性应用排序。

    一个分区键的所有排序键值都将保存在同一个分区中以获得更好的性能(即物理上位于同一位置)。

    LSI - 表只能有一个 LSI。它应该在创建表时定义。这是表格的一种备用排序键

    GSI - 要了解 GSI,您需要了解 DynamoDB 中 SCAN 和 QUERY API 之间的区别。

    SCAN - 当您不知道分区键时使用(即全表扫描以获取项目)

    QUERY - 当您知道分区键时使用(即排序键是可选的)

    由于 DynamoDB 成本计算基于读/写容量单位,为了获得更好的性能,对于大多数用例而言,扫描不是最佳选择。因此,可以选择使用基于查询访问模式 (QAP) 的备用分区键创建 GSI。

    GSI Example

    【讨论】:

    • 关于“好的分区键应该是一个分散良好的值”,我认为这不是真的。我认为这部分密钥称为 hash 密钥,因为它实际上用作哈希表中的密钥 - 即,哈希函数在密钥上运行,而这个哈希函数 - 不是密钥本身 - 确定项目的位置。因为这个哈希函数,当你扫描所有的项目时,它们不是按哈希键排序的,而是按照哈希函数确定的看似随机的顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2022-01-12
    • 2015-07-20
    • 2011-03-10
    • 2016-05-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多