2017-02-28 7 views
2

Ich möchte eine Liste von Elementen speichern, die zu einem übergeordneten Objekt gehören.DynamoDB: So speichern Sie eine Liste von Elementen

Geordnetes Objekt wäre wie folgt:

user_id - hash key 
timestamp - range key 
attributeA - String 
attributeB - Number 
listC - List of objects 

listC ist eine Liste von Objekten (wie JSON), wobei jedes Objekt ein paar Felder haben:

attrX - number 
attrY - string 
attrZ - string 

Die Größe Die Liste kann variiert werden, von wenigen Elementen bis zu Hundreads.

Wie soll ich sie speichern?

Aufgrund der Grenzen von DynamoDB habe ich Angst, dass ich diese Liste nicht als Attribut des übergeordneten Objekts behalten kann. Ich denke, diese Listen in eine andere Tabelle zu verschieben. Allerdings bin ich nicht sicher, ob ich sollte:

  1. jedes Einzelteils halten Liste als separater Datensatz,
  2. Split Liste der Elemente zu viele separate Datensätze, wobei jeder Datensatz der Datenbank paar Elemente hat.

Approach (1):

------------------------------------- 
| parent_id | attrX | attrY | attrZ | 
------------------------------------- 
| 178  | 2 | "abc" | "xyz" | 
------------------------------------- 
| 178  | 2.4 | "klm" | "qwe" | 
------------------------------------- 

Approach (2):

------------------------------------------------------------------------ 
| parent_id | Chunk | ListC           | 
------------------------------------------------------------------------ 
| 178  | 1 | [{ X: "2", Y: "abc" }, { X: "2.4", Y: "klm" } ] | 
------------------------------------------------------------------------- 
| 178  | 2 | [{ X: "2.8", Y: "nop" }, { X: "3.2", Y: "qrs" } ] | 
------------------------------------------------------------------------ 

Was würden Sie mir empfehlen?

Antwort

1

Tatsächlich hängt der Ansatz von der Query Access Pattern (QAP).

Ansatz 1: -

  1. Typisch, normalisierte Ansatz ähnlich wie RDBMS Design. Allerdings müssen wir dies auf NoSQL-Perspektive denken. Es gibt keine Verknüpfung in DynamoDB. Möglicherweise müssen Sie möglicherweise zwei Tabellen lesen, um die erforderlichen Daten zu erhalten. Bitte beachten Sie, dass die Kosten auf der Basis der gelesenen Kapazitätseinheiten berechnet werden. Also, die zwei verschiedenen Lese kostet Sie.

  2. kann dieser Ansatz akzeptabel sein, wenn die Elementgröße der DynamoDB Artikel Größe 400 KB überschreitet

  3. Sie Abfrageausdruck schreiben können die Daten durch Attribute attrX, attrY und attrZ zu filtern, da sie als normale skalare gespeichert werden Datentyp Attribute

Ansatz 2: -

  1. Bevorzugter NoSQL-Ansatz, um alle erforderlichen Daten in einer Tabelle zu speichern. Mitglied werden oder zusätzliche Lese nicht

  2. zu prüfen, ob die Objektgröße 400 KB

  3. Ob Sie Abfrage schreiben müssen, erforderlich überschreiten können die Daten durch Attribute attrX, attrY und attrZ zu filtern. Bitte beachten Sie, dass bei diesem Ansatz die Daten der ListC als DynamoDB-Datentyp Liste der Karte gespeichert werden. In den meisten Szenarien die komplexen Datenstrukturen wie diese (dh Karte innerhalb Liste Datentyp) DynamoDB nicht die Flexibilität hat

Liste der Objekte abfragen - bedeutet Liste der Map auf DynamoDB Datenbank

{X: "2.8", Y: "nop"} - ist das Objekt. Dies wird in MAP-Daten Typ auf DynamoDB-Datenbank übersetzt.

Die Außen eckige Klammer übersetzt auf DynamoDB Datentyp LIST

Verwandte Themen