DynamoDB + Speichern von Werten als Elemente oder JSON
Neues zu DynamoDB.
Ich bin erstellen einer Tabelle mit Primary Key 'UserID', Composite Key 'DateTime' und dann habe ich Folgendes als Wert (Hinweis: ich brauche keine Abfrage keine Einzelheiten in der nachstehenden Daten - schreiben und Lesen):
UserID1
UserID2
Message
DateTime
Fragen:
- gibt es einen Vorteil bei der Speicherung diese 4 Werte als einzelne Objekte oder als ein JSON-string?
- UserID1 und Datetime, die in den gespeicherten Wert auch die Primär - /Composite-Schlüssel - gehe ich Recht der Annahme, es gibt keinen Sinn in speichern diese in der data/value wie kann ich Zugriff auf diese aus der zurückgegebenen Schlüssel als quering?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So sind Ihre Optionen:
oder
Beide sind praktikable Möglichkeiten, und die Wahl kommt darauf an, wie Sie möchten, um Daten zu Lesen, wenn Sie ein Attribut für jedes Element, dann können Sie diese Anfrage-Attribute individuell.
Nutzen wir in der Regel ein hybrid-Ansatz, der auf unser Nutzungsverhalten. Elemente, die wir brauchen, um Zugang individuell gegeben werden, Ihre eigenen Attribute. Elemente, die wir immer nur zugreifen möchten, zusammen mit einer Sammlung von anderen Elemente zugewiesen bekommt ein einzelnes Attribut und dann gespeichert werden, als ein einzelnes blob der JSON-string oder base64-kodierte Daten.
Teil zwei, in der Tat, Sie haben Recht, Sie brauchen nicht zu speichern, Benutzer-id und Datum-Zeit wieder als Teil der Attribute, weil Sie die hash-und range-Schlüssel, die zurückgegeben werden, wenn Sie eine Anfrage stellen.
Könnten Sie speichern die Einträge in der JSON-blob als separate AttributeValues. Vor DynamoDB eingeführt JSON-Dokument-Unterstützung, Ihre Optionen müssten begrenzt worden, um Attribute zu trennen, oder eine "String" - Attribut speichern Sie die JSON-Repräsentation der Attribute. Nun, die Amazon eingeführt JSON-Dokument-Unterstützung zu DynamoDB, können Sie Sie speichern diese Art von detaillierten Attribut-Karten direkt in den Punkten. Mit der neuen Java Document SDK für DynamoDB, hinzufügen von JSON-Werte verwendet das Element.withJSON () - Methode, wie folgt aus:
Ich Stimme mit Pooky, dass es keine Notwendigkeit, um doppelte Hash+Palette Schlüssel in den details anzeigen. Sie müssen diese beiden verwenden von GetItem um die Sache.
Ich gehe davon aus, dass durch "separate Objekte" - du meinst "verschiedene Attribute", in dem Fall ist es eigentlich egal. Ich würde wahrscheinlich speichern Sie Sie als separate Attribute, da es möglich ist, zum abrufen einer Teilmenge von Attributen (obwohl Sie sagen Sie nicht brauchen diese Funktionen jetzt). In der Zukunft, wenn Sie wollten, um zu sehen, wie viele Nachrichten ein Benutzer geschickt, aber er wollte nicht warten, für das langsame Netzwerk zurück viele KBs von Nachrichten, mit separaten Parametern sinnvoll wäre.
Ja.
DynamoDB unterstützt nun json-Objekt direkt speichern. Lesen: http://aws.amazon.com/blogs/aws/dynamodb-update-json-and-more/
Können Sie jederzeit Ihre Daten als JSON und die Abfrage leicht.
Ich gehe davon aus, dass Ihr Zweck ist es, eine Art messaging-system.
In diesem Fall, die UserID1 & UserID2 können nicht sein die Hash-Schlüssel, denn Sie haben offensichtlich doppelte Einträge (zum Beispiel UserID1 hat mehr als eine Nachricht).
Können Sie über einen index, die eine session-ID zu Sortieren.
Können Sie dann erstellen Sie einen sekundären index, der die [DateTime] Teil der Struktur, so dass Sie können die Abfrage-Nachrichten für diese Sitzung, die älter sind als eine gegebene Zeitstempel.
Mit DynamoMapper man könnte dies in Java:
Und die content-Klasse könnte sein: