Auf dieser Seite werden von Spanner gesteuerte Lesevorgänge und ihre Verwendung beschrieben.
Mit gerichteten Lesevorgängen in Spanner können Sie schreibgeschützte Transaktionen und einzelne Lesevorgänge flexibel an einen bestimmten Replikattyp oder eine bestimmte Region innerhalb einer multiregionalen Instanzkonfiguration oder einer benutzerdefinierten regionalen Konfiguration mit optionalen schreibgeschützten Regionen weiterleiten.
Gängige Anwendungsfälle
Hier einige häufige Anwendungsfälle für gerichtete Lesevorgänge:
- Load-Balancing von Arbeitslasten über mehrere Regionen hinweg, um eine gleichmäßigere CPU-Auslastung zu erreichen
- Isolieren Sie Analysen in Ihrer Anwendung, indem Sie die Auswirkungen auf Transaktionsarbeitslasten minimieren.
- Bereitstellung einer teilweisen Isolierung für Lesevorgänge von Änderungsstreams. Wenn Sie die Spanner API zum Streamen von Spanner-Datenänderungen verwenden, können Sie die Auswirkungen auf Transaktionsarbeitslasten durch gerichtete Lesevorgänge minimieren.
Unterstützte Abfragevorgänge
Abfragevorgänge | Werden gerichtete Lesevorgänge unterstützt? |
---|---|
Veralteter Lesezugriff | Ja |
Aussagekräftiger Lesestoff | Ja |
Lese-Schreib-Transaktion | Nein |
Gezielte Lesevorgänge werden für Lese-Schreib-Transaktionen und partitionierte DML-Bulk-Aktualisierungen nicht unterstützt. Das liegt daran, dass Lese-Schreib-Transaktionen 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 Spanner-gerichtete Lesevorgänge gelten die folgenden Einschränkungen:
- Sie können gerichtete Lesevorgänge nur in einer Spanner-Instanz verwenden, die sich in einer multiregionalen Instanzkonfiguration oder einer benutzerdefinierten regionalen Konfiguration mit optionalen schreibgeschützten Regionen befindet.
- Sie können keine gerichteten Lesevorgänge mit Lese-/Schreibanfragen verwenden, da Schreibanfragen immer von der führenden Region verarbeitet werden.
- In der Google Cloud Console oder der Google Cloud CLI können keine gerichteten Lesevorgänge verwendet werden. Sie ist über die REST API und die RPC API sowie die Spanner-Clientbibliotheken verfügbar.
- Sie können in einem einzelnen gerichteten Lesevorgang maximal 10 Replikate angeben.
- Wenn Sie das Dashboard für Systemstatistiken oder den Metrics Explorer in den Diagrammen „Vorgänge pro Sekunde“, „Vorgänge pro Sekunde nach Datenbank“ und „Vorgänge pro Sekunde nach API-Methoden“ verwenden, wird Ihre Anfrage für gerichtete Lesevorgänge möglicherweise an einem anderen als dem von Ihnen angegebenen Ort angezeigt. In diesem Fall sind die Informationen aus den Diagrammen möglicherweise falsch. Mit den CPU-Auslastungsmesswerten können Sie prüfen, ob Ihre Leseanfragen an die ausgewählten Regionen weitergeleitet werden. Diese Messwerte geben die genauesten Informationen darüber an, wohin Traffic mit gerichteten Lesevorgängen 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, das 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 automatisches Failover in gerichteten Lesevorgängen ist standardmäßig aktiviert. Wenn der automatische 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 entweder includeReplicas
oder excludeReplicas
angeben, nicht beides.
includeReplicas
: enthält einen wiederholten Satz vonreplicaSelections
. Diese Liste gibt die Reihenfolge an, in der gerichtete Lesevorgänge in bestimmte Regionen oder Replikattypen berücksichtigt werden sollen. Sie können maximal 10includeReplicas
angeben.replicaSelections
: Besteht aus derlocation
oder dem Replikat-type
, das die Anfrage für gerichtete Lesevorgänge verarbeitet. Wenn SieincludeReplicas
verwenden, müssen Sie mindestens eines der folgenden Felder angeben:location
: Der Standort, von dem die Anfrage für gerichtete Lesevorgänge verarbeitet wird. Der Standort muss eine der Regionen innerhalb der multiregionalen Konfiguration Ihrer Datenbank sein. Wenn der Standort nicht zu den Regionen innerhalb der multiregionalen Konfiguration Ihrer Datenbank gehört, werden Anfragen nicht wie erwartet weitergeleitet. Stattdessen werden sie von der nächstgelegenen Region bedient. Sie können beispielsweise Lesevorgänge an den Speicherortus-central1
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
: Die Standardeinstellung istFalse
. Das bedeutet, dass der automatische Failover aktiviert ist. 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 ListeincludeReplicas
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 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 Anfrage für gerichtete Lesevorgänge ausgeschlossen ist.type
: Der Replikattyp, der von der Ausführung der gerichteten Leseanfrage ausgeschlossen ist. Mögliche Typen sindREAD_WRITE
undREAD_ONLY
.
Wenn Sie ein Beispiel für den Text einer REST-Anfrage aufrufen möchten, klicken Sie im Abschnitt Directed Reads auf den Tab „REST“.
Gesteuerte 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 gerichtete 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: