Auf dieser Seite werden Batch-Schreibanfragen in Spanner und ihre Verwendung zum Ändern von Spanner-Daten beschrieben.
Mit Spanner-Batch-Schreibvorgängen können Sie mehrere Zeilen in Ihre Spanner-Tabellen einfügen, aktualisieren oder löschen. Spanner-Batch-Schreibvorgänge unterstützen Schreibvorgänge mit geringer Latenz ohne Lesevorgang und geben Antworten zurück, wenn Mutationen in Batches angewendet werden. Für Batch-Schreibvorgänge gruppieren Sie verwandte Mutationen zusammen. Alle Mutationen in einer Gruppe werden atomar ausgeführt. Die Mutationen in den Gruppen werden in einer nicht festgelegten Reihenfolge angewendet und sind unabhängig voneinander (nicht atomar). Spanner muss nicht warten, bis alle Mutationen angewendet wurden, bevor eine Antwort gesendet wird. Das bedeutet, dass Batch-Schreibvorgänge teilweise fehlschlagen können. Sie können auch mehrere Batch-Schreibvorgänge gleichzeitig ausführen. Weitere Informationen finden Sie unter Batch-Schreibvorgänge verwenden.
Anwendungsfälle
Spanner-Batch-Schreibvorgänge sind besonders nützlich, wenn Sie eine große Anzahl von Schreibvorgängen ohne Lesevorgang ausführen möchten, aber keine atomare Transaktion für alle Mutationen erforderlich ist.
Wenn Sie Ihre DML-Anfragen in Batches verarbeiten möchten, verwenden Sie Batch-DML , um Ihre Spanner-Daten zu ändern. Weitere Informationen zu den Unterschieden zwischen DML und Mutationen finden Sie unter DML und Mutationen vergleichen.
Für Anfragen mit einer einzelnen Mutation empfehlen wir die Verwendung einer sperrenden Lese-/Schreib transaktion.
Beschränkungen
Für Spanner-Batch-Schreibvorgänge gelten die folgenden Einschränkungen:
Spanner-Batch-Schreibvorgänge sind nicht über die Google Cloud Console oder die Google Cloud CLI verfügbar. Sie sind nur über REST- und RPC-APIs und die Spanner-Clientbibliotheken verfügbar.
Der Wiederholungsschutz wird bei Batch-Schreibvorgängen nicht unterstützt. Es ist möglich, dass Mutationen mehrmals angewendet werden. Eine Mutation, die mehrmals angewendet wird, kann zu einem Fehler führen. Wenn beispielsweise eine Einfügemutation wiederholt wird, kann ein Fehler vom Typ „Bereits vorhanden“ auftreten. Wenn Sie generierte oder auf Commit-Zeitstempeln basierende Schlüssel in der Mutation verwenden, können zusätzliche Zeilen in die Tabelle eingefügt werden. Wir empfehlen, Ihre Schreibvorgänge so zu strukturieren, dass sie idempotent sind, um dieses Problem zu vermeiden.
Sie können eine abgeschlossene Batch-Schreibanfrage nicht zurücksetzen. Sie können eine laufende Batch-Schreibanfrage abbrechen. Wenn Sie einen laufenden Batch-Schreibvorgang abbrechen, werden Mutationen in nicht abgeschlossenen Gruppen zurückgesetzt. Mutationen in abgeschlossenen Gruppen werden in der Datenbank ausgeführt.
Die maximale Größe für eine Batch-Schreibanfrage entspricht dem Limit für eine Commit-Anfrage. Weitere Informationen finden Sie unter Limits beim Erstellen, Lesen, Aktualisieren und Löschen von Daten.
Batch-Schreibvorgänge verwenden
Um Batch-Schreibvorgänge zu verwenden, benötigen Sie die Berechtigung spanner.databases.write für die Datenbank, die Sie ändern möchten. Sie können Mutationen mit Batch-Schreibvorgängen
nicht atomar in einem einzigen Aufruf mit einer REST
oder RPC API
Anfrage ausführen.
Sie sollten die folgenden Mutationstypen zusammen gruppieren, wenn Sie Batch-Schreibvorgänge verwenden:
- Einfügen von Zeilen mit demselben Primärschlüsselpräfix in die übergeordnete und die untergeordnete Tabelle.
- Einfügen von Zeilen in Tabellen mit einer Fremdschlüsselbeziehung zwischen den Tabellen.
- Andere Arten von verwandten Mutationen, je nach Datenbankschema und Anwendungslogik.
Sie können auch Batch-Schreibvorgänge mit den Spanner-Clientbibliotheken verwenden.
Im folgenden Codebeispiel wird die Tabelle Singers mit neuen Zeilen aktualisiert.
Clientbibliotheken
C++
C#
Los
Java
Node
PHP
Python
Ruby
Nächste Schritte
- Weitere Informationen zu Spanner-Transaktionen.