Verwenden Sie Write-Sharding, um Workloads gleichmäßig auf die Partitionen zu verteilen - Amazon Keyspaces (für Apache Cassandra)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Write-Sharding, um Workloads gleichmäßig auf die Partitionen zu verteilen

Eine Möglichkeit, Schreibvorgänge besser auf eine Partition in Amazon Keyspaces zu verteilen, besteht darin, den Speicherplatz zu erweitern. Dies kann auf verschiedene Arten geschehen. Sie können eine zusätzliche Partitionsschlüsselspalte hinzufügen, in die Sie Zufallszahlen schreiben, um die Zeilen auf die Partitionen zu verteilen. Oder Sie können eine Zahl verwenden, die basierend auf einer Abfrage berechnet wird.

Sharding mit zusammengesetzten Partitionsschlüsseln und Zufallswerten

Eine Strategie, um Lasten gleichmäßiger auf eine Partition zu verteilen, besteht darin, eine zusätzliche Partitionsschlüsselspalte hinzuzufügen, in die Sie Zufallszahlen schreiben. Anschließend werden die Schreibvorgänge zufällig auf den größeren Raum verteilt.

Stellen Sie sich zum Beispiel die folgende Tabelle vor, in der ein einziger Partitionsschlüssel ein Datum darstellt.

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

Um diese Tabelle gleichmäßiger auf die Partitionen zu verteilen, könnten Sie eine zusätzliche Partitionsschlüsselspalte hinzufügenshard, in der Zufallszahlen gespeichert werden. Beispielsweise:

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

Beim Einfügen von Daten können Sie eine Zufallszahl zwischen 1 und 200 für die shard Spalte wählen. Dies ergibt zusammengesetzte Partitionsschlüsselwerte wie (2020-07-09, 1)(2020-07-09, 2), usw., bis(2020-07-09, 200). Durch die Randomisierung des Partitionsschlüssels werden die Schreibvorgänge in die Tabelle jeden Tag gleichmäßig auf mehrere Partitionen verteilt. Dies führt zu einer besseren Parallelverarbeitung und einem höheren Gesamtdurchsatz.

Um jedoch alle Zeilen für einen bestimmten Tag zu lesen, müssten Sie die Zeilen nach allen Shards abfragen und dann die Ergebnisse zusammenführen. Beispielsweise würden Sie zuerst eine SELECT Anweisung für den Wert (2020-07-09, 1) des Partitionsschlüssels ausgeben. Geben Sie dann eine weitere SELECT Anweisung für (2020-07-09, 2) usw. aus(2020-07-09, 200). Schließlich müsste Ihre Anwendung die Ergebnisse all dieser SELECT Anweisungen zusammenführen.

Sharding mit zusammengesetzten Partitionsschlüsseln und berechneten Werten

Mit einer Randomisierungsstrategie kann der Schreibdurchsatz erheblich verbessert werden. Es ist jedoch schwierig, eine bestimmte Zeile zu lesen, da Sie nicht wissen, welcher Wert in die shard Spalte geschrieben wurde, als die Zeile geschrieben wurde. Um das Lesen einzelner Zeilen zu erleichtern, können Sie eine andere Strategie verwenden. Anstatt eine Zufallszahl zu verwenden, um die Zeilen auf die Partitionen zu verteilen, verwenden Sie eine Zahl, die Sie auf der Grundlage eines Objekts berechnen können, das Sie abfragen möchten.

Denken Sie an das vorherige Beispiel, in dem eine Tabelle das Datum des aktuellen Tages im Partitionsschlüssel verwendet. Nehmen wir nun an, dass jede Zeile über eine title Spalte verfügt, auf die zugegriffen werden kann, und dass Sie Zeilen in den meisten Fällen nicht nur nach Datum, sondern auch nach Titel suchen müssen. Bevor Ihre Anwendung die Zeile in die Tabelle schreibt, könnte sie anhand des Titels einen Hashwert berechnen und diesen zum Füllen der shard Spalte verwenden. Die Berechnung könnte eine Zahl zwischen 1 und 200 ergeben, die ähnlich wie bei der Zufallsstrategie relativ gleichmäßig verteilt ist.

Eine einfache Berechnung würde wahrscheinlich ausreichen, z. B. das Produkt der UTF-8-Codepunktwerte für die Zeichen im Titel, Modulo 200, + 1. Der Wert des zusammengesetzten Partitionsschlüssels wäre dann die Kombination aus Datum und Berechnungsergebnis.

Mit dieser Strategie werden die Schreibvorgänge gleichmäßig auf die Partitions-Schlüsselwerte und somit auch über die physischen Partitionen verteilt. Sie können problemlos eine SELECT Anweisung für eine bestimmte Zeile und ein bestimmtes Datum ausführen, da Sie den Partitionsschlüsselwert für einen bestimmten title Wert berechnen können.

Um alle Zeilen für einen bestimmten Tag zu lesen, müssen Sie trotzdem SELECT jeden der (2020-07-09, N) Schlüssel (wo N 1—200) benötigen, und Ihre Anwendung muss dann alle Ergebnisse zusammenführen. Der Vorteil dabei ist, dass Sie so vermeiden, dass ein einzelner „Hot Partition”-Schlüsselwert die gesamte Workload übernimmt.