Hash 什么是散列和范围主键?
我无法理解上的文档中的范围/主键 它是如何工作的 “散列属性上的无序散列索引和范围属性上的排序范围索引”是什么意思?“散列和范围主键”表示DynamoDB中的一行具有唯一的主键,主键由散列和范围主键组成。例如,如果散列键为X,范围键为Y,则主键实际上是XY。同样的散列键也可以有多个范围键,但组合必须是唯一的,如XZ和XA。让我们对每种类型的表使用它们的示例: 散列主键–主键由一个属性(散列)组成 属性例如,ProductCatalog表可以将ProductID设置为 它的主键。DynamoDB在此基础上构建无序散列索引 主键属性 这意味着每一行都被设置为该值的关键帧DynamoDB中的每一行都有一个该属性所需的唯一值。无序散列索引意味着所说的内容——数据没有排序,也没有任何关于数据存储方式的保证您将无法对无序索引进行查询,例如获取ProductID大于X的所有行。您可以根据哈希键写入和获取项目。例如,从该表中获取ProductID为X的行。您正在对无序索引进行查询,因此对它的查询基本上是键值查找,速度非常快,使用的吞吐量非常小Hash 什么是散列和范围主键?,hash,amazon-dynamodb,primary-key,database,nosql,Hash,Amazon Dynamodb,Primary Key,Database,Nosql,我无法理解上的文档中的范围/主键 它是如何工作的 “散列属性上的无序散列索引和范围属性上的排序范围索引”是什么意思?“散列和范围主键”表示DynamoDB中的一行具有唯一的主键,主键由散列和范围主键组成。例如,如果散列键为X,范围键为Y,则主键实际上是XY。同样的散列键也可以有多个范围键,但组合必须是唯一的,如XZ和XA。让我们对每种类型的表使用它们的示例: 散列主键–主键由一个属性(散列)组成 属性例如,ProductCatalog表可以将ProductID设置为 它的主键。DynamoDB在
散列和范围主键–主键由两个 属性。第一个属性是hash属性,第二个属性是hash属性 属性是范围属性。例如,论坛线程表 可以将ForumName和Subject作为其主键,其中ForumName是 hash属性和Subject是range属性。DynamoDB构建 哈希属性上的无序哈希索引和排序范围索引 在“范围”属性上 这意味着每一行的主键是散列键和范围键的组合。如果同时具有哈希键和范围键,则可以在单行上直接获取,或者可以对排序范围索引进行查询。例如,获取表中具有散列键X且范围键大于Y的所有行,或其他影响该行的查询。与对未编制索引的字段进行扫描和查询相比,它们具有更好的性能和更少的容量使用。发件人: 查询结果始终按范围键排序。如果 范围键为数字,结果按数字顺序返回; 否则,结果将按ASCII字符代码的顺序返回 价值观默认情况下,排序顺序为升序。颠倒顺序,, 将ScanIndexForward参数设置为false
我可能在打字时漏掉了一些东西,我只触及了表面。还有很多(吞吐量、一致性、容量、其他指标、密钥分配等)。您应该查看页面中的示例。@vnr您只需使用partion key查询,就可以检索与分区键关联的所有排序键。不需要扫描。这里的要点是分区键在查询中是必需的。排序键仅用于获取数据范围,因为整个过程都在混乱中,让我们看看它的函数和代码,以一致地模拟它的含义 获取行的唯一方法是通过主键
getRow(主键:PrimaryKey):Row
主键数据结构可以是这样的:
// If you decide your primary key is just the partition key.
class PrimaryKey(partitionKey: String)
// and in thids case
getRow(somePartitionKey): Row
但是,在这种情况下,您可以决定主键是分区键+排序键:
// if you decide your primary key is partition key + sort key
class PrimaryKey(partitionKey: String, sortKey: String)
getRow(partitionKey, sortKey): Row
getMultipleRows(partitionKey): Row[]
因此,底线是:
+----------------------------------------------------------------------------------+
|Table |
|+------------------------------------------------------------------------------+ |
||Item | |
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | |kv attr | |kv attr ...| |kv attr ...| | |
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
|+------------------------------------------------------------------------------+ |
||Item | |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | |kv attr | |kv attr ...| |kv attr ...| |kv attr ...| | |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
| |
+----------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------+
|1. Always get item by PrimaryKey |
|2. PK is (Hash,RangeKey), great get MULTIPLE Items by Hash, filter/sort by range |
|3. PK is HashKey: just get a SINGLE ITEM by hashKey |
| +--------------------------+|
| +---------------+ |getByPK => getBy(1 ||
| +-----------+ +>|(HashKey,Range)|--->|hashKey, > < or startWith ||
| +->|Composite |-+ +---------------+ |of rangeKeys) ||
| | +-----------+ +--------------------------+|
|+-----------+ | |
||PrimaryKey |-+ |
|+-----------+ | +--------------------------+|
| | +-----------+ +---------------+ |getByPK => get by specific||
| +->|HashType |-->|get one item |--->|hashKey ||
| +-----------+ +---------------+ | ||
| +--------------------------+|
+----------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------+
|桌子|
|+------------------------------------------------------------------------------+ |
||项目||
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | | | | | kv属性| | | | kv属性| ||
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
|+------------------------------------------------------------------------------+ |
||项目||
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | | | | | | kv属性| | kv属性| | | kv属性||
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
|