Le migliori pratiche di DyanmoDB chiariscono che:
È necessario mantenere il minor numero di tabelle possibile in un'applicazione DynamoDB. Le applicazioni più ben progettate richiedono solo una tabella.
Trovo divertente quindi che quasi ogni singolo tutorial che ho visto avere a che fare con DyanmoDB abbia un design multi-tavolo.
Ma cosa significa in pratica?
Consideriamo una semplice applicazione con tre entità principali: Utenti, Progetti e Documenti. Un utente possiede più progetti e un progetto può avere più documenti. In genere dobbiamo eseguire una query sui progetti per un utente e sui documenti per un progetto. Legge un numero maggiore di scritture con un margine significativo.
Il design di una tabella di tutorial ingenuo userebbe tre tabelle:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
Potremmo facilmente comprimere Project
e Document
in una Documents
tabella:
Documents
Hash key Sort key Global Index
project-id document-id user-id
Ma perché fermarsi qui? Perché non un tavolo per domarli tutti? Dal momento che User
è la radice di tutto ...
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 ...
Quindi avremmo un indice globale sul email
campo per le ricerche dei record degli utenti e un altro sul document-id
campo per le ricerche di documenti diretti.
È così che dovrebbe funzionare? È legittimo inserire tali tipi di dati selvaggiamente divergenti nella stessa tabella? O il secondo design a due tavoli è un approccio migliore?
A che punto sarebbe corretto aggiungere una seconda tabella?