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 una regione specifici all'interno di una configurazione di istanza a due regioni o multiregionale o di una configurazione regionale personalizzata con una o più regioni di sola lettura facoltative.
Vantaggi
Le letture mirate offrono i seguenti vantaggi:
- Fornisci un maggiore controllo sui carichi di lavoro di bilanciamento del carico in più regioni per ottenere un utilizzo della CPU più uniforme ed evitare il provisioning eccessivo delle istanze Spanner.
- Abilita l'isolamento del carico di lavoro. Puoi indirizzare i carichi di lavoro di analisi e le letture di change stream a repliche Spanner specifiche per ridurre al minimo l'impatto sui carichi di lavoro transazionali in esecuzione sullo stesso database Spanner.
Operazioni di query supportate
Operazioni di query | Sono supportate le letture guidate? |
---|---|
Lettura dati inattivi | Sì |
Lettura forte | Sì |
Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per i tipi di aggiornamenti collettivi transazioni di lettura/scrittura e DML partizionato. Questo
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 riesce e viene visualizzato
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 trova in una configurazione dell'istanza a due regioni, in una configurazione dell'istanza multiregionale o in una configurazione regionale personalizzata con regioni di sola lettura facoltative.
- Non puoi utilizzare le letture dirette con le richieste di lettura-scrittura perché le richieste di scrittura vengono sempre gestite dalla regione leader.
- Non puoi utilizzare le letture dirette nella console Google Cloud o in Google Cloud CLI. È disponibile utilizzando 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, considera questi aspetti:
- L'applicazione potrebbe subire una latenza aggiuntiva se indirizzi le letture a una replica o una regione diversa da quella più vicina all'applicazione.
- Puoi instradare il traffico in base a:
- Nome della regione (ad esempio:
us-central1
). - Tipo di replica (valori possibili:
READ_ONLY
eREAD_WRITE
).
- Nome della regione (ad esempio:
- L'opzione di failover automatico nelle letture dirette è abilitata per impostazione predefinita. Quando l'opzione di failover automatico è attivata e tutte le repliche specificate non sono disponibili o non sono integre, Spanner indirizza le richieste a una replica al di fuori dell'elenco
includeReplicas
. Se disattivi l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o non sono integre, 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 tra
includeReplicas
e 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 dallocation
o dalla replicatype
che gestisce la richiesta di lettura diretta. Se utilizziincludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: La località che gestisce la richiesta di letture dirette. La posizione deve essere una delle regioni all'interno della configurazione a due regioni o multiregionale del database. Se la località non è una delle regioni all'interno della configurazione a due regioni o multiregionale del tuo database, le richieste non verranno indirizzate come previsto. ma vengono serviti dalla regione più vicina. Ad esempio, puoi indirizzare le letture alla posizioneus-central1
su un database nella configurazione dell'istanza multiregionalenam6
.Puoi anche specificare il parametro
location
con un valore letterale stringaleader
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, questo valore è impostato suFalse
, il che significa che il failover automatico è abilitato. Quando l'opzione di failover automatico è abilitata e tutte le repliche specificate non sono disponibili o non sono integre, Spanner indirizza le richieste a una replica al di fuori dell'elencoincludeReplicas
. Se disattivi l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o non sono integre, la richiesta di letture dirette non va a buon fine. I valori possibili includonoTRUE
per disattivato eFALSE
per attivato.
excludeReplicas
: contiene un insieme ripetuto direplicaSelections
che è escluso dalle richieste di pubblicazione. Spanner non indirizza le richieste alle repliche in questo elenco.replicaSelections
: La località o il tipo di replica escluso dalla gestione della richiesta di lettura diretta. Se utilizziexcludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: la località esclusa dalla gestione della richiesta di lettura mirata.type
: Il tipo di replica escluso dalla gestione della richiesta di lettura indirizzata. I possibili tipi includonoREAD_WRITE
eREAD_ONLY
.
Per vedere un esempio di come appare il 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 e RPC per eseguire letture dirette.
Librerie client
C++
C#
Go
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
.Per 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 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
Puoi utilizzare le seguenti API RPC per eseguire letture dirette:
Monitoraggio
Spanner fornisce una metrica di latenza per aiutarti a monitorare le attività di lettura diretta 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 gestita la richiesta. Il campo
/is_directed_read
indica se l'opzione di lettura diretta è
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.