Time to live (TTL) memungkinkan Anda menetapkan kebijakan untuk menghapus data secara berkala dari tabel Spanner. Menghapus data yang tidak diperlukan:
- Mengurangi biaya penyimpanan dan pencadangan.
- Mengurangi jumlah baris yang harus dipindai database untuk beberapa kueri, sehingga berpotensi meningkatkan performa kueri.
- Membantu mematuhi peraturan atau pedoman industri yang membatasi waktu retensi pada jenis data tertentu.
TTL ideal untuk aktivitas pembersihan rutin. Proses ini berjalan terus-menerus di latar belakang, menghapus data yang memenuhi syarat secara berkala dalam batch. Data biasanya dihapus dalam waktu 72 jam setelah tanggal habis masa berlakunya. Setiap penghapusan memerlukan replikasi kunci primer di seluruh replika database yang menyebabkan biaya replikasi. Untuk mengetahui informasi selengkapnya, lihat Harga replikasi data. TTL tidak langsung membatalkan validitas data atau menyembunyikannya dari kueri saat data tersebut memenuhi syarat untuk dihapus. TTL juga tidak memeriksa data saat dimasukkan, sehingga tidak memblokir Anda untuk memasukkan baris dengan stempel waktu yang sudah habis masa berlakunya.
TTL dirancang untuk meminimalkan dampak pada workload database lainnya. Proses pembersihan TTL berjalan di latar belakang dengan prioritas rendah sistem. Proses ini menyebarkan pekerjaan dari waktu ke waktu dan sumber daya instance yang tersedia secara lebih efisien daripada kueri pengguna akhir dan mencakup logika percobaan ulang untuk memastikan pembersihan end-to-end dengan overhead pemrosesan minimal.
Proses pemadatan latar belakang lainnya merebut kembali penyimpanan dari baris yang dihapus, biasanya dalam waktu tujuh hari.
Bagaimana cara kerja TTL?
Anda dapat menyetel TTL pada tabel Spanner dengan menentukan kebijakan penghapusan baris dalam skema database. Kebijakan ini memungkinkan Spanner menghapus data yang tidak diperlukan secara berkala. Kebijakan TTL memiliki karakteristik berikut:
- Setiap tabel dapat memiliki kebijakannya sendiri.
- Hanya satu kebijakan TTL yang dapat ditentukan per tabel.
- Anda menyiapkan TTL secara berbeda untuk database dialek GoogleSQL dan database dialek PostgreSQL.
- Kebijakan TTL tidak menghapus baris yang memiliki stempel waktu yang ditetapkan ke
NULL
. - Data yang disisipkan dengan stempel waktu yang sudah habis masa berlakunya akan dibersihkan saat terdeteksi dalam siklus penghapusan TTL berikutnya.
TTL dengan GoogleSQL
Dengan menggunakan GoogleSQL, Anda menentukan kebijakan penghapusan baris dengan menentukan stempel waktu dan interval untuk menentukan kapan baris memenuhi syarat untuk dihapus; misalnya, tanggal pembaruan terakhir ditambah 30 hari.
Proses sistem latar belakang memeriksa baris yang memenuhi syarat setiap hari. Hal ini memparalelkan penghapusan sebenarnya dalam batch yang dijalankan di dekat tempat data disimpan secara internal. Setiap batch berjalan dalam transaksinya sendiri pada stempel waktu yang konsisten. Dengan demikian, baris dalam batch tertentu, beserta indeks dan turunan yang disisipkan, akan dihapus secara atomik. Namun, penghapusan di seluruh batch terjadi dalam transaksi yang berbeda.
Karena ini adalah proses latar belakang asinkron, ada jeda antara kelayakan dan penghapusan. Biasanya, penundaan kurang dari 72 jam. Akibatnya, baris mungkin tetap ada di tabel Anda hingga tiga hari setelah TTL-nya berakhir; misalnya, tabel dengan kebijakan penghapusan baris yang menghapus baris yang lebih lama dari empat hari mungkin menyertakan baris yang berusia hingga tujuh hari serta baris yang lebih lama dan tidak dapat dihapus.
Untuk mengetahui petunjuk langkah demi langkah tentang cara membuat kebijakan penghapusan baris GoogleSQL, lihat Membuat kebijakan TTL.
TTL dengan PostgreSQL
Dengan PostgreSQL, pemilik database dapat menggunakan klausa TTL INTERVAL
dalam
pernyataan CREATE TABLE
atau ALTER TABLE
untuk menentukan kebijakan penghapusan baris.
Untuk menetapkan kebijakan penghapusan baris pada tabel PostgreSQL, tabel harus
memiliki kolom dengan jenis data TIMESTAMPTZ
. Klausul TTL INTERVAL
menggunakan
kolom ini untuk menetapkan spesifikasi interval kapan baris memenuhi syarat untuk
dihapus.
Klausul harus dievaluasi ke jumlah hari bilangan bulat. Misalnya, '3
DAYS'
diizinkan, begitu juga '4 DAYS 2 MINUTES - 2 MINUTES'
, tetapi '4 DAYS 3
MINUTES'
tidak diizinkan, dan error akan ditampilkan. Anda tidak dapat menggunakan
angka negatif.
Pengumpulan sampah TTL menghapus baris yang memenuhi syarat secara terus-menerus dan di latar belakang. Karena ini adalah proses latar belakang asinkron, ada penundaan antara kelayakan dan penghapusan. Tabel mungkin berisi baris yang memenuhi syarat untuk penghapusan TTL, tetapi TTL belum selesai. Biasanya, penundaan kurang dari 72 jam.
Untuk mengetahui petunjuk tentang cara membuat kebijakan penghapusan baris PostgreSQL, lihat Membuat kebijakan TTL.
Pencadangan dan TTL
Memulihkan cadangan
Saat Anda memulihkan database dari cadangan, semua kebijakan penghapusan baris yang dikonfigurasi di database sumber akan otomatis dihapus. Hal ini mencegah Spanner menghapus data yang masa berlakunya habis segera setelah pencadangan dipulihkan. Oleh karena itu, Anda harus mengonfigurasi ulang TTL secara manual.
Konsistensi data
Cadangan adalah snapshot data Anda yang konsisten pada
waktu tertentu (version_time
). Cadangan dapat berisi baris yang
mungkin memenuhi syarat untuk penghapusan TTL, tetapi TTL belum selesai.
Demikian pula, tugas ekspor Dataflow membaca seluruh tabel pada stempel waktu tetap.
Pengauditan
TTL mendukung audit penghapusannya melalui
aliran perubahan.
Record data aliran perubahan yang melacak perubahan TTL pada database memiliki
kolom transaction_tag
yang ditetapkan ke RowDeletionPolicy
dan
kolom is_system_transaction
yang ditetapkan ke true
. Pembaca aliran perubahan kemudian dapat memfilter semua catatan TTL, atau semua catatan kecuali catatan TTL, bergantung pada kasus penggunaannya. Lihat contoh penggunaan Beam untuk memfilter menurut
tag transaksi.
Langkah berikutnya
- Pelajari cara mengelola retensi data dengan TTL.
- Pelajari metrik dan pemantauan TTL.