Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Best Practices für Massenladen

Diese Seite enthält Richtlinien für das effiziente Laden großer Datenmengen im Bulk in Cloud Spanner.

Es gibt mehrere Möglichkeiten, Daten in großen Mengen in Cloud Spanner zu laden:

Leistungsrichtlinien für das Laden im Bulk

Wenn Sie einige Richtlinien beachten, können Sie eine optimale Leistung beim Laden im Bulk erzielen:

  • Minimieren Sie die Anzahl der Splits, die an jeder Schreib-Transaktion beteiligt sind. Der Durchsatz für Schreibvorgänge erhöht sich, wenn eine Transaktion weniger Splits enthält. Dadurch wird auch die Leistung maximiert.

  • Maximieren Sie die Partitionierung, um das Schreiben der Partitionen auf Worker-Aufgaben zu verteilen.

Cloud Spanner verwendet eine lastbasierte Aufteilung, um die Datenlast gleichmäßig auf die Knoten zu verteilen. Besteht einige Minuten lang eine hohe Belastung, führt Cloud Spanner Teilungsgrenzen zwischen Zeilen nicht verschränkter Tabellen ein. Der Durchsatz sollte sich für Schreibvorgänge alle paar Minuten verdoppeln, wenn die Datenlast gut verteilt ist und Sie die Best Practices für das Schemadesign und das Laden im Bulk befolgen, bis die verfügbaren CPU-Ressourcen in Ihrer Instanz belegt sind.

Daten nach Primärschlüssel partitionieren

Partitionieren Sie die Daten mit dem folgenden Muster nach dem Primärschlüssel, um einen optimalen Schreibdurchsatz für das Laden im Bulk zu erhalten:

  • Jede Partition enthält abhängig von den Schlüsselspalten einen Bereich von aufeinanderfolgenden Zeilen.
  • Jeder Commit enthält nur Daten für eine einzige Partition.

Es sollten zehnmal so viele Partitionen wie Knoten in Ihrer Cloud Spanner-Instanz sein. So weisen Sie Partitionen Zeilen zu:

  • Filtern Sie die Daten nach Primärschlüssel.
  • Teilen Sie die Daten in 10 * (Anzahl Knoten) getrennte Partitionen gleicher Größe auf.
  • Erstellen Sie für jede Partition eine eigene Worker-Aufgabe und weisen Sie diese zu. Die Worker-Aufgaben werden in Ihrer Anwendung erstellt. Das ist keine Cloud Spanner-Funktion.

Nach diesem Muster ergibt sich normalerweise ein Gesamtdurchsatz von 10–20 MB pro Sekunde und Knoten für den Bulk-Schreibvorgang.

Cloud Spanner erstellt und aktualisiert beim Laden von Daten Splits, um die Belastung der Knoten in Ihrer Instanz auszugleichen. Bei diesem Vorgang kann es zu einem vorübergehenden Rückgang des Durchsatzes kommen.

Beispiel

Eine regionale Konfiguration hat 3 Knoten. Es sind 90.000 Zeilen in einer nicht verschränkten Tabelle enthalten. Die Primärschlüssel in der Tabelle reichen von 1 bis 90.000.

  • Zeilen: 90.000 Zeilen
  • Knoten: 3
  • Partitionen: 10 * 3 = 30
  • Zeilen pro Partition: 90.000 / 30 = 3.000

Die erste Partition umfasst den Schlüsselbereich 1 bis 3.000. Die zweite Partition umfasst den Schlüsselbereich 3.001 bis 6.000. Die 30. Partition umfasst den Schlüsselbereich 87.001 bis 90.000. (Sie sollten in einer großen Tabelle keine sequentiellen Schlüssel verwenden. Dieses Beispiel dient nur zur Veranschaulichung.)

Jede Worker-Aufgabe sendet die Schreibvorgänge für eine einzelne Partition. Innerhalb jeder Partition sollten Sie die Zeilen nach Primärschlüssel schreiben. Auch bei zufälligen Schreibvorgängen in Bezug auf den Primärschlüssel ergibt sich so ein angemessen hoher Durchsatz. Über Testläufe erfahren Sie, welcher Ansatz die beste Leistung für Ihr Dataset bietet.

Wenn Sie keine Partitionen verwenden wollen

Wenn zufällig ausgewählte Zeilen in einen Commit geschrieben werden, in dem von jeder Mutation eine einzige Zeile eingefügt wird, kann dies langsamer sein, als die Zeilen jeweils einzeln zu schreiben. Es sind wahrscheinlich mehrere Splits beteiligt, da jede zufällig ausgewählte Zeile zu einem anderen Split gehören kann. Im ungünstigsten Fall umfasst jeder Schreibvorgang jeden Split in der Cloud Spanner-Instanz. Wie bereits erwähnt, verringert sich der Schreibdurchsatz, wenn viele Splits an einem Schreibvorgang beteiligt sind.

Pushback vermeiden

