Qu’est-ce que la clé primaire Hash and Range?

Je ne suis pas capable de comprendre ce que la clé primaire Range est ici –

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

et comment ça marche?

Que signifient-ils par “index de hachage non ordonné sur l’atsortingbut de hachage et un index de plage sortingé sur l’atsortingbut de plage”?

    Clé primaire de hachage et de plage ” signifie qu’une seule ligne de DynamoDB possède une clé primaire unique composée à la fois du hachage et de la clé de plage . Par exemple, avec une clé de hachage de X et une clé de plage de Y , votre clé primaire est effectivement XY . Vous pouvez également avoir plusieurs clés de plage pour la même clé de hachage, mais la combinaison doit être unique, comme XZ et XA . Utilisons leurs exemples pour chaque type de table:

    Clé primaire de hachage – La clé primaire est constituée d’un atsortingbut, un atsortingbut de hachage. Par exemple, une table ProductCatalog peut avoir ProductID comme clé primaire. DynamoDB génère un index de hachage non ordonné sur cet atsortingbut de clé primaire.

    Cela signifie que chaque ligne est associée à cette valeur. Chaque ligne de DynamoDB aura une valeur unique requirejse pour cet atsortingbut . Un index de hachage non ordonné signifie ce qui est dit – les données ne sont pas commandées et vous ne pouvez pas garantir la manière dont les données sont stockées. Vous ne pourrez pas faire de requêtes sur un index non ordonné tel que Get me toutes les lignes qui ont un ProductID supérieur à X. Vous écrivez et récupérez des éléments en fonction de la clé de hachage. Par exemple, récupérez-moi la ligne de cette table avec ProductID X. Vous effectuez une requête sur un index non ordonné afin que vos réponses soient essentiellement des recherches de valeurs-clés, sont très rapides et utilisent très peu de débit.


    Clé primaire Hash and Range – La clé primaire est composée de deux atsortingbuts. Le premier atsortingbut est l’atsortingbut de hachage et le deuxième atsortingbut est l’atsortingbut d’intervalle. Par exemple, la table Thread du forum peut avoir pour clé primaire ForumName et Subject, où NomFichier est l’atsortingbut de hachage et Objet est l’atsortingbut de la plage. DynamoDB génère un index de hachage non ordonné sur l’atsortingbut de hachage et un index de plage sortingé sur l’atsortingbut de plage.

    Cela signifie que la clé primaire de chaque ligne est la combinaison de la clé de hachage et de la plage . Vous pouvez effectuer des requêtes directes sur des lignes uniques si vous avez à la fois la clé de hachage et la clé de plage, ou vous pouvez effectuer une requête sur l’ index de plage sortingé . Par exemple, obtenez Get me toutes les lignes de la table avec la clé de hachage X ayant des clés de plage supérieures à Y , ou d’autres requêtes à cet effet. Ils offrent de meilleures performances et une moindre utilisation de la capacité par rapport aux parsings et requêtes sur des champs non indexés. De leur documentation :

    Les résultats de la requête sont toujours sortingés par la clé de plage. Si le type de données de la clé de plage est Number, les résultats sont renvoyés dans l’ordre numérique. sinon, les résultats sont renvoyés dans l’ordre des valeurs de code de caractères ASCII. Par défaut, l’ordre de sorting est croissant. Pour inverser l’ordre, définissez le paramètre ScanIndexForward sur false

    J’ai probablement raté certaines choses en tapant ceci et j’ai seulement gratté la surface. Il y a beaucoup d’ autres aspects à prendre en compte lorsque vous travaillez avec des tables DynamoDB (débit, cohérence, capacité, autres indices, dissortingbution de clés, etc.). Vous devriez regarder les exemples de tables et de pages de données pour des exemples.

    Comme tout se mélange. Tout d’abord, les blocs de construction sont les suivants:

    1. Table
    2. Article
    3. Atsortingbut KV.

    Vous pouvez récupérer un élément avec sa clé primaire – comme d’habitude. Mais vous pouvez également récupérer des éléments par une requête principale que vous spécifiez HashKey + RangeKeyQuery. La façon de récupérer plusieurs éléments par clé primaire (ce qui semble étrange au début) consiste à spécifier la clé de hachage, puis une plage sur la clé de plage.

    C’est comme si votre clé était divisée en:

    (la partie 1 que vous devez spécifier est entièrement, une partie à vous peut spécifier une plage).

    Plus visuellement comme complexe, comme je le vois:

    +----------------------------------------------------------------------------------+ |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 || | +———–+ +—————+ | || | +————————–+| +———————————————————————————-+

    Alors, que se passe-t-il au-dessus? Notez les observations suivantes. Comme nous l’avons dit, nos données appartiennent à (Table, Item, KVAtsortingbute). Ensuite, chaque élément a une clé primaire. Maintenant, la manière dont vous composez cette clé primaire a un sens dans la façon dont vous pouvez accéder aux données.

    Si vous décidez que votre PrimaryKey est simplement une clé de hachage, alors vous pouvez en extraire un seul élément. Si vous décidez cependant que votre clé primaire est hashKey + SortKey, vous pouvez également faire une requête de plage sur votre clé primaire car vous obtiendrez vos éléments par (HashKey + SomeRangeFunction (clé de plage)). Vous pouvez donc obtenir plusieurs éléments avec votre requête de clé primaire.

    Note: Je n’ai pas fait référence aux index secondaires.

    @vnr vous pouvez récupérer toutes les clés de sorting associées à une clé de partition en utilisant simplement la requête en utilisant la clé de partition. Pas besoin de scanner. Le point ici est la clé de partition est obligatoire dans une requête. La clé de sorting est utilisée uniquement pour obtenir une plage de données