

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.

# Bewährte Methoden zur Datenmodellierung: Empfehlungen für den Entwurf von Datenmodellen
<a name="data-modeling"></a>

Effektive Datenmodellierung ist entscheidend für die Optimierung der Leistung und Minimierung der Kosten bei der Arbeit mit Amazon Keyspaces (für Apache Cassandra). Dieses Thema behandelt wichtige Überlegungen und Empfehlungen für den Entwurf von Datenmodellen, die den Datenzugriffsmustern Ihrer Anwendung entsprechen. 
+ **Design des Partitionsschlüssels** — Der Partitionsschlüssel spielt eine entscheidende Rolle bei der Bestimmung, wie Daten auf die Partitionen in Amazon Keyspaces verteilt werden. Die Auswahl eines geeigneten Partitionsschlüssels kann sich erheblich auf die Abfrageleistung und die Durchsatzkosten auswirken. In diesem Abschnitt werden Strategien für die Gestaltung von Partitionsschlüsseln erörtert, die eine gleichmäßige Verteilung der Lese- und Schreibaktivität auf die Partitionen fördern. 
+ **Die wichtigsten Überlegungen:**
  + **Einheitliche Verteilung der Aktivitäten** — Streben Sie eine einheitliche Lese- und Schreibaktivität auf allen Partitionen an, um die Durchsatzkosten zu minimieren und die Burst-Kapazität effektiv zu nutzen. 
  + **Zugriffsmuster** — Stimmen Sie das Design Ihres Partitionsschlüssels auf die primären Datenzugriffsmuster Ihrer Anwendung ab.
  + **Partitionsgröße** — Vermeiden Sie es, zu große Partitionen zu erstellen, da dies die Leistung beeinträchtigen und die Kosten in die Höhe treiben kann. 

Um Datenmodelle einfacher zu visualisieren und zu entwerfen, können Sie die [NoSQL Workbench](workbench.md) verwenden.

**Topics**
+ [So verwenden Sie Partitionsschlüssel effektiv in Amazon Keyspaces](bp-partition-key-design.md)

# So verwenden Sie Partitionsschlüssel effektiv in Amazon Keyspaces
<a name="bp-partition-key-design"></a>

Der Primärschlüssel, der jede Zeile in einer Amazon Keyspaces-Tabelle eindeutig identifiziert, kann aus einer oder mehreren Partitionsschlüsselspalten bestehen, die bestimmen, in welchen Partitionen die Daten gespeichert werden, und einer oder mehreren optionalen Clusterspalten, die definieren, wie Daten innerhalb einer Partition geclustert und sortiert werden. 

Da der Partitionsschlüssel die Anzahl der Partitionen festlegt, in denen Ihre Daten gespeichert sind und wie die Daten auf diese Partitionen verteilt werden, kann die Art und Weise, wie Sie Ihren Partitionsschlüssel auswählen, erhebliche Auswirkungen auf die Leistung Ihrer Abfragen haben. Im Allgemeinen sollten Sie Ihre Anwendung so entwerfen, dass sie auf allen Partitionen auf der Festplatte einheitlich abläuft. 

Die gleichmäßige Verteilung der Lese- und Schreibaktivitäten Ihrer Anwendung auf alle Partitionen trägt zur Minimierung der Durchsatzkosten bei. Dies gilt sowohl für bedarfsgesteuerte als auch für bereitgestellte read/write Kapazitätsmodi. Wenn Sie beispielsweise den Modus mit bereitgestellter Kapazität verwenden, können Sie die Zugriffsmuster ermitteln, die Ihre Anwendung benötigt, und die Gesamtzahl der Lesekapazitätseinheiten (RCU) und Schreibkapazitätseinheiten (WCU) schätzen, die jede Tabelle benötigt. Amazon Keyspaces unterstützt Ihre Zugriffsmuster mithilfe des von Ihnen bereitgestellten Durchsatzes, sofern der Datenverkehr auf einer bestimmten Partition 3.000 RCUs und 1.000 nicht überschreitet. WCUs 

Wenn eine Partition einen anhaltend hohen Lese- oder Schreibdurchsatz aufweist, kann Amazon Keyspaces die Partition je nach Verkehrsmuster automatisch in zwei neue Partitionen aufteilen. Jede neue Partition enthält eine Teilmenge der Zeilen der ursprünglichen Partition, wodurch der Durchsatz gleichmäßig auf beide Partitionen verteilt wird.

Amazon Keyspaces bietet zusätzliche Flexibilität bei der Bereitstellung von Durchsätzen pro Partition, indem es Burst-Kapazität bereitstellt. Weitere Informationen finden Sie unter. [Effektive Nutzung von Burst-Kapazitäten in Amazon Keyspaces](throughput-bursting.md)

**Topics**
+ [Verwenden Sie Write-Sharding, um Workloads gleichmäßig auf die Partitionen zu verteilen](bp-partition-key-sharding.md)

# Verwenden Sie Write-Sharding, um Workloads gleichmäßig auf die Partitionen zu verteilen
<a name="bp-partition-key-sharding"></a>

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
<a name="bp-partition-key-sharding-random"></a>

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ügen`shard`, in der Zufallszahlen gespeichert werden. Beispiel:

```
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)`, und so weiter, 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
<a name="bp-partition-key-sharding-calculated"></a>

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 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.