我对如何使用DynamoDB表键感到困惑。文档提到了HASH(它们似乎也被称为分区)键和RANGE(或SORT?)键。我试图将这些与我之前对数据库索引理论的理解大致相符。
我当前的,主要是基于猜测的理解是HASH键本质上是一个主键 - 它必须是唯一的并且自动编入索引以便快速阅读 - 而RANGE键基本上应该适用于任何其他领域计划查询(在WHERE-like或排序上下文中)。
然后,本地和全球二级指数的介绍使这有点混淆。他们如何发挥作用?
如果有人能够朝着正确的方向推动我,请记住我当前的,可能是有缺陷的理解来自文档,我会非常感激。
谢谢!
答案 0 :(得分:3)
基本上,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。