什么是哈希和范围主键?

我无法理解什么是范围主键在这里 –

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

它是如何工作的?

它们是什么意思 – “散列属性上的无序散列索引和范围属性上的sorting范围索引”?

散列和范围主键 ”意味着DynamoDB中的单个行具有由散列范围键组成的唯一主键。 例如,使用X的散列键和Y的范围键,您的主键实际上是XY 。 您也可以有多个范围键为相同的散列键,但组合必须是唯一的,如XZXA 。 让我们用他们的例子来说明每种types的表格:

哈希主键 – 主键由一个哈希属性构成。 例如,ProductCatalog表可以将ProductID作为其主键。 DynamoDB在此主键属性上构build无序散列索引。

这意味着每一行都被键入这个值。 DynamoDB中的每一行都将具有此属性所需的唯一值 。 无序散列索引意味着什么 – 数据不是有序的,数据如何存储也没有任何保证。 您将无法对无序索引进行查询,例如Get me所有具有大于X的ProductID的行 。 您可以根据散列键写入和获取项目。 例如, 获取具有ProductID X的表中的行 。 你正在对一个无序索引进行查询,所以你对它的反击基本上是键值查找,非常快,并且使用的吞吐量非常小。


散列和范围主键 – 主键由两个属性组成。 第一个属性是散列属性,第二个属性是范围属性。 例如,论坛Thread表可以以ForumName和Subject作为主键,其中ForumName是哈希属性,Subject是范围属性。 DynamoDB在散列属性上构build无序散列索引,并在范围属性上构buildsorting范围索引。

这意味着每一行的主键都是散列键和范围键组合 。 如果同时具有散列键和范围键,则可以直接获取单个行,也可以对已sorting的范围索引进行查询。 例如, 使用哈希键X获取我所有行的所有行,这些键的范围键大于Y或其他查询。 与扫描和查询相比,它们对未编制索引的字段具有更好的性能和更less的容量使用。 从他们的文档 :

查询结果总是按范围键sorting。 如果范围键的数据types是数字,则结果按数字顺序返回; 否则,结果将以ASCII字符代码值的顺序返回。 默认情况下,sorting顺序是升序。 要颠倒顺序,请将ScanIndexForward参数设置为false

当我input这些信息时,我可能错过了一些东西,而我只是抓住了表面。 使用DynamoDB表时 (处理量,一致性,容量,其他索引,密钥分配等) 需要考虑更多方面 。 你应该看看示例表和数据页面的例子。

@vnr通过使用分区键查询,您可以检索与分区键相关联的所有sorting键。 不需要扫描。 这里的要点是分区键在查询中是强制的。 Sort键仅用于获取数据范围