Halaman ini menjelaskan cara menggunakan isolasi baca berulang di Spanner.
Baca berulang adalah tingkat isolasi yang
memastikan bahwa semua operasi baca dalam transaksi melihat snapshot yang konsisten
dari database seperti yang ada pada awal transaksi. Di Spanner, tingkat isolasi ini diterapkan menggunakan teknik yang juga biasa disebut isolasi snapshot. Pendekatan ini bermanfaat dalam skenario konkurensi baca-tulis tinggi ketika banyak transaksi membaca data yang mungkin diubah oleh transaksi lain. Dengan menggunakan snapshot tetap, baca berulang menghindari dampak performa dari tingkat isolasi serialisabel yang lebih ketat. Dengan konkurensi optimis default, operasi baca dapat dieksekusi tanpa memperoleh kunci dan tanpa memblokir operasi tulis serentak, yang berpotensi menghasilkan lebih sedikit transaksi yang dibatalkan yang mungkin perlu dicoba lagi karena konflik serialisasi. Dengan konkurensi pesimis,
operasi baca menggunakan snapshot, tetapi kunci eksklusif berlaku untuk data yang dibaca dari kueri FOR
UPDATE atau petunjuk lock_scanned_ranges=exclusive, dan data yang ditulis dengan
kueri DML. Konkurensi pesimis juga mengurangi kemungkinan konflik tulis-tulis. Untuk mengetahui informasi selengkapnya, lihat Ringkasan tingkat isolasi dan
Kontrol konkurensi.
Menetapkan tingkat isolasi
Anda dapat menetapkan tingkat isolasi pada transaksi baca-tulis di tingkat klien database atau tingkat transaksi menggunakan metode berikut:
Library klien
Go
Java
Node.js
Python
C++
C#
PHP
Ruby
REST
Anda dapat menggunakan
TransactionOptions.isolation_level
REST API untuk menetapkan tingkat isolasi pada transaksi baca-tulis dan hanya baca
di tingkat transaksi. Opsi yang valid adalah TransactionOptions.SERIALIZABLE dan TransactionOptions.REPEATABLE_READ. Secara default, Spanner menetapkan tingkat isolasi ke isolasi serialisabel.
Anda dapat menggunakan driver Spanner untuk menetapkan tingkat isolasi dan mode kunci baca sebagai parameter koneksi di tingkat koneksi atau sebagai opsi pernyataan SET di tingkat transaksi. Untuk mengetahui informasi selengkapnya tentang setiap
driver, lihat Ringkasan driver.
Anda juga dapat mengonfigurasi konkurensi penguncian untuk setiap tingkat isolasi. Untuk mengetahui informasi selengkapnya, lihat Kontrol konkurensi.
Kasus penggunaan yang tidak didukung
- Anda tidak dapat menetapkan isolasi baca berulang pada transaksi DML yang dipartisi.
- Semua transaksi hanya baca sudah beroperasi pada snapshot tetap dan tidak memerlukan kunci, sehingga menetapkan isolasi baca berulang dalam jenis transaksi ini tidak mengubah perilaku apa pun.
- Anda tidak dapat menetapkan isolasi baca berulang pada operasi hanya baca, sekali pakai, dan partisi menggunakan library klien Spanner. Library klien Spanner tidak akan memiliki opsi untuk menetapkan isolasi baca berulang pada operasi kueri hanya baca, sekali pakai, dan partisi.
Langkah berikutnya
Pelajari lebih lanjut tentang tingkat isolasi.
Pelajari tentang Kontrol konkurensi.
Pelajari cara menggunakan SELECT FOR UPDATE dalam isolasi baca berulang.
Pelajari lebih lanjut serialisabilitas dan konsistensi eksternal Spanner, lihat TrueTime dan konsistensi eksternal.