La pagina descrive le letture dirette 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 specifici all'interno di una configurazione di istanze per più regioni o di una configurazione a livello di regione personalizzata con regioni o regioni di sola lettura facoltative.
Casi d'uso comuni
Alcuni casi d'uso comuni per le letture dirette includono:
- Carichi di lavoro di bilanciamento del carico in più regioni per ottenere un utilizzo della CPU più uniforme.
- Isolare l'analisi nell'applicazione riducendo al minimo l'impatto sui carichi di lavoro transazionali.
- Fornisce l'isolamento parziale per le letture dei flussi di modifiche. Se utilizzi l'API Spanner per trasmettere in streaming le modifiche ai dati di Spanner, puoi ridurre al minimo l'impatto sui carichi di lavoro transazionali utilizzando le letture indirizzate.
Operazioni di query supportate
Operazioni di query | Le letture indirizzate sono supportate? |
---|---|
Lettura inattiva | Sì |
Lettura forte | Sì |
Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per i tipi di transazioni di lettura-scrittura e i tipi di DML partizionati di aggiornamenti collettivi. Questo perché le transazioni di lettura e scrittura devono essere elaborate nella regione leader. Se
le letture indirizzate vengono utilizzate in una transazione di lettura/scrittura, questa non va a buon fine e
viene generato un errore BAD_REQUEST
.
Limitazioni
Le letture dirette da Spanner hanno le seguenti limitazioni:
- Puoi utilizzare le letture indirizzate 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 le letture dirette con le richieste di lettura/scrittura perché quelle 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 indirizzata.
- Se utilizzi la dashboard degli insight di sistema o Metrics Explorer, nei grafici Operazioni al secondo, Operazioni al secondo per database e Operazioni al secondo per metodo API, potresti visualizzare la richiesta di letture indirizzate in una località diversa da quella da te designata. In questo caso, le informazioni dai grafici potrebbero essere errate. Puoi confermare che le richieste di lettura vengano instradate alle regioni che hai scelto utilizzando le metriche di utilizzo della CPU. Queste metriche mostrano le informazioni più accurate sul routing del traffico di lettura diretto.
Prima di iniziare
Prima di utilizzare le letture dirette, tieni presente quanto segue:
- L'applicazione potrebbe causare una latenza aggiuntiva se esegui il routing delle letture su una replica o 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 indirizzate è abilitata per impostazione predefinita. Quando l'opzione di failover automatico è abilitata e tutte le repliche specificate non sono disponibili o non sono integri, 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 non sono integri, la richiesta di lettura indirizzata non andrà a buon fine.
Parametri di lettura diretta
Se utilizzi l'API REST o RPC per eseguire letture indirizzate, devi definire questi campi nel parametro directedReadOptions
. Puoi includere solo uno tra
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 verso regioni o tipi di repliche specifiche. Puoi specificare un massimo di 10includeReplicas
.replicaSelections
: consiste nella richiesta di lettura diretta dilocation
otype
che invia la richiesta. 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 per più regioni del tuo database, le richieste non verranno instradate come previsto. ma sono serviti dalla regione più vicina. Ad esempio, puoi indirizzare le letture alla localitàus-central1
su un database nella configurazione dell'istanza multiregionalenam6
.type
: il tipo di replica che gestisce la richiesta di lettura diretta. I tipi possibili sonoREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: il valore predefinito èFalse
, il che significa che è abilitato il failover automatico. Se l'opzione di failover automatico è abilitata e tutte le repliche specificate non sono disponibili o non sono integri, 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 non sono integri, la richiesta di lettura indirizzata non andrà a buon fine. I valori possibili includonoTRUE
per disabilitato eFALSE
per abilitato.
excludeReplicas
: contiene un insieme ripetuto direplicaSelections
escluso dalle richieste di pubblicazione. Spanner non instrada le richieste alle repliche in questo elenco.replicaSelections
: la località o il tipo di replica escluso dalla pubblicazione della richiesta di letture indirizzate. 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 sonoREAD_WRITE
eREAD_ONLY
.
Per un esempio dell'aspetto di un corpo di una richiesta REST, fai clic sulla scheda REST nella sezione Usa letture dirette.
Usa letture dirette
Puoi utilizzare le librerie client di Spanner e le API REST e RPC per eseguire le letture indirizzate.
Librerie client
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
Per eseguire letture dirette puoi usare le API REST seguenti:
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.
Per 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 usare le seguenti API RPC per eseguire letture dirette:
Passaggi successivi
- Scopri come eseguire letture al di fuori delle transazioni.