La pagina descrive le letture indirizzate a Spanner e come utilizzarle.
Le letture dirette in Spanner offrono la flessibilità di instradare transazioni di sola lettura e singole letture a un tipo di replica o a una regione specifica all'interno di una configurazione di istanze multiregionali o una configurazione regionale personalizzata con regioni di sola lettura facoltative.
Casi d'uso comuni
Alcuni casi d'uso comuni per le letture dirette includono:
- Bilanciamento del carico dei carichi di lavoro in più regioni per ottenere un utilizzo più uniforme della CPU.
- Isolare l'analisi nella tua applicazione riducendo al minimo l'impatto sui carichi di lavoro transazionali.
- Fornire l'isolamento parziale per le letture dei flussi di modifiche. Se utilizzi l'API Spanner per inviare flussi di modifiche ai dati di Spanner, puoi ridurre al minimo l'impatto sui carichi di lavoro transazionali utilizzando letture dirette.
Operazioni di query supportate
Operazioni di query | Le letture dirette sono supportate? |
---|---|
Lettura inattiva | Sì |
Lettura forte | Sì |
Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per le transazioni di lettura-scrittura e per i tipi DML partizionati di aggiornamenti collettivi. 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 va a buon fine e viene generato
un errore BAD_REQUEST
.
Limitazioni
Le letture dirette di Spanner hanno le seguenti limitazioni:
- Puoi utilizzare letture dirette solo in un'istanza Spanner che si trova in una configurazione di istanze multiregionali o in una configurazione regionale personalizzata con regioni facoltative di sola lettura.
- Non puoi utilizzare letture dirette con richieste di lettura/scrittura perché le richieste di scrittura vengono sempre gestite dalla regione leader.
- Non puoi utilizzare letture dirette nella console Google Cloud o in Google Cloud CLI. È disponibile utilizzando le API REST e RPC e le librerie client di Spanner.
- Puoi specificare un massimo di 10 repliche in un'unica lettura diretta.
- Se utilizzi la dashboard degli insight sul sistema o Metrics Explorer, nei grafici Operazioni al secondo, Operazioni al secondo per database e Operazioni al secondo per metodo API, potresti vedere la richiesta di lettura diretta in una località diversa da quella designata. In questo caso, le informazioni dei grafici potrebbero essere errate. Puoi verificare che le richieste di lettura siano instradate alle regioni che hai scelto utilizzando le metriche di utilizzo della CPU. Queste metriche mostrano le informazioni più accurate sulla posizione in cui viene instradato il traffico delle letture indirizzate.
Prima di iniziare
Prima di utilizzare le letture dirette, tieni presente quanto segue:
- L'applicazione potrebbe comportare latenza aggiuntiva se esegui il routing delle letture in una replica o in una regione diversa da quella più vicina all'applicazione.
- Puoi indirizzare 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 è abilitata e tutte le repliche specificate non sono disponibili o sono in stato non integro, Spanner instrada le richieste a una replica esterna all'elenco
includeReplicas
. Se disabiliti l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o sono in stato non integro, la richiesta di lettura diretta non va a buon fine.
Parametri di lettura diretta
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 devono essere prese in considerazione le letture indirizzate a regioni o tipi di replica specifici. Puoi specificare un massimo di 10includeReplicas
.replicaSelections
: consiste nellocation
o nella 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 lettura diretta. La località deve essere una delle regioni all'interno della configurazione multiregionale del tuo database. Se la località non è una delle regioni all'interno della configurazione multiregionale del tuo database, le richieste non verranno instradate come previsto. Vengono invece servite dalla regione più vicina. Ad esempio, puoi indirizzare le letture alla localitàus-central1
su un database nella configurazione dell'istanza per più regioninam6
.type
: il tipo di replica che gestisce la richiesta di lettura diretta. I tipi possibili sonoREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: il valore predefinito èFalse
, a indicare che il failover automatico è abilitato. Quando l'opzione di failover automatico è abilitata e tutte le repliche specificate non sono disponibili o sono in stato non integro, Spanner instrada le richieste a una replica esterna all'elencoincludeReplicas
. Se disabiliti l'opzione di failover automatico e tutte le repliche specificate non sono disponibili o sono in stato non integro, la richiesta di lettura diretta non va a buon fine. I valori possibili sonoTRUE
per disabilitato eFALSE
per abilitato.
excludeReplicas
: contiene un insieme ripetuto direplicaSelections
che è escluso dalla pubblicazione delle richieste. Spanner non instrada le richieste alle repliche in questo elenco.replicaSelections
: la località o il tipo di replica escluso dalla richiesta di lettura diretta. Se utilizziexcludeReplicas
, devi fornire almeno uno dei seguenti campi:location
: la località esclusa dalla pubblicazione della richiesta di lettura diretta.type
: il tipo di replica escluso dalla gestione della richiesta di lettura diretta. 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.
Utilizza letture dirette
Puoi utilizzare le librerie client di 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 sessione, 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 del 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:
Passaggi successivi
- Scopri come eseguire letture al di fuori delle transazioni.