Je souhaite stocker une liste d'éléments appartenant à un objet parent.
L'objet parent serait comme suit:
user_id - hash key
timestamp - range key
attributeA - String
attributeB - Number
listC - List of objects
listC est une liste d'objets (comme JSON), où chaque objet peut avoir quelques champs:
attrX - number
attrY - string
attrZ - string
La taille de la liste peut varier, de quelques éléments aux centaines de lectures.
Comment dois-je les stocker?
En raison des limites de DynamoDB, je crains de ne pas pouvoir conserver cette liste en tant qu'attribut de l'objet parent. Je pense que de déplacer ces listes vers un autre tableau. Cependant, je ne sais pas si je devrais:
Approche (1):
-------------------------------------
| parent_id | attrX | attrY | attrZ |
-------------------------------------
| 178 | 2 | "abc" | "xyz" |
-------------------------------------
| 178 | 2.4 | "klm" | "qwe" |
-------------------------------------
Approche (2):
------------------------------------------------------------------------
| parent_id | Chunk | ListC |
------------------------------------------------------------------------
| 178 | 1 | [{ X: "2", Y: "abc" }, { X: "2.4", Y: "klm" } ] |
-------------------------------------------------------------------------
| 178 | 2 | [{ X: "2.8", Y: "nop" }, { X: "3.2", Y: "qrs" } ] |
------------------------------------------------------------------------
Que me recommanderiez-vous?
En fait, l'approche dépend du Query Access Pattern (QAP).
Approche 1: -
Approche normalisée typique semblable à la conception du SGBDR. Cependant, nous devons penser cela du point de vue NoSQL. Il y a pas de jointure dans DynamoDB. Potentiellement, vous devrez peut-être lire deux tableaux pour obtenir les données requises. Veuillez noter que le coût est calculé sur la base des unités de capacité de lecture. Ainsi, les deux lectures différentes vous coûteront.
Cette approche peut être acceptable si la taille de l'élément dépasse la taille de l'élément DynamoDB 400 Ko
Vous pouvez écrire une expression de requête pour filtrer les données par attributs attrX, attrY et attrZ car elles sont stockées en tant qu'attributs de type de données scalaires normaux
Approche 2: -
Approche NoSQL préférée pour conserver toutes les données requises dans une seule table. Aucune inscription ou lecture supplémentaire n'est requise
Besoin de déterminer si la taille de l'élément peut dépasser 400 Ko
Indique si vous devez écrire une requête pour filtrer les données par attributs attrX, attrY et attrZ. Veuillez noter que dans cette approche, les données ListC sont stockées en tant que type de données List of Map DynamoDB. Dans la plupart des scénarios, DynamoDB n'a pas la possibilité d'interroger les structures de données complexes comme celle-ci (c'est-à-dire Map inside List type de données)
Liste des objets - signifie la liste des cartes sur la base de données DynamoDB
{X: "2.8", Y: "nop"} - est l'objet. Cela se traduit par le type de données MAP sur la base de données DynamoDB.
Le crochet extérieur se traduit par le type de données LIST sur DynamoDB