La pagina descrive le letture dirette di Spanner e come utilizzarle.
Le letture dirette in Spanner offrono la flessibilità di instradare transazioni di sola lettura e letture singole a un tipo di replica o a una regione specifica all'interno di una configurazione di istanze multi-regione o di una configurazione regionale personalizzata con regioni di sola lettura facoltative.
Vantaggi
Le letture dirette offrono i seguenti vantaggi:
- Fornisci un maggiore controllo sui workload di bilanciamento del carico in più regioni per ottenere un utilizzo della CPU più uniforme ed evitare il provisioning eccessivo delle istanze Spanner.
- Attiva l'isolamento del carico di lavoro. Puoi indirizzare i carichi di lavoro di analisi e le letture degli stream di variazioni a repliche Spanner specifiche per ridurre al minimo l'impatto sui carichi di lavoro transazionali in esecuzione nello stesso database Spanner.
Operazioni di query supportate
Operazioni di query | Le letture dirette sono supportate? |
---|---|
Lettura non aggiornata | Sì |
Lettura chiara | Sì |
Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per i tipi di aggiornamenti collettivi delle transazioni di lettura/scrittura
e della DML partizionata. Questo accade perché le transazioni di lettura/scrittura devono essere elaborate nella regione leader. Se le letture dirette vengono utilizzate in una transazione di lettura/scrittura, la transazione non va a buon fine con un errore BAD_REQUEST
.
Limitazioni
Le letture dirette di Spanner presentano le seguenti limitazioni:
- Puoi utilizzare le letture dirette solo in un'istanza Spanner che si trovi in una configurazione di istanze multiregionali o in una configurazione regionale personalizzata con regioni facoltative di sola lettura.
- Non puoi utilizzare le letture dirette con le richieste di lettura/scrittura perché le richieste di scrittura vengono sempre eseguite dalla regione leader.
- Non puoi utilizzare le letture dirette nella console Google Cloud o in Google Cloud CLI. È disponibile tramite le API REST e RPC e le librerie client Spanner.
- Puoi specificare un massimo di 10 repliche in una singola lettura diretta.
Prima di iniziare
Prima di utilizzare le letture dirette, tieni presente quanto segue:
- L'applicazione potrebbe presentare una latenza aggiuntiva se indirizzi le letture a una replica o a una regione diversa da quella più vicina all'applicazione.
- Puoi indirizzare il traffico in base a:
- Nome della regione (ad es.
us-central1
). - Tipo di replica (valori possibili:
READ_ONLY
eREAD_WRITE
).
- Nome della regione (ad es.
- L'opzione di failover automatico nelle letture dirette è attiva per impostazione predefinita. Quando l'opzione di failover automatico è attivata e tutte le repliche specificate non sono disponibili o non sono in stato corretto, Spanner inoltra le richieste a una replica esterna all'elenco
includeReplicas
. Se disattivi l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o non sono in stato corretto, la richiesta di letture dirette non va a buon fine.
Parametri delle letture dirette
Se utilizzi l'API REST o RPC per eseguire letture mirate, devi definire questi campi nel parametro directedReadOptions
. Puoi includere solo uno di includeReplicas
o excludeReplicas
, non entrambi.
includeReplicas
: contiene un insieme ripetuto direplicaSelections
. Questo elenco indica l'ordine in cui devono essere prese in considerazione le letture dirette a regioni o tipi di replica specifici. Puoi specificare un massimo di 10includeReplicas
.replicaSelections
: è costituito dalocation
o dalla replicatype
che gestisce la richiesta di letture dirette. Se utilizziincludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: la posizione che serve la richiesta di letture dirette. La località deve essere una delle regioni all'interno della configurazione multiregionale del database. Se la località non è una delle regioni all'interno della configurazione multiregionale del database, le richieste non verranno inoltrate come previsto. ma vengono pubblicate dalla regione più vicina. Ad esempio, puoi indirizzare le letture alla posizioneus-central1
in un database nella configurazione dell'istanza multiregionalenam6
.Puoi anche specificare il parametro
location
con una stringa letteraleleader
onon-leader
. Se inserisci il valoreleader
, Spanner indirizza le tue richieste alla replica leader del database. Al contrario, se inserisci il valorenon-leader
, Spanner soddisfa la richiesta nella replica non leader più vicina.type
: il tipo di replica che gestisce la richiesta di letture dirette. I tipi possibili includonoREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: per impostazione predefinita, è impostato suFalse
, il che significa che il failover automatico è abilitato. Quando l'opzione di failover automatico è attivata e tutte le repliche specificate non sono disponibili o non sono in buono stato, Spanner inoltra le richieste a una replica esterna all'elencoincludeReplicas
. Se disattivi l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o non sono in stato corretto, la richiesta di letture dirette non va a buon fine. I valori possibili includonoTRUE
per disattivato eFALSE
per abilitato.
excludeReplicas
: contiene un insieme ripetuto direplicaSelections
che è escluso dalla pubblicazione delle richieste. Spanner non inoltra le richieste alle repliche in questo elenco.replicaSelections
: la località o il tipo di replica esclusi dall'invio della richiesta di letture dirette. Se utilizziexcludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: la località esclusa dalla pubblicazione della richiesta di letture dirette.type
: il tipo di replica escluso dalla pubblicazione della richiesta di letture dirette. I tipi possibili includonoREAD_WRITE
eREAD_ONLY
.
Per vedere un esempio di come appare il corpo di una richiesta REST, fai clic sulla scheda REST nella sezione Utilizzare le letture dirette.
Utilizzare le letture dirette
Puoi utilizzare le librerie client Spanner e le API REST ed RPC per eseguire letture mirate.
Librerie client
C++
C#
Vai
Java
Node.js
PHP
Python
Ruby
REST
Per eseguire letture mirate, puoi utilizzare le seguenti API REST:
Ad esempio, per eseguire letture dirette in us-central1
utilizzando executeSQL
:
Fai clic su
projects.instances.databases.sessions.executeSql
.In session, inserisci:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Sostituisci quanto segue:
- PROJECT-ID: l'ID progetto.
- INSTANCE-ID: l'ID istanza.
- DATABASE-ID: l'ID database.
- SESSION-ID: l'ID sessione.
Ricevi il valore
SESSION-ID
quando crei una sessione.
Per Request body (Corpo della richiesta), utilizza quanto segue:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Fai clic su Esegui. La risposta mostra i risultati della query.
RPC
Per eseguire letture mirate, puoi utilizzare le seguenti API RPC:
Monitoraggio
Spanner fornisce una metrica sulla latenza per aiutarti a monitorare le attività di lettura dirette nelle tue istanze. La metrica è disponibile in Cloud Monitoring.
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Puoi filtrare questa metrica utilizzando i campi /serving_location
o
/is_directed_read
. Il campo /serving location
indica la posizione del server Spanner da cui viene eseguita la richiesta. Il campo
/is_directed_read
indica se l'opzione Letture dirette è attivata.
Per un elenco completo delle metriche disponibili, consulta l'elenco delle metriche per Spanner.
Passaggi successivi
- Scopri come eseguire letture al di fuori delle transazioni.