Les meilleures pratiques de DyanmoDB indiquent clairement que:
Vous devez conserver le moins de tables possible dans une application DynamoDB. La plupart des applications bien conçues ne nécessitent qu'une seule table.
Je trouve amusant alors que presque tous les tutoriels que j'ai vus concernant DyanmoDB aient une conception multi-tables.
Mais qu'est-ce que cela signifie dans la pratique?
Prenons une application simple avec trois entités principales: les utilisateurs, les projets et les documents. Un utilisateur possède plusieurs projets et un projet peut avoir plusieurs documents. Nous devons généralement interroger les projets d'un utilisateur et les documents d'un projet. Les lectures sont plus nombreuses que les écritures avec une marge importante.
La conception d'un tableau d'un didacticiel naïf utiliserait trois tableaux:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
Nous pourrions assez facilement s'effondrer Project
et Document
former un seul Documents
tableau:
Documents
Hash key Sort key Global Index
project-id document-id user-id
Mais pourquoi s'arrêter là? Pourquoi pas une table pour les gouverner tous? Puisque le User
est la racine de tout ...
Users
Hash key Sort key
user-id aspect
--------- ---------
foo user email: foo@bar.com ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
Ensuite, nous aurions un index global sur, disons, le email
champ pour les recherches d'enregistrements utilisateur, et un autre sur le document-id
champ pour les recherches directes de documents.
Est-ce ainsi que cela est censé fonctionner? Est-il légitime de jeter des types de données aussi divergents dans la même table? Ou la deuxième conception à deux tables est-elle une meilleure approche?
À quel moment serait-il correct d'ajouter un deuxième tableau?