Die Best Practices von DyanmoDB machen deutlich, dass:
Sie sollten in einer DynamoDB-Anwendung so wenige Tabellen wie möglich verwalten. Die meisten gut gestalteten Anwendungen erfordern nur eine Tabelle.
Ich finde es dann amüsant, dass fast jedes einzelne Tutorial, das ich mit DyanmoDB gesehen habe, ein Multi-Table-Design hat.
Aber was bedeutet das in der Praxis?
Betrachten wir eine einfache Anwendung mit drei Hauptentitäten: Benutzer, Projekte und Dokumente. Ein Benutzer besitzt mehrere Projekte, und ein Projekt kann mehrere Dokumente haben. In der Regel müssen wir die Projekte für einen Benutzer und die Dokumente für ein Projekt abfragen. Liest die Anzahl der Schreibvorgänge mit deutlichem Abstand.
Das Tabellendesign eines naiven Tutorials würde drei Tabellen verwenden:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
Wir könnten ziemlich leicht zusammenbrechen Project
und Document
in einen Documents
Tisch fallen:
Documents
Hash key Sort key Global Index
project-id document-id user-id
Aber warum dort aufhören? Warum nicht eine Tabelle, um sie alle zu regieren? Da User
ist die Wurzel von allem ...
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 ...
Dann hätten wir einen globalen Index beispielsweise für das email
Feld für die Suche nach Benutzerdatensätzen und einen weiteren für die document-id
Suche nach direkten Dokumenten.
Soll es so funktionieren? Ist es legitim, solche sehr unterschiedlichen Arten von Daten in dieselbe Tabelle zu werfen? Oder ist das zweite Design mit zwei Tischen ein besserer Ansatz?
Ab wann wäre es richtig, eine zweite Tabelle hinzuzufügen?
quelle