我对如何使用 DynamoDB 表键感到困惑。该文档提到了 HASH(似乎也称为 Partition)键和 RANGE(或 SORT?)键。我试图将这些与我之前对数据库索引理论的理解大致保持一致。
我目前的主要基于猜测的理解是,HASH 键本质上是一个主键——它必须是唯一的,并且会自动编入索引以便快速阅读——而 RANGE 键基本上是你应该应用于你计划查询的任何其他字段的东西on(在类似 WHERE 的上下文或排序上下文中)。
这会因引入本地和全局二级索引而有些混乱。他们如何发挥作用?
如果有人能将我推向正确的方向,请记住我目前可能有缺陷的理解来自文档,我将不胜感激。
谢谢!
基本上,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。
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |