Saat menggunakan Data Transmission Service (DTS) untuk menyinkronkan atau memigrasikan koleksi MongoDB yang memiliki indeks Time-to-Live (TTL), Anda mungkin mengalami penundaan tugas dan inkonsistensi data. Panduan ini menjelaskan cara mengubah sementara waktu kedaluwarsa indeks TTL pada instans tujuan selama proses tersebut guna memastikan efisiensi dan konsistensi sinkronisasi atau migrasi data.
Deskripsi skenario
Selama pertumbuhan bisnis atau peningkatan arsitektur, Anda mungkin perlu memigrasikan instans MongoDB ke instans baru. Instans tersebut dapat berisi koleksi yang sangat bergantung pada indeks TTL untuk data seperti sesi pengguna, log, dan data cache sementara. Anda dapat menggunakan DTS untuk melakukan sinkronisasi data penuh dan inkremental, dengan tujuan utama memastikan migrasi yang lancar dan efisien tanpa kehilangan data serta dampak minimal terhadap layanan Anda.
Namun, mekanisme penghapusan otomatis indeks TTL dapat bertentangan dengan mekanisme sinkronisasi data DTS. Konflik ini dapat menyebabkan latensi tugas dan inkonsistensi data karena alasan berikut:
Operasi DELETE yang terlewat selama penulisan inkremental mengurangi efisiensi: Saat indeks TTL pada instans sumber menghapus data yang telah kedaluwarsa, operasi tersebut menghasilkan catatan DELETE di Oplog. DTS kemudian menyinkronkan operasi DELETE ini. Jika indeks TTL pada instans tujuan telah menghapus data yang sama, operasi DELETE dari DTS tidak akan menemukan data untuk dihapus. Mesin MongoDB lalu mengembalikan jumlah baris yang terpengaruh yang tidak sesuai ekspektasi, memicu proses penanganan eksepsi dan mengurangi efisiensi migrasi.
Inkonsistensi data akibat penghapusan asinkron data yang telah kedaluwarsa: Indeks TTL tidak menghapus data secara real time. Data yang telah kedaluwarsa mungkin masih ada di instans sumber saat data tersebut sudah dihapus di instans tujuan, sehingga menyebabkan inkonsistensi data.
Contoh:
Oplog atau ChangeStream MongoDB hanya mencatat bidang yang diperbarui dalam operasi UPDATE dan tidak merekam dokumen lengkap sebelum dan sesudah pembaruan. Oleh karena itu, jika operasi UPDATE tidak menemukan data target di instans tujuan, DTS akan mengabaikan operasi tersebut.
Waktu
Instans sumber
Instans tujuan
1
Layanan memasukkan data
2
DTS menyinkronkan operasi INSERT
3
Data telah kedaluwarsa tetapi belum dihapus oleh indeks TTL
4
Layanan memperbarui data (misalnya, memperbarui bidang indeks TTL untuk mengubah waktu kedaluwarsa)
5
Indeks TTL menghapus data
6
DTS menyinkronkan operasi UPDATE, tetapi data tidak ditemukan. Operasi tersebut diabaikan.
Akibatnya, dokumen tersebut tidak ada di instans MongoDB tujuan.
Praktik terbaik
Untuk menghindari masalah yang disebabkan oleh indeks TTL pada instans tujuan, nonaktifkan sementara fitur penghapusan otomatisnya selama seluruh proses sinkronisasi atau migrasi DTS—termasuk tahap penuh maupun inkremental. Setelah lalu lintas layanan dialihkan ke instans baru, pulihkan pengaturan TTL asli.
Ikuti langkah-langkah berikut:
Persiapkan sinkronisasi atau migrasi: Pada database sumber, jalankan skrip untuk mengidentifikasi semua koleksi yang memiliki indeks TTL dan cadangkan pengaturan waktu kedaluwarsanya.
Periksa dan modifikasi konfigurasi tujuan:
Pertama, periksa apakah instans tujuan sudah berisi koleksi dan indeks TTL yang akan disinkronkan atau dimigrasikan.
Jika belum, lakukan terlebih dahulu migrasi skema untuk menyinkronkan koleksi ke tujuan. Kemudian, hubungkan ke database tujuan dan ubah waktu kedaluwarsa ke nilai maksimum yang diizinkan oleh database. Hal ini mencegah penghapusan otomatis selama sinkronisasi atau migrasi.
Jika sudah ada, hubungkan ke database tujuan sebelum memulai tugas DTS dan ubah waktu kedaluwarsa indeks TTL yang telah diidentifikasi ke nilai maksimum yang diizinkan oleh database. Hal ini mencegah penghapusan otomatis selama sinkronisasi atau migrasi.
Jalankan dan pantau tugas DTS: Konfigurasikan dan mulai tugas sinkronisasi DTS penuh dan inkremental. Pantau terus metrik utama untuk memastikan proses berjalan stabil dan sehat. Karena indeks TTL pada instans tujuan secara efektif dinonaktifkan, DTS dapat menyinkronkan semua operasi insert, update, dan delete dari sumber tanpa konflik, sehingga mencegah penurunan efisiensi dan risiko inkonsistensi data.
Buat dan mulai tugas sinkronisasi atau migrasi data di Konsol DTS.
Selama proses berlangsung, fokuslah memantau metrik berikut:
Latensi tugas DTS: Periksa halaman detail tugas di Konsol DTS dan pastikan latensi sinkronisasi inkremental tetap rendah.
Penggunaan storage space instans tujuan: Periksa penggunaan storage space di instans MongoDB tujuan. Karena data di instans tujuan tidak akan kedaluwarsa, penggunaan storage space-nya akan terus meningkat. Pastikan kapasitas penyimpanan mencukupi.
Pulihkan pengaturan setelah migrasi: Setelah sinkronisasi DTS selesai dan lalu lintas layanan telah dialihkan ke instans baru, pulihkan indeks TTL pada database tujuan menggunakan konfigurasi yang telah dicadangkan sebelum migrasi untuk mengembalikan waktu kedaluwarsa asli. Setelah pengaturan dipulihkan, thread latar belakang MongoDB akan mulai membersihkan dokumen kedaluwarsa yang terakumulasi selama proses migrasi.
Catatan:
Selama sinkronisasi atau migrasi inkremental, DTS menyinkronkan operasi penghapusan yang dilakukan oleh indeks TTL sumber terhadap data yang telah kedaluwarsa.
Setelah memperpanjang waktu kedaluwarsa indeks TTL di tujuan, instans tujuan akan menyimpan data yang telah kedaluwarsa di sumber jika terjadi latensi selama sinkronisasi/migrasi penuh atau inkremental. Oleh karena itu, sediakan kapasitas penyimpanan yang cukup untuk instans MongoDB tujuan berdasarkan volume write instans sumber.
Jika objek yang Anda sinkronkan memiliki indeks TTL dengan waktu kedaluwarsa singkat—seperti pada skenario data sementara atau log—sebaiknya jangan memigrasikan data historis. Dalam kasus ekstrem, data dari migrasi penuh bisa kedaluwarsa hampir segera di tujuan, sehingga koleksi tujuan menjadi kosong. Sebagai gantinya, pertimbangkan strategi dual-write untuk layanan Anda atau lakukan hanya migrasi inkremental.