Neu in DynamoDB.
Ich erstelle eine Tabelle mit dem Primärschlüssel 'UserID', dem zusammengesetzten Schlüssel 'DateTime' und dann habe ich folgendes als Wert (Hinweis: Ich muss keine Einzelheiten in den unten stehenden Daten abfragen - schreibe einfach und lies es):
%Vor%Fragen:
Sie könnten die Einträge im JSON-Blob als separate AttributeValues speichern. Bevor DynamoDB die JSON-Dokumentunterstützung eingeführt hat, waren Ihre Optionen auf separate Attribute oder ein "String" -Attribut beschränkt, in dem Sie die JSON-Repräsentation dieser Attribute speichern. Jetzt, da Amazon die Unterstützung für JSON-Dokumente in DynamoDB eingeführt hat, können Sie diese Art von detaillierten Attributzuordnungen direkt in Elementen speichern. Wenn Sie das neue Java Document SDK für DynamoDB verwenden, wird zum Hinzufügen von JSON-Werten die Item.withJSON () -Methode verwendet:
%Vor%Ich stimme Poooky zu, dass die Hash + Range-Schlüssel in der Detailkarte nicht dupliziert werden müssen. Sie benötigen beide, um GetItem zu verwenden, um das Element zu erhalten.
Ihre Optionen sind also:
%Vor%oder
%Vor%Beide sind praktikable Optionen, und die Wahl hängt davon ab, wie Sie die Daten lesen möchten. Wenn Sie für jedes Element ein Attribut haben, können Sie diese Attribute einzeln anfordern.
Wir neigen dazu, einen hybriden Ansatz zu verwenden, der auf unseren Nutzungsmustern basiert. Elemente, auf die wir individuell zugreifen müssen, erhalten ihre eigenen Attribute. Elemente, auf die wir immer nur mit einer Sammlung anderer Elemente zugreifen wollen, erhalten alle ein einzelnes Attribut und werden dann als einzelnes Blob der JSON-Zeichenfolge oder base64-codierte Daten gespeichert.
Für den zweiten Teil haben Sie zwar Recht, Sie müssen die Benutzer-ID und die Datumsangabe nicht erneut als Teil der Attribute speichern, da es sich um die Hash- und Bereichsschlüssel handelt, die bei einer Anforderung zurückgegeben werden / p>
Ich gehe davon aus, dass "getrennte Elemente" für Sie "separate Attribute" bedeuten. In diesem Fall spielt es keine Rolle. Ich würde sie wahrscheinlich als separate Attribute speichern, da es möglich ist, eine Teilmenge von Attributen abzurufen (obwohl Sie sagen, dass Sie diese Funktionalität jetzt nicht benötigen). Wenn Sie in Zukunft sehen möchten, wie viele Nachrichten ein Benutzer gesendet hat, aber nicht auf das langsame Netzwerk warten wollte, um viele KB Nachrichten zurückzugeben, wären separate Attribute hilfreich.
Ja.
Sie können Ihre Daten immer als JSON speichern und leicht abfragen.
%Vor%Ich gehe davon aus, dass Ihr Zweck eine Art Nachrichtensystem ist. In diesem Fall ist die BenutzerID1 & amp; UserID2 kann nicht der Hash-Schlüssel sein, weil Sie offensichtlich doppelte Einträge haben (zum Beispiel UserID1 hat mehr als eine Nachricht).
Sie können einen Index haben, bei dem es sich um eine Sitzungs-ID von sort handelt.
Sie können dann einen sekundären Index für den [DateTime] -Teil der Struktur erstellen, so dass Sie Nachrichten für diese Sitzung abfragen können, die älter als ein bestimmter Zeitstempel sind.
Mit DynamoMapper können Sie dies in Java tun:
%Vor%Und die Inhaltsklasse könnte sein:
%Vor%Tags und Links amazon database-design amazon-dynamodb