Batas stempel waktu

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 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 berlaku saat membaca data, Anda bisa mendapatkan manfaat latensi dari menjalankan operasi baca yang tidak berlaku, bukan operasi baca 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.
  • Data yang tidak berlaku dalam batas: membaca versi data yang tidak lebih lama dari batas.
  • Data yang tidak berlaku secara pasti: membaca versi data pada stempel waktu yang pasti, 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 operasi baca.)

Catatan:

  • Meskipun operasi baca menggunakan mode batas stempel waktu ini bukan bagian dari transaksi baca-tulis, operasi baca ini dapat memblokir transaksi baca-tulis serentak yang menunggu untuk di-commit. Operasi baca data yang tidak berlaku dalam batas mencoba memilih stempel waktu untuk menghindari pemblokiran, tetapi mungkin masih memblokir.

  • Operasi baca data yang tidak berlaku (yaitu, menggunakan jenis data yang tidak berlaku dalam batas atau pasti) memiliki manfaat performa maksimum pada interval data yang tidak berlaku terpanjang. Gunakan data yang tidak berlaku minimum selama 10 detik untuk mendapatkan manfaat.

  • Spanner melacak `earliest_version_time` database earliest_version_time, yang menentukan waktu paling awal saat versi data sebelumnya dapat di baca. Anda tidak dapat membaca pada stempel waktu sebelum waktu versi paling awal.

Jenis batas stempel waktu Spanner akan dijelaskan lebih mendetail nanti.

Kuat

Spanner menyediakan jenis batas untuk operasi baca yang kuat. Operasi baca yang kuat mencerminkan efek dari semua transaksi yang telah di-commit sebelum awal operasi baca. 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 dari operasi baca akan melihat transaksi tersebut.

Operasi baca 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 operasi baca yang pasti.

Data yang tidak berlaku dalam batas

Spanner menyediakan jenis batas untuk data yang tidak berlaku dalam batas. Mode data yang tidak berlaku dalam batas memungkinkan Spanner memilih stempel waktu operasi baca, yang tunduk pada batas data yang tidak berlaku yang diberikan pengguna. Spanner memilih stempel waktu terbaru dalam batas data yang tidak berlaku yang memungkinkan eksekusi operasi baca pada replika terdekat yang tersedia tanpa pemblokiran.

Semua baris yang dihasilkan konsisten satu sama lain. Jika ada bagian dari operasi baca yang mengamati transaksi, semua bagian dari operasi baca akan melihat transaksi tersebut. Operasi baca data yang tidak berlaku dalam batas tidak dapat diulang: dua operasi baca data yang tidak berlaku, meskipun menggunakan batas data yang tidak berlaku yang sama, dapat dieksekusi pada stempel waktu yang berbeda dan dengan demikian menampilkan hasil yang tidak konsisten.

Operasi baca data yang tidak berlaku dalam batas biasanya sedikit lebih lambat daripada operasi baca data yang tidak berlaku secara pasti yang sebanding.

Data yang tidak berlaku secara pasti

Spanner menyediakan jenis batas untuk data yang tidak berlaku secara pasti. Batas stempel waktu ini menjalankan operasi baca pada stempel waktu yang ditentukan pengguna. Operasi baca pada stempel waktu mencerminkan awalan yang konsisten dari histori transaksi global: operasi baca mengamati modifikasi yang dilakukan oleh semua transaksi dengan stempel waktu commit yang kurang dari atau sama dengan stempel waktu operasi baca, dan tidak mengamati modifikasi yang dilakukan oleh transaksi dengan stempel waktu commit yang lebih besar. Operasi baca akan diblokir hingga semua transaksi yang bertentangan yang mungkin ditetapkan stempel waktu commit kurang dari atau sama dengan stempel waktu operasi baca selesai.

Stempel waktu dapat dinyatakan sebagai stempel waktu commit Spanner absolut atau data yang tidak berlaku 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 data yang tidak berlaku dalam batas yang setara. Di sisi lain, operasi baca data yang tidak berlaku dalam batas biasanya menampilkan hasil yang lebih baru.

Data yang tidak berlaku stempel waktu maksimum

Spanner terus melakukan garbage collection data yang dihapus dan ditimpa di latar belakang untuk mengklaim kembali ruang penyimpanan. Proses ini dikenal sebagai pembersihan sampah memori versi. Pembersihan sampah memori versi mengklaim kembali versi setelah masa berlakunya berakhir setelah version_retention_period database, yang secara default adalah 1 jam, tetapi dapat dikonfigurasi hingga 1 minggu. Pembatasan ini juga berlaku untuk operasi baca atau kueri SQL yang sedang berlangsung dengan stempel waktu yang menjadi terlalu lama saat dieksekusi. Operasi baca dan kueri SQL dengan stempel waktu operasi baca yang terlalu lama akan gagal dengan error FAILED_PRECONDITION. Satu-satunya pengecualian adalah Operasi Baca/Kueri Partisi dengan token partisi, yang akan mencegah pembersihan sampah memori data yang masa berlakunya telah berakhir saat sesi tetap aktif.