Pengantar
Saat membaca data di Spanner dalam transaksi hanya baca atau panggilan baca tunggal, Anda dapat menetapkan batas stempel waktu, yang memberi tahu Spanner cara memilih stempel waktu untuk membaca data.
Mengapa menetapkan batas stempel waktu? Jika database Anda didistribusikan secara geografis (yaitu, Anda membuat instance Spanner menggunakan konfigurasi instance multi-region), dan aplikasi Anda dapat mentolerir beberapa keusangan saat membaca data, Anda bisa mendapatkan manfaat latensi dari menjalankan pembacaan yang sudah tidak berlaku, bukan pembacaan yang kuat. (Pelajari lebih lanjut jenis operasi baca ini di Operasi baca.)
Jenis batas stempel waktu
Jenis batas stempel waktu adalah:
- Kuat (default): membaca data terbaru.
- Ketidakaktualan terikat: membaca versi data yang tidak lebih lama dari batas.
- Ketidakaktualan persis: membaca versi data pada stempel waktu yang tepat, misalnya, titik waktu di masa lalu, meskipun Anda dapat menentukan stempel waktu untuk waktu yang belum berlalu. (Jika Anda menentukan stempel waktu pada masa mendatang, Spanner akan menunggu stempel waktu tersebut sebelum menayangkan operasi baca.)
Catatan:
Meskipun pembacaan menggunakan mode terikat stempel waktu ini bukan bagian dari transaksi baca-tulis, pembacaan tersebut dapat memblokir menunggu transaksi baca-tulis serentak untuk dilakukan. Pembacaan keusangan terbatas mencoba memilih stempel waktu untuk menghindari pemblokiran, tetapi mungkin masih memblokir.
Operasi baca yang sudah tidak berlaku (yaitu menggunakan jenis keusangan terbatas atau persis) memiliki manfaat performa maksimum pada interval keusangan terpanjang. Gunakan keusangan minimum 10 detik untuk mendapatkan manfaat.
Spanner melacak
earliest_version_time
database, yang menentukan waktu paling awal saat versi data sebelumnya dapat dibaca. Anda tidak dapat membaca pada stempel waktu sebelum waktu versi paling awal.
Jenis batas stempel waktu Spanner dijelaskan secara lebih mendetail di bawah.
Kuat
Spanner menyediakan jenis terikat untuk pembacaan yang kuat. Pembacaan yang kuat dijamin untuk melihat efek dari semua transaksi yang telah di-commit sebelum dimulai pembacaan. Selain itu, semua baris yang dihasilkan oleh satu operasi baca konsisten satu sama lain - jika ada bagian dari operasi baca yang mengamati transaksi, semua bagian operasi baca akan melihat transaksi tersebut.
Operasi baca yang kuat tidak dapat diulang: dua transaksi hanya baca yang kuat berturut-turut mungkin menampilkan hasil yang tidak konsisten jika ada operasi tulis serentak. Jika konsistensi di seluruh pembacaan diperlukan, pembacaan harus dijalankan dalam transaksi yang sama atau pada stempel waktu pembacaan yang tepat.
Ketidakaktualan yang dibatasi
Spanner menyediakan jenis terikat untuk keusangan terbatas. Mode keusangan terbatas memungkinkan Spanner memilih stempel waktu baca, yang tunduk pada batas keusangan yang diberikan pengguna. Spanner memilih stempel waktu terbaru dalam batas keusangan yang memungkinkan eksekusi operasi baca di replika terdekat yang tersedia tanpa pemblokiran.
Semua baris yang dihasilkan konsisten satu sama lain - jika ada bagian dari pembacaan yang mengamati transaksi, semua bagian dari pembacaan akan melihat transaksi. Pembacaan yang sudah tidak berlaku dengan batas tidak dapat diulang: dua pembacaan yang sudah tidak berlaku, meskipun menggunakan batas keusangan yang sama, dapat dijalankan pada stempel waktu yang berbeda sehingga menampilkan hasil yang tidak konsisten.
Operasi baca keusangan terikat biasanya sedikit lebih lambat daripada operasi baca keusangan yang setara.
Ketidakaktualan persis
Spanner menyediakan jenis batas untuk keusangan yang tepat. Batas stempel waktu ini menjalankan operasi baca pada stempel waktu yang ditentukan pengguna. Operasi baca pada stempel waktu dijamin akan melihat awalan histori transaksi global yang konsisten: operasi ini mengamati modifikasi yang dilakukan oleh semua transaksi dengan stempel waktu commit kurang dari atau sama dengan stempel waktu baca, dan tidak mengamati modifikasi apa pun yang dilakukan oleh transaksi dengan stempel waktu commit yang lebih besar. Transaksi tersebut akan diblokir hingga semua transaksi yang bertentangan yang dapat diberi stempel waktu commit kurang dari atau sama dengan stempel waktu baca selesai.
Stempel waktu dapat dinyatakan sebagai stempel waktu commit Spanner absolut atau keusangan yang relatif terhadap waktu saat ini.
Mode ini tidak memerlukan "fase negosiasi" untuk memilih stempel waktu. Akibatnya, mode ini dieksekusi sedikit lebih cepat daripada mode serentak yang sudah tidak berlaku lagi dan dibatasi. Di sisi lain, operasi baca yang sudah tidak berlaku secara terbatas biasanya menampilkan hasil yang lebih baru.
Ketidakaktualan stempel waktu maksimum
Spanner terus mengumpulkan sampah data yang dihapus dan ditimpa
di latar belakang untuk mengklaim kembali ruang penyimpanan. Proses ini dikenal sebagai GC
versi. GC versi akan mengklaim kembali versi setelah masa berlakunya habis setelah version_retention_period
database, yang secara default adalah 1 jam, tetapi dapat dikonfigurasi hingga 1 minggu.
Batasan ini juga berlaku untuk operasi baca yang sedang berlangsung dan/atau kueri SQL yang stempel waktunya menjadi terlalu lama saat dieksekusi. Operasi baca dan kueri SQL dengan stempel waktu baca yang terlalu lama akan gagal dengan error FAILED_PRECONDITION
. Satu-satunya pengecualian adalah Partition Read/Query dengan token partisi, yang akan mencegah pembersihan sampah data yang sudah tidak berlaku saat sesi tetap aktif.