Soll ich meine DynamoDB-Tabellen immer mit dem Hash- und Bereichs-Primärschlüsseltyp erstellen?

8

In der Dokumentation ( Ссылка ) heißt es:

  

Sie können nur Tabellen abfragen, deren Primärschlüssel vom Hash-und-Bereichstyp

ist

und

  

Wir empfehlen, dass Sie Ihre Anwendungen so entwerfen, dass Sie hauptsächlich die Query-Operation verwenden und nur dort verwenden können, wo es sinnvoll ist

Es ist nicht direkt angegeben, aber macht es das Beste, Hash-und-Range-Primärschlüssel zu verwenden?

BEARBEITEN:

Answer TL; DR: Verwenden Sie den Primärschlüsseltyp, der für Ihr Datenmodell sinnvoll ist, und verwenden Sie sekundäre Indizes, um die Unterstützung besser abzufragen.

Referenzen:

Ссылка

Ссылка

Ссылка

In welcher Situation verwenden Sie Simple Hash-Schlüssel in DynamoDB?

    
Brett 28.04.2015, 03:06
quelle

3 Antworten

10

Die Auswahl des zu verwendenden Schlüssels hängt von Ihren Anwendungsfällen und Datenanforderungen für ein bestimmtes Szenario ab. Wenn Sie beispielsweise Benutzersitzung -Daten speichern, macht es unter Verwendung des Bereichsschlüssels unter Umständen wenig Sinn, da auf jeden Datensatz von einer GUID verwiesen und direkt ohne Gruppierungsanforderungen zugegriffen werden kann . Wenn Sie die Sitzungs-ID kennen, erhalten Sie nur die spezifische Abfrage des Elements mit dem Schlüssel. Ein anderes Beispiel könnte das Speichern von Benutzerkonto- oder Profildaten sein, jeder Benutzer hat sein eigenes und Sie werden höchstwahrscheinlich direkt darauf zugreifen (durch Benutzer-ID oder etwas anderes).

Wenn Sie jedoch Order Items speichern, ist der Range Key viel sinnvoller, da Sie die Elemente wahrscheinlich nach ihrer Reihenfolge .

In Bezug auf das Datenmodell können Sie mit dem Hash-Schlüssel einen Datensatz aus Ihrer Tabelle und den Bereichsschlüssel eindeutig identifizieren optional können Sie mehrere Datensätze gruppieren und sortieren, die normalerweise zusammen abgerufen werden. Beispiel: Wenn Sie ein Aggregat zum Speichern von Bestellelementen definieren, könnte die Bestell-ID Ihr Hash-Schlüssel und die OrderItemId der Bereichsschlüssel . Wann immer Sie die Order Items von einer bestimmten Order aus durchsuchen möchten, fragen Sie einfach nach dem Hash Key (Order Id) und Sie erhalten alle Ihre Order Elemente .

Im Folgenden finden Sie eine formale Definition für die Verwendung dieser beiden Schlüssel:

  

"Zusammengesetzter Hash-Schlüssel mit Bereichsschlüssel ermöglicht dem Entwickler, ein   Primärschlüssel, der die Zusammensetzung zweier Attribute ist, ein "Hash"   Attribut 'und ein' Bereichsattribut '. Bei Abfragen gegen eine Zusammensetzung   Schlüssel, das Hash-Attribut muss eindeutig zugeordnet werden, aber ein Bereich   Operation kann für das Bereichsattribut spezifiziert werden: z.B. alle Bestellungen   von Werner in den letzten 24 Stunden oder alle Spiele von einer Einzelperson gespielt   Spieler in den letzten 24 Stunden. " [VOGELS]

Der Bereichsschlüssel fügt dem Datenmodell eine Gruppierungsfunktion hinzu. Die Verwendung dieser beiden Schlüssel hat jedoch auch Auswirkungen auf das Speichermodell :

  

"Dynamo verwendet konsistenten Hash, um seinen Schlüsselraum über seinen   Repliken und um eine gleichmäßige Lastverteilung zu gewährleisten. Ein einheitlicher Schlüssel   Verteilung kann uns helfen, eine gleichmäßige Lastverteilung zu erreichen   die Zugriffsverteilung der Schlüssel ist nicht stark verzerrt. "    [DDB-SOSP2007]

