Mengelola retensi data dengan indeks TTL
Halaman ini menjelaskan cara menggunakan MongoDB API, konsol Google Cloud , dan Google Cloud CLI untuk mengonfigurasi indeks time to live (TTL).
Ringkasan time to live
Gunakan indeks TTL untuk secara otomatis menghapus data yang sudah tidak berlaku dari database. Indeks TTL menetapkan kolom tertentu sebagai waktu habis masa berlaku untuk dokumen dalam koleksi tertentu. Dengan TTL, Anda dapat mengurangi biaya penyimpanan dengan menghapus data yang sudah tidak digunakan. Data biasanya dihapus dalam waktu 24 jam setelah tanggal habis masa berlakunya.
Harga
Operasi penghapusan TTL menggunakan unit penghapusan terkelola. Untuk mengetahui harga, lihat Harga edisi Firestore Enterprise.
Limit dan batasan
- Anda hanya dapat membuat satu indeks TTL per koleksi.
- Anda dapat memiliki maksimum 500 indeks TTL.
Penghapusan TTL
Perhatikan perilaku utama penghapusan berdasarkan TTL berikut:
Penghapusan melalui TTL bukan proses yang instan. Dokumen yang habis masa berlakunya akan terus muncul di kueri dan permintaan pencarian hingga proses TTL benar-benar menghapusnya. TTL mengorbankan ketepatan waktu penghapusan dengan tujuan mengurangi total biaya kepemilikan untuk penghapusan. Data biasanya dihapus dalam waktu 24 jam setelah tanggal habis masa berlakunya.
Membuat indeks TTL pada koleksi yang sudah ada akan mengakibatkan penghapusan massal semua data yang masa berlakunya telah habis sesuai dengan indeks TTL yang baru. Perhatikan bahwa penghapusan massal ini juga tidak seketika dan bergantung pada jumlah data yang ada untuk koleksi tersebut.
Jika suatu dokumen memiliki waktu habis masa berlaku sebelumnya dan Anda menambahkan indeks TTL baru ke koleksi, dokumen tersebut akan dihapus dalam waktu 24 jam sejak penyiapan penyelesaian indeks TTL dan menjadi aktif.
TTL belum tentu menghapus dokumen dalam urutan yang sama seperti urutan stempel waktu habis masa berlakunya dokumen.
Penghapusan tidak dilakukan secara transaksional. Dokumen dengan waktu habis masa berlaku yang sama belum tentu dihapus pada waktu yang sama. Jika Anda memerlukan perilaku tersebut, lakukan penghapusan menggunakan library klien.
Firestore dengan kompatibilitas MongoDB akan selalu mematuhi kolom TTL terbaru untuk menentukan masa berlaku. Misalnya, jika dokumen yang masa berlakunya habis tetapi belum dihapus memiliki kolom TTL yang diperbarui ke tanggal berikutnya, dokumen tersebut tidak akan habis masa berlakunya dan tanggal baru akan digunakan.
Firestore dengan kompatibilitas MongoDB hanya akan menerapkan masa berlaku dokumen jika kolom TTL ditetapkan ke nilai
Date and time/BSON Dateatau nilaiArrayyang berisi nilaiDate and time/BSON Date. Biarkan kolom kosong atau tetapkan ke nilai sepertinulluntuk menonaktifkan masa berlaku per dokumen.TTL dirancang untuk meminimalkan dampak terhadap aktivitas database lainnya. Penghapusan berdasarkan TTL diperlakukan dengan prioritas yang lebih rendah. Strategi lain juga tersedia untuk memperlancar lonjakan traffic dari penghapusan berbasis TTL.
Perbedaan dengan indeks TTL
Tidak seperti indeks Firestore lainnya, indeks TTL tidak digunakan selama perencanaan kueri untuk meningkatkan performa. Untuk meningkatkan performa kueri pada kolom yang digunakan dengan TTL, Anda harus menambahkannya ke indeks non-TTL terpisah.
Penting untuk diperhatikan bahwa karena kolom TTL menggunakan stempel waktu, menambahkannya ke indeks non-TTL dapat menyebabkan hotspot. Hotspot terjadi saat kecepatan penulisan dan penghapusan yang tinggi terkonsentrasi dalam rentang dokumen yang sempit, yang dapat berdampak negatif pada performa penskalaan selama periode traffic penulisan yang berat.
Izin
Entitas yang membuat atau menghapus indeks TTL memerlukan izin berikut dalam project:
- Untuk melihat indeks TTL, Anda memerlukan izin
datastore.indexes.listdandatastore.indexes.get. - Untuk membuat atau menghapus indeks TTL, Anda memerlukan izin
datastore.indexes.update. - Untuk memeriksa status operasi TTL, Anda memerlukan izin
datastore.operations.listdandatastore.operations.get.
Untuk peran yang menetapkan izin ini, lihat Peran Identity and Access Management Firestore.
Membuat indeks TTL
Saat membuat indeks TTL, Anda menetapkan suatu kolom dokumen sebagai waktu habis masa berlaku untuk dokumen dalam suatu koleksi.
TTL menggunakan kolom yang ditetapkan untuk mengidentifikasi dokumen yang memenuhi syarat untuk dihapus.
Kolom TTL harus ditetapkan ke nilai Timestamp/BSON Date atau nilai Array
yang berisi nilai Timestamp/BSON Date. Anda dapat memilih kolom yang sudah ada atau menentukan kolom yang akan ditambahkan nanti.
Pertimbangkan hal berikut sebelum Anda menetapkan nilai kolom TTL:
Nilai kolom TTL dapat berupa waktu di masa mendatang, sekarang, atau di masa lalu. Jika nilainya adalah waktu di masa lalu, dokumen akan langsung memenuhi syarat untuk dihapus. Misalnya, Anda dapat membuat indeks TTL dengan kolom
expireAtyang kemudian Anda tambahkan ke dokumen yang sudah ada.Menggunakan jenis data lainnya atau tidak menetapkan nilai kolom TTL akan menonaktifkan TTL untuk setiap dokumen.
Untuk membuat indeks TTL, ikuti langkah-langkah berikut:
MongoDB API
Sertakan opsi indeks expireAfterSeconds saat memanggil metode createIndex():
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
Contoh:
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
expireAfterSeconds mengidentifikasi TTL sebagai indeks TTL dan merupakan selisih antara nilai stempel waktu dari kolom TTL
dan waktu habis masa berlaku. Jika expireAfterSeconds ditetapkan ke 0, waktu habis masa berlaku
diberikan langsung oleh nilai stempel waktu dari kolom TTL.
Perhatikan batasan berikut:
- Indeks TTL harus menyertakan tepat satu kolom.
- Indeks TTL tidak digunakan dalam perencanaan kueri, dan tidak meningkatkan performa kueri.
- Anda hanya dapat membuat satu indeks TTL per koleksi.
- Log audit untuk pembuatan indeks TTL dengan MongoDB API menggunakan nama metode
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Konsol Google Cloud
Di konsol Google Cloud , buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Time-to-live.
Klik Create Policy.
Masukkan nama koleksi dan nama kolom stempel waktu.
Klik Create.
Konsol akan kembali ke halaman Time-to-live. Jika operasi berhasil dimulai, halaman akan menambahkan entri ke tabel indeks TTL. Jika gagal, halaman akan menampilkan pesan error.
gcloud
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Gunakan perintah
firestore fields ttls updateuntuk mengonfigurasi indeks TTL. Tambahkan flag--asyncagar gcloud CLI tidak menunggu operasi selesai.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
Durasi pembuatan indeks TTL
Diperlukan waktu minimal sepuluh menit atau lebih untuk membuat indeks TTL. Setelah Anda memulai operasi, penutupan terminal tidak akan membatalkan operasi.
Melihat indeks TTL
Untuk melihat indeks TTL, ikuti langkah-langkah berikut:
MongoDB API
Gunakan metode listIndexes() untuk melihat indeks TTL. Contoh:
db.restaurants.listIndexes()
Perhatikan bahwa output akan mencakup indeks TTL dan indeks non-TTL. Indeks TTL akan
mencakup opsi expireAfterSeconds.
Konsol Google Cloud
Di konsol Google Cloud , buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Time-to-live.
Konsol mencantumkan indeks TTL untuk database Anda dan menyertakan status setiap indeks.
gcloud
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Gunakan perintah
firestore fields ttls listuntuk mengonfigurasi indeks TTL. Perintah berikut mencantumkan semua indeks TTL.gcloud firestore fields ttls list
Untuk mencantumkan indeks TTL pada koleksi tertentu, gunakan perintah berikut:
gcloud firestore fields ttls list --collection-group=collection_name
Melihat detail operasi
Anda dapat menggunakan gcloud CLI untuk melihat detail selengkapnya tentang indeks TTL yang ada dalam status CREATING.
Gunakan perintah operations list untuk melihat semua operasi yang sedang berjalan dan yang baru selesai:
gcloud firestore operations list
Responsnya mencakup perkiraan progres operasi.
Menghapus indeks TTL
Untuk menghapus indeks TTL, ikuti langkah-langkah berikut:
MongoDB API
Gunakan metode dropIndex() untuk menghapus indeks TTL. Contoh:
Menghapus indeks TTL menggunakan nama indeks
db.restaurants.dropIndex("ts_1")
Menghapus indeks TTL menggunakan definisi indeks
db.restaurants.dropIndex({"ts": 1})
Perhatikan bahwa Log audit untuk menghapus indeks TTL dengan MongoDB API menggunakan nama metode google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Konsol Google Cloud
Di konsol Google Cloud , buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Time-to-live.
Di tabel indeks TTL, temukan baris untuk indeks TTL. Dalam baris tabel ini, klik tombol Delete (tempat sampah).
Konfirmasikan dengan mengklik Delete.
Konsol akan kembali ke halaman Time-to-live. Jika berhasil, Firestore dengan kompatibilitas MongoDB akan menghapus indeks TTL dari tabel.
gcloud
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Gunakan perintah
firestore fields ttls updateuntuk mengonfigurasi indeks TTL. Tambahkan flag--asyncagar gcloud CLI tidak menunggu operasi selesai.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
Memantau penghapusan TTL
Anda dapat menggunakan Cloud Monitoring untuk melihat metrik terkait penghapusan berdasarkan TTL. Firestore dengan kompatibilitas MongoDB menyediakan metrik berikut untuk TTL:
| Jenis metrik | Nama metrik | Deskripsi metrik |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | Jumlah penghapusan time to live (TTL) |
Jumlah total dokumen yang dihapus oleh indeks TTL. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Akhir masa berlaku time to live hingga penundaan penghapusan |
Waktu yang berlalu antara saat dokumen habis masa berlakunya berdasarkan indeks TTL hingga saat dokumen benar-benar dihapus. |
Untuk menyiapkan dasbor dengan metrik Firestore dengan kompatibilitas MongoDB, lihat artikel mengelola dasbor kustom dan menambahkan widget dasbor.