Questa pagina descrive come utilizzare l'isolamento di lettura ripetibile in Spanner.
La lettura ripetibile è un livello di isolamento che
garantisce che tutte le operazioni di lettura all'interno di una transazione vedano uno snapshot coerente
del database così com'era all'inizio della transazione. In
Spanner, questo livello di isolamento viene implementato utilizzando una
tecnica comunemente chiamata anche isolamento dello snapshot. Questo approccio è
vantaggioso in scenari di concorrenza di lettura/scrittura elevata in cui numerose transazioni
leggono dati che altre transazioni potrebbero modificare. Utilizzando uno snapshot fisso, la lettura ripetibile evita gli impatti sul rendimento del livello di isolamento serializzabile più rigoroso. Con la sua concorrenza ottimistica predefinita, le letture possono
essere eseguite senza acquisire blocchi e senza bloccare le scritture simultanee, il che
comporta potenzialmente un numero inferiore di transazioni interrotte che potrebbero dover essere ritentate
a causa di conflitti di serializzazione. Con la concorrenza pessimistica,
le operazioni di lettura utilizzano gli snapshot, ma i blocchi esclusivi si applicano ai dati letti dalle query FOR
UPDATE o dagli hint lock_scanned_ranges=exclusive e ai dati scritti con
query DML. La concorrenza pessimistica riduce anche la probabilità di conflitti di scrittura-scrittura. Per ulteriori
informazioni, consulta Panoramica del livello di isolamento e
Controllo della concorrenza.
Imposta il livello di isolamento
Puoi impostare il livello di isolamento per le transazioni di lettura/scrittura a livello di client di database o di transazione utilizzando i seguenti metodi:
Librerie client
Go
Java
Node.js
Python
C++
C#
PHP
Ruby
REST
Puoi utilizzare l'API REST
TransactionOptions.isolation_level
per impostare il livello di isolamento delle transazioni di lettura/scrittura e di sola lettura
a livello di transazione. Le opzioni valide sono
TransactionOptions.SERIALIZABLE e TransactionOptions.REPEATABLE_READ. Per
impostazione predefinita, Spanner imposta il livello di isolamento su
isolamento serializzabile.
Puoi utilizzare i driver di Spanner per impostare il livello di isolamento e la modalità di blocco di lettura come parametro di connessione a livello di connessione o come opzione di istruzione a livello di transazione.SET Per saperne di più su ciascun driver, consulta la panoramica dei driver.
Puoi anche configurare la concorrenza di blocco per ogni livello di isolamento. Per maggiori informazioni, consulta Controllo della concorrenza.
Casi d'uso non supportati
- Non puoi impostare l'isolamento in lettura continua nelle transazioni DML partizionate.
- Tutte le transazioni di sola lettura operano già a uno snapshot fisso e non richiedono blocchi, quindi l'impostazione dell'isolamento di lettura ripetibile in questo tipo di transazione non modifica alcun comportamento.
- Non puoi impostare l'isolamento di lettura ripetibile su operazioni di sola lettura, monouso e di partizione utilizzando le librerie client Spanner Le librerie client Spanner non avranno l'opzione per impostare l'isolamento di lettura ripetibile su operazioni di query di sola lettura, monouso e di partizione.
Passaggi successivi
Scopri di più sui livelli di isolamento.
Scopri di più sul controllo della concorrenza.
Scopri come utilizzare SELECT FOR UPDATE nell'isolamento di lettura ripetibile.
Scopri di più sulla serializzabilità e sulla coerenza esterna di Spanner, consulta TrueTime e coerenza esterna.