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?
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
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.
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
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%Tags und Links amazon-dynamodb