Es können mehr Schreibanfragen gesendet werden, als Cloud Spanner verarbeiten kann. Bei dieser Überlastung bricht Cloud Spanner Transaktionen ab. Das wird Pushback genannt. Bei Transaktionen mit Schreibzugriff wiederholt Cloud Spanner die Transaktion automatisch. In diesen Fällen hat der Pushback eine hohe Latenz. Bei hohen Lasten kann der Pushback bis zu einer Minute dauern. Bei sehr großer Last kann der Pushback mehrere Minuten dauern. Sie können einen Pushback vermeiden, indem Sie die Schreibanfragen drosseln, um die CPU-Auslastung in einem angemessenen Grenzwert zu halten.

Commit von Mutationen mit 1 MB bis 5 MB gleichzeitig

Sowohl kleine als auch große Schreibvorgänge in Cloud Spanner sind mit einem gewissen Aufwand verbunden. Maximieren Sie die Datenmenge, die pro Schreibvorgang gespeichert wird, um den Durchsatz zu maximieren. Größere Schreibvorgänge senken den Aufwand pro Schreibvorgang. Es empfiehlt sich, für jeden Commit eine Mutation für Hunderte von Zeilen auszuführen. Wenn relativ große Zeilen geschrieben werden, bietet eine Commit-Größe von 1 MB bis 5 MB normalerweise die beste Leistung. Wenn Sie kleine oder indexierte Werte schreiben, sollten Sie in der Regel höchstens einige hundert Zeilen in einem einzigen Commit schreiben. Beachten Sie unabhängig von der Commit-Größe und der Anzahl der Zeilen, dass es eine Beschränkung von 20.000 Mutationen pro Commit gibt. Sie sollten den Durchsatz testen und messen, um die optimale Leistung zu ermitteln.

Commits mit mehr als 5 MB oder mehr als ein paar hundert Zeilen bieten keinen zusätzlichen Nutzen. Außerdem besteht die Gefahr, dass die Cloud-Spanner-Grenzwerte für Commit-Größe und Mutationen pro Commit überschritten werden.

Richtlinien für sekundäre Indexe

Wenn Ihre Datenbank über sekundäre Indexe verfügt, müssen Sie wählen, ob Sie die Indexe vor oder nach dem Laden der Tabellendaten dem Datenbankschema hinzufügen.

  • Wenn Sie den Index vor dem Laden der Daten hinzufügen, kann die Schemaänderung sofort abgeschlossen werden. Allerdings dauert jeder Schreibvorgang, der sich auf den Index auswirkt, länger, da auch der Index aktualisiert werden muss. Wenn der Datenladevorgang abgeschlossen ist, kann die Datenbank sofort mit allen vorhandenen Indexen verwendet werden. Wenn Sie eine Tabelle und ihre Indexe gleichzeitig erstellen möchten, senden Sie die DDL-Anweisungen für die neue Tabelle und die neuen Indexe in einer einzigen Anfrage an Cloud Spanner.

  • Wenn Sie den Index nach dem Laden der Daten hinzufügen, ist jeder Schreibvorgang effizient. Die Schemaänderung für jeden Index-Backfill kann jedoch lange dauern. Die Datenbank kann erst dann vollständig verwendet werden, wenn alle Schemaänderungen abgeschlossen sind.

Als Faustregel gilt: Wenn die Datenbank weniger als 40 Indexe enthält, fügen Sie die Indexe nach dem Laden der Daten hinzu. Bei Datenbanken mit mehr als 40 Indexen fügen Sie die Indexe vor dem Laden der Daten hinzu.

Durchsatz testen und messen

Es kann schwierig sein, den Durchsatz vorherzusagen. Sie sollten Ihre Strategie testen, Daten im Bulk zu laden, bevor Sie dies tatsächlich ausführen. Ein ausführliches Beispiel für die Partitionierung und Überwachung von Leistung finden Sie unter Durchsatz für die Datenlast maximieren.

Best Practices für das periodische Laden im Bulk in eine vorhandene Datenbank

Wenn Sie eine vorhandene Datenbank aktualisieren, die Daten enthält, jedoch keine sekundären Indexe hat, gelten weiterhin die Empfehlungen in diesem Thema.

Bei sekundären Indexen hilft Ihnen diese Anleitung wahrscheinlich gut weiter. Die Leistung hängt davon ab, wie viele Splits im Durchschnitt an Ihren Transaktionen beteiligt sind. Wenn der Durchsatz zu niedrig ausfällt, können Sie Folgendes versuchen:

  • Fügen Sie eine geringere Anzahl von Mutationen in jeden Commit ein. Das kann den Durchsatz erhöhen.
  • Wenn Ihr Upload die aktuelle Gesamtgröße der zu aktualisierenden Tabelle überschreitet, löschen Sie die sekundären Indexe und fügen Sie sie nach dem Hochladen der Daten neu hinzu. Dieser Schritt ist normalerweise nicht erforderlich, kann jedoch den Durchsatz verbessern.

Best Practices für den Import von Avro-Dateien

Diese Seiten enthalten Informationen zur Verbesserung der Importleistung von Avro-Dateien:

Best Practices für die Verwendung des Dataflow-Connectors

Leistungstipps zur Verwendung des Dataflow-Connectors finden Sie unter In Cloud Spanner schreiben und Daten umwandeln.