Auf dieser Seite werden gerichtete Spanner-Lesevorgänge und ihre Verwendung beschrieben.
Gerichtete Lesevorgänge in Spanner bieten die Flexibilität, schreibgeschützte Transaktionen und einzelne Lesevorgänge an einen bestimmten Replikattyp oder eine bestimmte Region innerhalb einer multiregionalen Instanzkonfiguration oder eine benutzerdefinierte regionale Konfiguration mit optionalen schreibgeschützten Regionen weiterzuleiten.
Gängige Anwendungsfälle
Einige häufige Anwendungsfälle für gerichtete Lesevorgänge sind:
- Load-Balancing von Arbeitslasten über mehrere Regionen, um eine gleichmäßigere CPU-Auslastung zu erreichen
- Isolieren von Analysen in Ihrer Anwendung durch Minimieren der Auswirkungen auf Transaktionsarbeitslasten
- Bereitstellen einer teilweisen Isolierung für Lesevorgänge im Änderungsstream Wenn Sie die Spanner API zum Streamen von Spanner-Datenänderungen verwenden, können Sie die Auswirkungen auf Transaktionsarbeitslasten mithilfe von gerichteten Lesevorgängen minimieren.
Unterstützte Abfragevorgänge
Abfragevorgänge | Werden gerichtete Lesevorgänge unterstützt? |
---|---|
Veraltete Lesevorgänge | Ja |
Starke Lesekompetenz | Ja |
Lese-Schreib-Transaktion | Nein |
Gerichtete Lesevorgänge werden für Lese-Schreib-Transaktionen und partitionierte DML-Typen von Bulk-Updates nicht unterstützt. Dies liegt daran, dass Lese-/Schreibtransaktionen in der führenden Region verarbeitet werden müssen. Wenn gerichtete Lesevorgänge in einer Lese-Schreib-Transaktion verwendet werden, schlägt die Transaktion mit dem Fehler BAD_REQUEST
fehl.
Beschränkungen
Für gerichtete Spanner-Lesevorgänge gelten die folgenden Einschränkungen:
- Sie können gerichtete Lesevorgänge nur in einer Spanner-Instanz in einer multiregionalen Instanzkonfiguration oder einer benutzerdefinierten regionalen Konfiguration mit optionalen schreibgeschützten Regionen verwenden.
- Sie können keine gerichteten Lesevorgänge mit Lese-/Schreibanfragen verwenden, da Schreibanfragen immer von der führenden Region verarbeitet werden.
- Sie können in der Google Cloud Console oder der Google Cloud CLI keine gerichteten Lesevorgänge verwenden. Sie ist mit der REST API und der RPC API sowie mit den Spanner-Clientbibliotheken verfügbar.
- Sie können maximal 10 Replikate in einem einzelnen gerichteten Lesevorgang angeben.
- Wenn Sie das Dashboard für Systemstatistiken oder den Metrics Explorer verwenden, sehen Sie in den Diagrammen „Vorgänge pro Sekunde“, „Vorgänge pro Sekunde nach Datenbank“ und „Vorgänge pro Sekunde nach API-Methode“ möglicherweise Ihre Anfrage für gerichtete Lesevorgänge an einem anderen Ort als dem von Ihnen angegebenen. In diesem Fall könnten die Informationen aus den Diagrammen falsch sein. Mit den CPU-Auslastungsmesswerten können Sie prüfen, ob Ihre Leseanfragen an die von Ihnen ausgewählten Regionen weitergeleitet werden. Diese Messwerte zeigen die genauesten Informationen dazu, wohin der Traffic für gerichtete Lesevorgänge weitergeleitet wird.
Hinweise
Beachten Sie Folgendes, bevor Sie gerichtete Lesevorgänge verwenden:
- Die Anwendung kann zusätzliche Latenz verursachen, wenn Sie Lesevorgänge an ein Replikat oder eine Region weiterleiten, die nicht der Anwendung am nächsten ist.
- Sie können Traffic basierend auf folgenden Kriterien weiterleiten:
- Name der Region (z. B.
us-central1
). - Replikattyp (Mögliche Werte:
READ_ONLY
undREAD_WRITE
).
- Name der Region (z. B.
- Die Option für automatische Failovers ist bei weitergeleiteten Lesevorgängen standardmäßig aktiviert. Wenn die Option für den automatischen Failover aktiviert ist und alle angegebenen Replikate nicht verfügbar oder fehlerhaft sind, leitet Spanner Anfragen an ein Replikat außerhalb der
includeReplicas
-Liste weiter. Wenn Sie die Option für automatisches Failover deaktivieren und alle angegebenen Replikate nicht verfügbar oder fehlerhaft sind, schlägt die Anfrage für gerichtete Lesevorgänge fehl.
Parameter für gerichtete Lesevorgänge
Wenn Sie die REST API oder die RPC API für gerichtete Lesevorgänge verwenden, müssen Sie diese Felder im Parameter directedReadOptions
definieren. Sie können nur includeReplicas
oder excludeReplicas
angeben, nicht beides.
includeReplicas
: enthält einen wiederholten Satz vonreplicaSelections
. Diese Liste gibt die Reihenfolge an, in der weitergeleitete Lesevorgänge in bestimmte Regionen oder Replikattypen berücksichtigt werden sollen. Sie können maximal 10includeReplicas
angeben.replicaSelections
: Besteht auslocation
oder Replikattype
, das die Anfrage für gerichtete Lesevorgänge verarbeitet. Wenn SieincludeReplicas
verwenden, müssen Sie mindestens eines der folgenden Felder angeben:location
: Der Standort, der die Anfrage für gerichtete Lesevorgänge bedient. Der Standort muss eine der Regionen in der multiregionalen Konfiguration Ihrer Datenbank sein. Wenn der Standort keine der Regionen in der multiregionalen Konfiguration Ihrer Datenbank ist, werden Anfragen nicht wie erwartet weitergeleitet. Stattdessen werden sie von der nächstgelegenen Region bedient. Beispielsweise können Sie Lesevorgänge zum Speicherortus-central1
in einer Datenbank in der multiregionalen Instanzkonfigurationnam6
weiterleiten.type
: Der Replikattyp, der die Anfrage für gerichtete Lesevorgänge verarbeitet. Mögliche Typen sindREAD_WRITE
undREAD_ONLY
.
autoFailoverDisabled
: Standardmäßig ist diese Einstellung aufFalse
gesetzt, was bedeutet, dass automatisches Failover aktiviert ist. Wenn die Option für das automatische Failover aktiviert ist und alle angegebenen Replikate nicht verfügbar oder fehlerhaft sind, leitet Spanner Anfragen an ein Replikat außerhalb derincludeReplicas
-Liste weiter. Wenn Sie die Option für automatisches Failover deaktivieren und alle angegebenen Replikate nicht verfügbar oder fehlerhaft sind, schlägt die Anfrage für gerichtete Lesevorgänge fehl. Mögliche Werte sindTRUE
für deaktiviert undFALSE
für aktiviert.
excludeReplicas
: enthält einen wiederholten Satz vonreplicaSelections
, der von der Verarbeitung von Anfragen ausgeschlossen ist. Spanner leitet Anfragen nicht an Replikate in dieser Liste weiter.replicaSelections
: Der Standort oder Replikattyp, der von der Verarbeitung der Anfrage für gerichtete Lesevorgänge ausgeschlossen ist. Wenn SieexcludeReplicas
verwenden, müssen Sie mindestens eines der folgenden Felder angeben:location
: Der Standort, der von der Verarbeitung der Anfrage für gerichtete Lesevorgänge ausgeschlossen ist.type
: Der Replikattyp, der von der Verarbeitung der gerichteten Leseanfrage ausgeschlossen ist. Mögliche Typen sindREAD_WRITE
undREAD_ONLY
.
Um ein Beispiel für den Text einer REST-Anfrage zu sehen, klicken Sie im Abschnitt Gezielte Lesevorgänge verwenden auf den REST-Tab.
Geleitete Lesevorgänge verwenden
Sie können die Spanner-Clientbibliotheken sowie die REST API und die RPC API verwenden, um gerichtete Lesevorgänge auszuführen.
Clientbibliotheken
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
Sie können die folgenden REST APIs verwenden, um gerichtete Lesevorgänge auszuführen:
So führen Sie beispielsweise direkte Lesevorgänge in us-central1
mit executeSQL
aus:
Klicken Sie auf
projects.instances.databases.sessions.executeSql
.Geben Sie für session (Sitzung) Folgendes ein:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Ersetzen Sie Folgendes:
- PROJECT-ID: Projekt-ID.
- INSTANCE-ID: Instanz-ID.
- DATABASE-ID: die Datenbank-ID.
- SESSION-ID: die Sitzungs-ID.
Sie erhalten den Wert
SESSION-ID
, wenn Sie eine Sitzung erstellen.
Verwenden Sie Folgendes für Request body (Requesttext):
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Klicken Sie auf Execute (Ausführen). In der Antwort werden die Abfrageergebnisse angegeben.
RPC
Sie können die folgenden RPC APIs verwenden, um gerichtete Lesevorgänge auszuführen: