Datenmodellierung ist der Prozess des Entwurfs, wie eine Anwendung Daten in einer bestimmten Datenbank speichert. Mit einer NoSQL-Datenbank wie DynamoDB unterscheidet sich die Datenmodellierung von der Modellierung mit einer relationalen Datenbank. Eine relationale Datenbank ist auf Flexibilität ausgelegt und kann sich hervorragend für analytische Anwendungen eignen. Bei der relationalen Datenmodellierung beginnen Sie zunächst mit Ihren Entitäten. Wenn Sie ein normalisiertes relationales Modell haben, können Sie jedes Abfragemuster, das Sie in Ihrer Anwendung benötigen, erfüllen.
NoSQL (nicht-relationale) Datenbanken sind auf Geschwindigkeit und Skalierbarkeit ausgelegt – nicht auf Flexibilität. Auch wenn die Leistung Ihrer relationalen Datenbank bei der Skalierung nach oben hin abnehmen kann, bietet die horizontale Skalierung von Datenbanken wie DynamoDB eine konsistente Leistung in jedem Maßstab. Einige DynamoDB-Benutzer haben Tabellen, die größer als 100 TB sind, und die Lese- und Schreibleistung ihrer Tabellen ist die gleiche, wie wenn die Tabellen kleiner als 1 GB wären.
Um mit einer NoSQL-Datenbank wie DynamoDB beste Ergebnisse zu erzielen, ist ein Umdenken gegenüber der typischen relationalen Datenbank erforderlich. Verwenden Sie die folgenden bewährten Verfahren bei der Datenmodellierung mit DynamoDB.
1. Fokussieren Sie sich auf Zugangsmuster
Bei jeder Art von Datenmodellierung beginnen Sie mit einem Entitäts-Beziehungsdiagramm, das die verschiedenen Objekte (oder Entitäten) in Ihrer Anwendung beschreibt und wie sie miteinander verbunden sind (oder die Beziehungen zwischen Ihren Entitäten).
In relationalen Datenbanken legen Sie Ihre Entitäten direkt in Tabellen ab und spezifizieren Beziehungen über Fremdschlüssel. Nachdem Sie Ihre Datentabellen definiert haben, bietet eine relationale Datenbank eine flexible Abfragesprache, um Daten in der von Ihnen gewünschten Form zurückzugeben.
In DynamoDB denken Sie über Zugriffsmuster nach, bevor Sie Ihre Tabelle modellieren. Bei den NoSQL-Datenbanken geht es um Geschwindigkeit, nicht um Flexibilität. Sie fragen zunächst, wie Sie auf Ihre Daten zugreifen werden, und modellieren dann Ihre Daten in der Form, in der auf sie zugegriffen werden soll.
Bevor Sie Ihre DynamoDB-Tabelle entwerfen, dokumentieren Sie jeden Bedarf, den Sie zum Lesen und Schreiben von Daten in Ihrer Anwendung haben. Seien Sie gründlich und denken Sie über alle Abläufe in Ihrer Anwendung nach, denn Sie werden Ihre Tabelle für Ihre Zugriffsmuster optimieren.
2. Optimieren für die Anzahl der Anfragen an DynamoDB
Nachdem Sie die Anforderungen an das Zugriffsmuster Ihrer Anwendung dokumentiert haben, sind Sie bereit, Ihre Tabelle zu entwerfen. Sie sollten Ihre Tabelle so gestalten, dass die Anzahl der Anfragen an DynamoDB für jedes Zugriffsmuster minimiert wird. Im Idealfall sollte für jedes Zugriffsmuster nur eine einzige Anfrage an DynamoDB erforderlich sein, da Netzwerkanfragen langsam sind, was die Anzahl der Netzwerkanfragen in Ihrer Anwendung begrenzt.
Um für die Anzahl der Anfragen an DynamoDB zu optimieren, müssen Sie einige zentrale Konzepte verstehen:
● Primärschlüssel
● Sekundäre Indizes
● Transaktionen
3. Täuschen Sie kein Beziehungsmodell vor
Personen, die neu bei DynamoDB sind, versuchen oft, ein relationales Modell auf einer nicht-relationalen DynamoDB zu implementieren. Wenn Sie versuchen, dies zu tun, verlieren Sie die meisten Vorteile von DynamoDB.
Die häufigsten Anti-Muster (unwirksame Antworten auf wiederkehrende Probleme), die man mit DynamoDB ausprobiert, sind:
- Normalisierung: In einer relationalen Datenbank normalisieren Sie Ihre Daten, um Datenredundanz und Speicherplatz zu reduzieren, und verwenden dann Joins, um mehrere verschiedene Tabellen zu kombinieren. Allerdings sind Joins in großem Maßstab langsam und teuer. DynamoDB lässt keine Joins zu, weil sie sich verlangsamen, wenn Ihre Tabelle wächst.
- Ein Datentyp pro Tabelle: Ihre DynamoDB-Tabelle enthält oft verschiedene Datentypen in einer einzigen Tabelle. In unserem Beispiel haben wir Benutzer-, Spiel- und UserGameMapping-Entitäten in einer einzigen Tabelle. In einer relationalen Datenbank würde dies als drei verschiedene Tabellen modelliert werden.
- Zu viele Sekundärindizes: Oft wird versucht, für jedes zusätzliche Zugriffsmuster, das man benötigt, einen Sekundärindex zu erstellen. DynamoDB ist schemenlos, und das gilt auch für Ihre Indizes. Nutzen Sie die Flexibilität in Ihren Attributen, um einen einzelnen Sekundärindex über mehrere Datentypen in Ihrer Tabelle wiederzuverwenden. Dies wird als Indexüberlastung bezeichnet.
In den folgenden Schritten werden wir unser Entitäts-Beziehungsdiagramm erstellen und unsere Zugangsmuster im Vorfeld skizzieren. Dies sollten immer Ihre ersten Schritte sein, wenn Sie DynamoDB verwenden. In den folgenden Modulen implementieren wir dann diese Zugriffsmuster in das Tabellendesign.
Veranschlagte Zeit für das Modul: 20 Minuten