DynamoDB:键及其含义

use*_*745 6 amazon-dynamodb

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

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

这会因引入本地和全局二级索引而有些混乱。他们如何发挥作用?

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

谢谢!

not*_*est 7

基本上,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 示例