DynamoDB + Werte als Elemente oder JSON speichern

8

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:

  1. hat es einen Vorteil, diese 4 Werte als separate Elemente oder als eine JSON-Zeichenfolge zu speichern?
  2. UserID1 und Datetime im gespeicherten Wert bilden auch den primären / zusammengesetzten Schlüssel - gehe ich davon aus, dass es keinen Sinn hat, diese in den Daten / Werten zu speichern, da ich von den zurückgegebenen Keys beim Abfragen darauf zugreifen kann?
Adam 30.12.2012, 00:01
quelle

6 Antworten

6
  1. 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%
  2. 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.

Alexander Patrikalakis 10.10.2014 22:03
quelle
6

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>     

sungiant 04.01.2013 12:35
quelle
3
  1. 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.

  2. Ja.

Cory Kendall 31.12.2012 06:53
quelle
3

DynamoDB unterstützt jetzt das direkte Speichern von Json-Objekten. lesen Sie: Ссылка

    
WaylandZ 09.10.2014 07:09
quelle
2

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.

    
E.T 02.07.2015 18:38
quelle
0

Mit DynamoMapper können Sie dies in Java tun:

%Vor%

Und die Inhaltsklasse könnte sein:

%Vor%     
sebadagostino 06.07.2017 16:18
quelle