Batas stempel waktu

Pengantar

Saat membaca data di Spanner dalam transaksi hanya baca atau panggilan baca tunggal, Anda dapat menetapkan terikat stempel waktu, yang memberi tahu Spanner cara memilih stempel waktu untuk membaca data.

Mengapa menetapkan batas stempel waktu? Jika database Anda terdistribusi secara geografis (yaitu, Anda membuat instance Spanner menggunakan konfigurasi instance multi-region), dan aplikasi dapat menoleransi beberapa penghentian saat membaca data, Anda dapat memperoleh manfaat latensi dari menjalankan pembacaan yang sudah tidak berlaku, bukan pembacaan yang kuat. (Pelajari jenis operasi baca lebih lanjut di Bacaan.)

Jenis terikat stempel waktu

Jenis-jenis batas stempel waktu adalah:

  • Kuat (default): membaca data terbaru.
  • Usang terikat: membaca versi data yang tidak lebih usang daripada terikat.
  • Data usang: baca versi data pada stempel waktu yang tepat, misalnya pada 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 operasi baca.)

Catatan:

  • Meskipun operasi baca menggunakan mode terikat stempel waktu ini bukan bagian dari transaksi baca-tulis, mode tersebut dapat memblokir proses menunggu transaksi baca-tulis serentak untuk di-commit. Pembacaan usang yang terikat mencoba memilih stempel waktu untuk menghindari pemblokiran, tetapi mungkin masih terblokir.

  • Pembacaan yang sudah tidak berlaku (yaitu menggunakan jenis penghentian yang dibatasi atau tepat) memiliki manfaat performa maksimum pada interval penghentian terlama. Gunakan penghentian sementara minimal 10 detik untuk mendapatkan manfaat.

  • Spanner melacak earliest_version_time database, yang menentukan waktu paling awal untuk membaca versi data sebelumnya. Anda tidak dapat membaca stempel waktu sebelum waktu versi yang paling awal.

Jenis batas stempel waktu Spanner dijelaskan secara lebih mendetail di bawah.

Kuat

Spanner menyediakan jenis terikat untuk pembacaan yang kuat. Pembacaan yang andal dijamin melihat efek dari semua transaksi yang telah dilakukan sebelum pembacaan dimulai. Selain itu, semua baris yang dihasilkan oleh satu pembacaan konsisten satu sama lain - jika ada bagian dari pembacaan yang mengamati transaksi, semua bagian pembacaan akan melihat transaksi tersebut.

Pembacaan yang kuat tidak dapat diulang: dua transaksi hanya-baca yang kuat dan berurutan mungkin menampilkan hasil yang tidak konsisten jika ada operasi tulis serentak. Jika konsistensi di seluruh operasi baca diperlukan, operasi baca harus dijalankan dalam transaksi yang sama atau pada stempel waktu pembacaan yang tepat.

Data usang yang macet

Spanner menyediakan jenis terikat untuk penghentian yang dibatasi. Mode penghentian terikat memungkinkan Spanner memilih stempel waktu baca, bergantung pada batas penghentian yang diberikan pengguna. Spanner memilih stempel waktu terbaru dalam batas penghentian yang memungkinkan eksekusi pembacaan di replika terdekat yang tersedia tanpa melakukan pemblokiran.

Semua baris yang dihasilkan bersifat konsisten satu sama lain - jika ada bagian dari pembacaan yang mengamati transaksi, semua bagian pembacaan akan melihat transaksi tersebut. Pembacaan yang sudah usang dan tidak dapat diulang: dua pembacaan yang sudah tidak berlaku, meskipun menggunakan batas penghentian yang sama, dapat dijalankan pada stempel waktu yang berbeda, sehingga menampilkan hasil yang tidak konsisten.

Pembacaan data usang yang terikat biasanya sedikit lebih lambat daripada pembacaan yang sudah usang dan sebanding.

Tidak berlaku lagi

Spanner menyediakan jenis terikat untuk penghentian yang tepat. Batas stempel waktu ini mengeksekusi pembacaan pada stempel waktu yang ditentukan pengguna. Pembacaan pada stempel waktu dijamin akan melihat awalan yang konsisten dari histori transaksi global: operasi tersebut mengamati perubahan yang dilakukan oleh semua transaksi dengan stempel waktu commit kurang dari atau sama dengan stempel waktu baca, dan mengamati tidak satu pun perubahan yang dilakukan oleh transaksi dengan stempel waktu commit yang lebih besar. Penanda akan melakukan pemblokiran hingga semua transaksi bertentangan yang mungkin diberi stempel waktu commit kurang dari atau sama dengan stempel waktu baca selesai.

Stempel waktu dapat dinyatakan sebagai stempel waktu commit Spanner absolut atau penghentian yang relatif terhadap waktu saat ini.

Mode tersebut tidak memerlukan "fase negosiasi" untuk memilih stempel waktu. Oleh karena itu, fungsi tersebut berjalan sedikit lebih cepat daripada mode konkurensi yang terikat dan sudah tidak berlaku. Di sisi lain, pembacaan yang sudah tidak berlaku biasanya menampilkan hasil yang lebih baru.

Penghentian stempel waktu maksimum

Spanner secara terus-menerus membersihkan sampah memori yang telah dihapus dan ditimpa di latar belakang untuk memperoleh kembali ruang penyimpanan. Proses ini dikenal sebagai GC versi. GC versi mengklaim kembali versi setelah masa berlakunya habis setelah version_retention_period database, yang setelan defaultnya adalah 1 jam, tetapi dapat dikonfigurasi hingga 1 minggu. Batasan ini juga berlaku untuk pembacaan yang sedang berlangsung dan/atau kueri SQL yang stempel waktunya menjadi terlalu lama saat dijalankan. Operasi baca dan kueri SQL dengan stempel waktu operasi 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 memori data yang telah habis masa berlakunya selama sesi tetap aktif.