Nicht nur der Hash-Schlüssel ermöglicht die eindeutige Identifizierung des Datensatzes, sondern auch der Mechanismus zur Gewährleistung der Lastverteilung. Der Bereichsschlüssel (falls verwendet) hilft dabei, die Datensätze anzugeben, die meistens zusammen abgerufen werden. Daher kann der Speicher auch für solche Anforderungen optimiert werden.

Die Auswahl der richtigen Schlüssel zur Darstellung Ihrer Daten ist einer der wichtigsten Aspekte während Ihres Designprozesses und wirkt sich direkt auf die Leistung, Skalierung und Kosten Ihrer Anwendung aus.

Fußnoten:

  • Das Datenmodell ist das Modell, durch das wir unsere Daten wahrnehmen und manipulieren. Es beschreibt, wie wir mit den Daten in der Datenbank [FOWLER] interagieren. Mit anderen Worten: Sie abstrahieren Ihr Datenmodell, die Art und Weise, wie Sie Ihre Entitäten gruppieren, die Attribute, die Sie als Primärschlüssel auswählen usw.

  • Das Speichermodell beschreibt, wie die Datenbank die Daten intern speichert und manipuliert [FOWLER]. Obwohl Sie dies nicht direkt steuern können, können Sie sicher optimieren, wie die Daten abgerufen oder geschrieben werden, indem Sie wissen, wie die Datenbank intern funktioniert.

bsd 28.04.2015, 11:25
quelle
4

Nicht unbedingt. Wählen Sie am besten einen Primärschlüssel, der die Zugriffsmuster für Ihren Anwendungsfall unterstützt.

Nehmen wir beispielsweise an, Sie möchten eine Tabelle für Benutzer erstellen. Sie speichern die Details für einen einzelnen Benutzer (Name, E-Mail, Ersteller usw.). Ihr Zugriffsmuster könnte sein, dass Sie die Details für einen bestimmten Benutzer abrufen. In diesem Fall ist es sinnvoller, einen Primärschlüssel vom Typ hash mit einem Hash-Schlüssel von userId zu verwenden.

Nehmen wir an, Sie möchten auch eine andere Tabelle, die Gruppen speichert. Ihr Zugriffsmuster könnte so aussehen, dass Sie alle Mitglieder für eine bestimmte Gruppe erhalten möchten. Hier ist es sinnvoller, einen Primärschlüssel vom Typ Hash und Bereich zu verwenden, wobei Ihre Hash- und Bereichsschlüssel groupId und userId sind.

Die wichtigsten Dinge zu wissen sind die Unterschiede zwischen den beiden Schlüsseltypen (Zitat unten) und die Richtlinien zum Arbeiten mit Tabellen :

  
  • Primärer Hash-Typ -Der Primärschlüssel besteht aus einem Attribut, einem Hash-Attribut. DynamoDB erstellt einen ungeordneten Hash-Index auf diesem
      Primärschlüsselattribut Jedes Element in der Tabelle ist eindeutig identifiziert   durch seinen Hash-Schlüsselwert.

  •   
  • Primärer Schlüssel für Hash und Bereichstyp -Der Primärschlüssel besteht aus zwei Attributen. Das erste Attribut ist das Hash-Attribut und das zweite
      Einer ist das Bereichsattribut. DynamoDB erstellt einen ungeordneten Hash-Index
      auf dem Hash-Primärschlüsselattribut und einem sortierten Bereichsindex auf dem
      Bereichs-Primärschlüssel-Attribut. Jedes Element in der Tabelle ist eindeutig   identifiziert durch die Kombination seiner Hash- und Bereichsschlüsselwerte. Es ist   möglich, dass zwei Elemente denselben Hash-Schlüsselwert haben, aber diese beiden   Elemente müssen unterschiedliche Bereichsschlüsselwerte haben.

  •   

Weitere Informationen zu Best Practices finden Sie in der Dynamo-DB Richtlinien zum Arbeiten mit Tabellen

    
mkobit 28.04.2015 05:33
quelle
1

Wie andere schon gesagt haben - nein, sollten Sie nicht.

Die Aussage, die Sie verwirrt und dazu veranlasst hat, diese Frage zu stellen, ist falsch :

  

Sie können nur Tabellen abfragen, deren Primärschlüssel vom Hash-und-Bereichstyp

ist

Sie können Tabellen abfragen, deren Primärschlüssel vom Typ Single-Attribut (nur Partition) ist.

Beweis:

%Vor%

Ausgabe des letzten Befehls (funktioniert):

%Vor%     
golem 25.07.2016 02:32
quelle

Tags und Links