La pagina descrive le letture dirette di Spanner e come utilizzarle.
Le letture dirette in Spanner offrono la flessibilità di routing transazioni di sola lettura e letture singole a una specifica un tipo di replica o una regione all'interno di una configurazione di istanza multiregionale o configurazione regionale con regioni facoltative di sola lettura.
Vantaggi
Le letture dirette offrono i seguenti vantaggi:
- Fornisci un maggiore controllo sui carichi di lavoro di bilanciamento del carico in più regioni per ottenere un utilizzo più uniforme della CPU ed evitare il provisioning eccessivo Istanze Spanner.
- Abilita l'isolamento dei carichi 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 forte | Sì |
Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per le transazioni di lettura/scrittura
e i tipi DML partizionati di aggiornamenti collettivi. 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 letture dirette solo in un'istanza Spanner che è in una configurazione di istanze multiregionali o 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 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 incorrere in latenza aggiuntiva se esegui il routing delle letture a un una replica o 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 buono stato, Spanner inoltra le richieste a una replica esterna all'elenco
includeReplicas
. Se disabiliti l'opzione di failover automatico le repliche specificate non sono disponibili o sono in stato non integro, le letture indirizzate non va a buon fine.
Parametri delle letture dirette
Se utilizzi l'API REST o RPC per eseguire letture dirette, devi definire
questi campi nel parametro directedReadOptions
. Puoi includere solo uno dei seguenti elementi:
includeReplicas
o excludeReplicas
, non entrambi.
includeReplicas
: contiene un insieme ripetuto direplicaSelections
. Questo elenco indica l'ordine in cui le letture indirizzate a regioni o repliche specifiche devono essere presi in considerazione. 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 localitàus-central1
su 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 richieste al database replica leader. 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
: l'impostazione predefinita èFalse
, che indica la modalità automatica. il failover sia abilitato. Quando l'opzione di failover automatico è abilitata e le repliche specificate non sono disponibili o sono in stato non integro, Spanner instrada le richieste a una replica esterna all'elencoincludeReplicas
. Se disabilita l'opzione di failover automatico e tutte le repliche specificate non disponibile o in stato non integro, la richiesta di lettura diretta non va a buon fine. I valori possibili includonoTRUE
per disattivato eFALSE
per abilitato.
excludeReplicas
: contiene un insieme ripetuto direplicaSelections
che dalla pubblicazione delle richieste. Spanner non esegue il routing alle repliche in questo elenco.replicaSelections
: la località o il tipo di replica esclusa di gestire la richiesta di lettura diretta. Se usiexcludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: la località esclusa dalla pubblicazione di richiesta di lettura diretta.type
: il tipo di replica escluso dalla pubblicazione dell'oggetto diretto legge la richiesta. I tipi possibili sonoREAD_WRITE
eREAD_ONLY
.
Per vedere un esempio del corpo di una richiesta REST, fai clic sulla Scheda REST nella sezione Utilizza letture dirette.
Utilizzare le letture guidate
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
Puoi utilizzare le seguenti API REST per eseguire letture dirette:
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.
In Corpo della richiesta, utilizza quanto segue:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Fai clic su Execute (Esegui). La risposta mostra i risultati della query.
RPC
Puoi utilizzare le seguenti API RPC per eseguire letture dirette:
Monitoraggio
Spanner fornisce una metrica di latenza per aiutarti a monitorare legge le attività nelle istanze. La metrica è disponibile in Cloud Monitoring.
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Puoi filtrare questa metrica utilizzando /serving_location
oppure
/is_directed_read
campi. Il campo /serving location
indica la posizione del server Spanner da cui viene eseguita la richiesta. La
Il campo /is_directed_read
indica se l'opzione di lettura diretta è
in un bucket in cui è abilitato
il controllo delle versioni.
Per un elenco completo delle metriche disponibili, vedi Elenco delle metriche per Spanner.
Passaggi successivi
- Scopri come eseguire letture al di fuori delle transazioni.