Partitionen und Datenverteilung in DynamoDB
Amazon DynamoDB speichert Daten in Partitionen. Eine Partition ist eine Zuordnung von Speicher für eine Tabelle, der auf SSD-Laufwerken (SSDs) bereitgestellt wird, und der automatisch über mehrere Availability Zones in einer AWS-Region repliziert wird. Die Partitionsverwaltung wird ausschließlich von DynamoDB ausgeführt, d. h. Sie müssen Partitionen nicht selbst verwalten.
Beim Erstellen einer Tabelle ist der Anfangsstatus CREATING. In dieser Phase weist DynamoDB der Tabelle ausreichende Partitionen zu, sodass diese Ihre Anforderungen für den bereitgestellten Durchsatz erfüllen kann. Sie können mit dem Schreiben und Lesen von Tabellendaten beginnen, sobald sich der Tabellenstatus zu ACTIVE ändert.
DynamoDB weist einer Tabelle in folgenden Situationen zusätzliche Partitionen zu:
-
Wenn Sie die Einstellungen für den bereitgestellten Durchsatz der Tabelle über das Maß erhöhen, das die vorhandenen Partitionen unterstützen können.
-
Wenn eine vorhandene Partition bis zur Kapazität gefüllt ist und mehr Speicherplatz erforderlich ist.
Die Partitionsverwaltung wird automatisch im Hintergrund ausgeführt und ist für Ihre Anwendungen transparent. Ihre Tabelle bleibt verfügbar und unterstützt Ihre Anforderungen des bereitgestellten Durchsatzes vollständig.
Weitere Details finden Sie unter Entwerfen von Partitionsschlüsseln.
Globale sekundäre Indizes in DynamoDB bestehen ebenfalls aus Partitionen. Die Daten in einem globalen sekundären Index werden getrennt von den Daten in der Basistabelle gespeichert. Indexpartitionen verhalten sich jedoch ähnlich wie Tabellenpartitionen.
Datenverteilung: Partitionsschlüssel
Wenn Ihre Tabelle über einen einfachen Primärschlüssel (nur Partitionsschlüssel) verfügt, speichert und ruft DynamoDB jedes Element basierend auf seinem Partitionsschlüsselwert ab.
Um ein Element in die Tabelle zu schreiben, verwendet DynamoDB den Wert des Partitionsschlüssels als Eingabe für eine interne Hash-Funktion. Der Ausgabewert der Hash-Funktion bestimmt die Partition, in der das Element gespeichert wird.
Um ein Element aus der Tabelle zu lesen, müssen Sie den Partitionsschlüsselwert für das Element angeben. DynamoDB verwendet diesen Wert als Eingabe für die Hash-Funktion. Daraus ergibt sich die Partition, in der das Element gefunden werden kann.
Das folgende Diagramm zeigt eine Tabelle mit dem Namen Pets, die sich über mehrere Partitionen erstreckt. Der Primärschlüssel der Tabelle ist AnimalType (es wird nur dieses Schlüsselattribut angezeigt). DynamoDB verwendet eine Hash-Funktion, um zu ermitteln, wo ein neues Element gespeichert werden soll, und zwar in diesem Fall basierend auf dem Hash-Wert der Zeichenfolge Dog. Hinweis: Die Elemente werden nicht sortiert gespeichert. Die Position jedes einzelnen Elements wird durch den Hash-Wert seines Partitionsschlüssels bestimmt.
Anmerkung
DynamoDB ist für eine einheitliche Verteilung von Elementen über die Partitionen einer Tabelle optimiert, unabhängig davon, wie viele Partitionen vorliegen. Wir empfehlen, dass Sie einen Partitionsschlüssel verwenden, der eine großen Anzahl von eindeutigen Werten in Bezug auf die Anzahl der Elemente in der Tabelle aufnehmen kann.
Datenverteilung: Partitions- und Sortierschlüssel
Wenn die Tabelle über einen zusammengesetzten Primärschlüssel (Partitionsschlüssel und Sortierschlüssel) verfügt, berechnet DynamoDB den Hashwert des Partitionsschlüssels auf die gleiche Weise wie unter Datenverteilung: Partitionsschlüssel beschrieben. Dabei werden jedoch Elemente, die denselben Partitionsschlüsselwert haben, nahe beieinander und in sortierter Reihenfolge nach dem Wert des Sortierschlüsselattributs beibehalten. Der Satz von Elementen, die denselben Partitionsschlüsselwert haben, wird als Elementauflistung bezeichnet. Elementauflistungen sind für das effiziente Abrufen von Elementbereichen innerhalb der Auflistung optimiert. Wenn Ihre Tabelle keine lokalen sekundären Indizes enthält, teilt DynamoDB Ihre Elementauflistung automatisch auf die Anzahl von Partitionen auf, die erforderlich ist, um die Daten zu speichern und den Lese- und Schreibdurchsatz zu gewährleisten.
Beim Schreiben eines Elements in die Tabelle berechnet DynamoDB den Hash-Wert des Partitionsschlüssels, um zu ermitteln, welche Partition das Element enthalten soll. In dieser Partition können mehrere Elemente denselben Wert für den Partitionsschlüssel haben. DynamoDB speichert dann das Element zusammen mit den anderen Elementen mit demselben Partitionsschlüssel nach Sortierschlüssel sortiert in aufsteigender Reihenfolge.
Um ein Element aus der Tabelle zu lesen, müssen Sie den Partitions- und Sortierschlüsselwert für das Element angeben. DynamoDB berechnet den Hash-Wert des Partitionsschlüssels. Daraus ergibt sich die Partition, in der sich das Element befindet.
Sie können mehrere Elemente aus der Tabelle in einer einzigen Operation (Query) lesen, sofern die gewünschten Elemente denselben Partitionsschlüsselwert besitzen. DynamoDB gibt alle Elemente mit diesem Partitionsschlüsselwert zurück. Optional können Sie eine Bedingung auf den Sortierschlüssel anwenden, so dass nur die Elemente in einem bestimmten Wertebereich zurückgegeben werden.
Angenommen, die Tabelle Pets verfügt über einen zusammengesetzten Primärschlüssel, der aus AnimalType (Partitionsschlüssel) und Name (Sortierschlüssel) besteht. Das folgende Diagramm veranschaulicht, wie DynamoDB ein Element mit dem Partitionsschlüsselwert Dog und dem Sortierschlüsselwert Fido schreibt.
Um dasselbe Element aus der Tabelle Pets zu lesen, berechnet DynamoDB den Hash-Wert von Dog. Daraus ergibt sich die Partition, in der diese Elemente gespeichert sind. DynamoDB scannt dann die Attributwerte des Sortierschlüssels, bis Fido gefunden wird.
Um alle Elemente mit dem AnimalType Dog zu lesen, können Sie eine Query-Operation ohne Angabe einer Sortierschlüsselbedingung ausgeben. Standardmäßig werden die Elemente in der Reihenfolge zurückgegeben, in der sie gespeichert sind (d. h. in aufsteigender Reihenfolge nach Sortierschlüssel). Wahlweise können Sie stattdessen die absteigende Reihenfolge anfordern.
Um nur einige der Dog-Elemente abzufragen, können Sie eine Bedingung auf den Sortierschlüssel anwenden (z. B. nur die Dog-Elemente, in denen Name mit einem Buchstaben im Bereich von A bis K beginnt).
Anmerkung
In der DynamoDB-Tabelle gibt es keine Einschränkung in Bezug auf die Anzahl von eindeutigen Sortierschlüsselwerten pro Partitionsschlüsselwert. Wenn Sie viele Milliarden von Dog-Elementen in der Tabelle Pets speichern müssen, weist DynamoDB automatisch genügend Speicherplatz zu, um diese Anforderung zu erfüllen.