Questa pagina descrive come utilizzare l'isolamento in 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ì come esisteva all'inizio della transazione. In Spanner, questo livello di isolamento viene implementato utilizzando una tecnica comunemente chiamata anche isolamento degli snapshot. Questo approccio è utile negli 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 sulle prestazioni del livello di isolamento serializzabile più rigoroso. Con la 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 riprovate 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 dai suggerimenti lock_scanned_ranges=exclusive e ai dati scritti con
le query DML. La concorrenza pessimistica riduce anche la probabilità di conflitti di scrittura-scrittura. Per ulteriori
informazioni, consulta la panoramica sul livello di isolamento e
il controllo della concorrenza.
Imposta il livello di isolamento
Puoi impostare il livello di isolamento sulle transazioni di lettura-scrittura a livello di client di database o di transazione utilizzando i seguenti metodi:
Librerie client
Vai
Java
Node.js
Python
C++
C#
REST
Puoi utilizzare l'
TransactionOptions.isolation_level
API REST per impostare il livello di isolamento sulle 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 dell'istruzione SET a livello di transazione. Per ulteriori informazioni su ogni
driver, consulta la panoramica dei driver.
Puoi anche configurare la concorrenza di blocco per ogni livello di isolamento. Per ulteriori informazioni, consulta Controllo della concorrenza.
Casi d'uso non supportati
- Non puoi impostare l'isolamento in lettura ripetibile sulle transazioni DML partizionate.
- Tutte le transazioni di sola lettura operano già con uno snapshot fisso e non richiedono blocchi, quindi l'impostazione dell'isolamento in lettura ripetibile in questo tipo di transazione non modifica alcun comportamento.
- Non puoi impostare l'isolamento in lettura ripetibile sulle operazioni di sola lettura, monouso e di partizione utilizzando le librerie client di Spanner. Le librerie client di Spanner non avranno l'opzione per impostare l'isolamento in lettura ripetibile sulle 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 in lettura ripetibile.
Scopri di più sulla serializzabilità e sulla coerenza esterna di Spanner, consulta TrueTime e coerenza esterna.