Halaman ini menjelaskan cara menggunakan isolasi baca yang dapat diulang di Spanner.
Repeatable read adalah tingkat isolasi yang
memastikan bahwa semua operasi baca dalam transaksi melihat snapshot database yang konsisten
sebagaimana adanya pada awal transaksi. Di
Spanner, tingkat isolasi ini diterapkan menggunakan
teknik yang juga biasa disebut snapshot isolation. Pendekatan ini bermanfaat dalam skenario konkurensi baca-tulis tinggi di mana banyak transaksi membaca data yang mungkin dimodifikasi oleh transaksi lain. Dengan menggunakan snapshot tetap,
bacaan yang dapat diulang menghindari dampak performa dari tingkat isolasi
yang dapat diserialisasi dan lebih ketat. Dengan konkurensi optimis defaultnya, operasi baca dapat
dijalankan 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 pesimistis,
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 pesimistis juga mengurangi kemungkinan konflik tulis-tulis. Untuk mengetahui informasi selengkapnya, lihat Ringkasan tingkat isolasi dan
Kontrol serentak.
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#
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 informasi selengkapnya, lihat Kontrol serentak.
Kasus penggunaan yang tidak didukung
- Anda tidak dapat menetapkan isolasi baca yang dapat diulang pada transaksi DML yang dipartisi.
- Semua transaksi hanya baca sudah beroperasi pada snapshot tetap dan tidak memerlukan kunci, sehingga menyetel isolasi repeatable read dalam jenis transaksi ini tidak mengubah perilaku apa pun.
- Anda tidak dapat menyetel isolasi baca yang dapat diulang pada operasi hanya baca, sekali pakai, dan partisi menggunakan library klien Spanner. Library klien Spanner tidak akan memiliki opsi untuk menyetel isolasi baca yang dapat diulang pada operasi kueri hanya baca, sekali pakai, dan partisi.
Langkah berikutnya
Pelajari lebih lanjut tingkat isolasi.
Pelajari Kontrol serentak.
Pelajari cara menggunakan SELECT FOR UPDATE dalam isolasi baca yang dapat diulang.
Untuk mempelajari lebih lanjut serialisabilitas dan konsistensi eksternal Spanner, lihat TrueTime dan konsistensi eksternal.