La pagina descrive le letture dirette di Spanner e come utilizzarle.
Le letture dirette in Spanner offrono la flessibilità di instradare le transazioni di sola lettura e le singole letture a un tipo di replica o a una regione specifica all'interno di una configurazione dell'istanza a due regioni o multi-regione o di una configurazione regionale personalizzata con regioni di sola lettura facoltative.
Vantaggi
Le letture dirette offrono i seguenti vantaggi:
- Forniscono 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.
- Consentono l'isolamento del carico di lavoro. Puoi indirizzare i carichi di lavoro di analisi e le letture di modifiche in tempo reale 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 | Le letture dirette sono supportate? |
|---|---|
| Lettura dati inattivi | Sì |
| Lettura dati coerenti | Sì |
| Transazione di lettura/scrittura | No |
Le letture dirette non sono supportate per le transazioni di lettura/scrittura
e i tipi di 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 riesce e viene restituito 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 o multi-regione 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 Google Cloud console 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, considera quanto segue:
- L'applicazione potrebbe subire una latenza aggiuntiva se indirizzi le letture a una replica o a 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_ONLYeREAD_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 non sono integre, Spanner instrada le richieste a una replica al di fuori dell'elenco
includeReplicas. Se disabiliti 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 di lettura diretta
Se utilizzi l'API REST o RPC per eseguire letture dirette, devi definire questi campi nel parametro directedReadOptions. Puoi includere solo 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 dallalocationo daltypedella replica che gestisce la richiesta di letture dirette. Se utilizziincludeReplicas, devi fornire almeno uno dei seguenti campi:location: la località che gestisce la richiesta di letture dirette. La località deve essere una delle regioni all'interno della configurazione a due regioni o multi-regione del database. Se la località non è una delle regioni all'interno della configurazione a due regioni o multi-regione del database, le richieste non verranno instradate come previsto. Vengono invece gestite dalla regione più vicina. Ad esempio, puoi indirizzare le letture alla localitàus-central1su un database nella configurazione dell'istanza multi-regionenam6.Puoi anche specificare il
locationparametro con unleaderonon-leadervalore letterale stringa. Se inserisci il valoreleader, Spanner indirizza le 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_WRITEeREAD_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 instrada le richieste a una replica al di fuori dell'elencoincludeReplicas. Se disabiliti 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 includonoTRUEper disabilitato eFALSEper abilitato.
excludeReplicas: contiene un insieme ripetuto direplicaSelectionsche viene escluso dalla gestione delle richieste. Spanner non instrada le richieste alle repliche in questo elenco.replicaSelections: la località o il tipo di replica escluso dalla gestione della richiesta di letture dirette. Se utilizziexcludeReplicas, devi fornire almeno uno dei seguenti campi:location: la località esclusa dalla gestione della richiesta di letture dirette.type: il tipo di replica escluso dalla gestione della richiesta di letture dirette. I tipi possibili includonoREAD_WRITEeREAD_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 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
SESSION-IDvalore 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 località del server Spanner da cui viene gestita la richiesta. Il campo /is_directed_read indica se l'opzione di lettura diretta è abilitata.
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.