Laravel: Jangan Backfill Tabel Besar di Dalam Migration
Satu tulisan di Medium mengingatkan developer Laravel untuk tidak melakukan backfill data pada tabel besar langsung di dalam migration. Untuk perubahan skema yang harus tetap aman saat beberapa versi aplikasi berjalan bersamaan, penulisnya menawarkan pola empat fase: expand, dual-write, restartable backfill, dan contract.
Empat fase untuk backfill Laravel yang lebih aman
Sumbernya hanya memuat ringkasan singkat, jadi detail teknisnya ada di artikel lengkap di Medium. Dari ringkasan itu, berikut gambaran umum tiap fase:
- Expand: tambahkan struktur baru, misalnya kolom atau tabel, tanpa membuang yang lama. Versi aplikasi lama tetap bisa jalan.
- Dual-write: aplikasi menulis ke struktur lama dan baru sekaligus, sehingga data baru tidak tertinggal.
- Restartable backfill: data lama dipindahkan ke struktur baru secara bertahap. Prosesnya bisa dihentikan lalu dilanjutkan tanpa mengulang dari awal.
- Contract: setelah semuanya selesai, struktur lama dibuang.
Kenapa tidak di dalam migration? Migration biasanya berjalan saat proses deploy. Kalau tabelnya besar, pekerjaan berat di dalamnya bisa menahan seluruh rilis. Pemisahan fase seperti di atas membuat backfill berjalan sebagai proses tersendiri yang bisa dipantau dan diulang.
Poin yang paling menarik ada pada kalimat soal mixed application versions. Saat deploy berlangsung, versi lama dan baru dari aplikasimu bisa hidup berdampingan untuk sementara. Skema database harus tetap cocok dengan keduanya, dan itulah alasan perubahan dibagi bertahap, bukan sekali ubah.
Buat kamu yang mengelola aplikasi Laravel dengan tabel berisi data bertahun-tahun, misalnya pesanan atau transaksi, pola ini layak dipelajari sebelum menjadwalkan perubahan skema berikutnya. Kamu bisa membaca versi lengkapnya di Medium untuk melihat detail penerapannya.