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 saat membaca data.
Mengapa harus menetapkan batas stempel waktu? Jika database Anda didistribusikan secara geografis (yaitu, Anda membuat instance Spanner menggunakan konfigurasi instance multi-region), dan aplikasi Anda dapat mentoleransi beberapa data yang tidak terbaru saat membaca data, Anda bisa mendapatkan manfaat latensi dari menjalankan operasi baca yang tidak terbaru, bukan operasi baca yang kuat. (Pelajari lebih lanjut jenis bacaan ini di Bacaan.)
Jenis batas stempel waktu
Jenis batas stempel waktu adalah:
- Andal (default): membaca data terbaru.
- Keterlambatan terbatas: membaca versi data yang tidak lebih terlambat dari batas.
- Keterlambatan yang tepat: 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 di masa mendatang, Spanner akan menunggu stempel waktu tersebut sebelum menayangkan pembacaan.)
Catatan:
Meskipun pembacaan menggunakan mode terikat stempel waktu ini bukan bagian dari transaksi baca-tulis, pembacaan tersebut dapat memblokir penantian transaksi baca-tulis serentak untuk di-commit. Operasi baca dengan keusangan terbatas mencoba memilih stempel waktu untuk menghindari pemblokiran, tetapi masih dapat memblokir.
Pembacaan basi (yaitu menggunakan jenis kebasian yang dibatasi atau persis) memiliki manfaat performa maksimum pada interval kebasian terpanjang. Gunakan minimum keterlambatan 10 detik untuk mendapatkan manfaat.
Spanner melacak
earliest_version_timedatabase, 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 nanti.
Kuat
Spanner menyediakan jenis terikat untuk pembacaan kuat. Operasi baca yang kuat dijamin akan melihat efek semua transaksi yang telah di-commit sebelum dimulainya operasi baca. Selain itu, semua baris yang dihasilkan oleh satu operasi baca bersifat konsisten satu sama lain - jika ada bagian dari operasi baca yang mengamati transaksi, semua bagian dari operasi baca akan melihat transaksi tersebut.
Operasi baca kuat tidak dapat diulang: dua transaksi hanya baca kuat berturut-turut dapat menampilkan hasil yang tidak konsisten jika ada operasi tulis serentak. Jika konsistensi di seluruh pembacaan diperlukan, pembacaan harus dilakukan dalam transaksi yang sama atau pada stempel waktu pembacaan yang tepat.
Data tidak berlaku yang dibatasi
Spanner menyediakan jenis terikat untuk keusangan terikat. Mode keusangan yang dibatasi 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 pembacaan di replika terdekat yang tersedia tanpa pemblokiran.
Semua baris yang dihasilkan konsisten satu sama lain - jika ada bagian pembacaan yang mengamati transaksi, semua bagian pembacaan akan melihat transaksi tersebut. Pembacaan yang basi tidak dapat diulang: dua pembacaan basi, meskipun menggunakan batas basi yang sama, dapat dieksekusi pada stempel waktu yang berbeda dan dengan demikian menampilkan hasil yang tidak konsisten.
Operasi baca dengan keusangan terbatas biasanya sedikit lebih lambat daripada operasi baca dengan keusangan persis yang sebanding.
Ketidakberlakuan yang tepat
Spanner menyediakan jenis terikat untuk keusangan yang tepat. Batas stempel waktu ini menjalankan pembacaan pada stempel waktu yang ditentukan pengguna. Operasi baca pada stempel waktu dijamin akan melihat awalan yang konsisten dari histori transaksi global: operasi baca mengamati modifikasi yang dilakukan oleh semua transaksi dengan stempel waktu commit kurang dari atau sama dengan stempel waktu baca, dan tidak mengamati modifikasi yang dilakukan oleh transaksi dengan stempel waktu commit yang lebih besar. Transaksi ini akan diblokir hingga semua transaksi yang bertentangan yang mungkin ditetapkan stempel waktu commit kurang dari atau sama dengan stempel waktu baca selesai.
Stempel waktu dapat dinyatakan sebagai stempel waktu commit Spanner absolut atau keusangan relatif terhadap waktu saat ini.
Mode ini tidak memerlukan "fase negosiasi" untuk memilih stempel waktu. Akibatnya, mode ini dieksekusi sedikit lebih cepat daripada mode konkurensi dengan batas kedaluwarsa yang setara. Di sisi lain, operasi baca yang tidak berlaku dalam batas biasanya menampilkan hasil yang lebih baru.
Maksimum keterlambatan stempel waktu
Spanner terus mengumpulkan sampah data yang dihapus dan ditimpa di latar belakang untuk mendapatkan kembali ruang penyimpanan. Proses ini dikenal sebagai
GC versi. GC versi mereklaim versi setelah masa berlakunya berakhir melewati
version_retention_period database,
yang secara default adalah 1 jam, tetapi dapat dikonfigurasi hingga 1 minggu. Pembatasan ini juga berlaku untuk pembacaan dan/atau kueri SQL yang sedang berlangsung yang stempel waktunya menjadi terlalu lama saat dieksekusi. Pembacaan dan kueri SQL dengan stempel waktu baca yang terlalu lama akan gagal
dengan error FAILED_PRECONDITION. Satu-satunya pengecualian adalah Baca/Kueri Partisi dengan token partisi, yang akan mencegah pengumpulan sampah data yang sudah tidak berlaku selama sesi tetap aktif.