Saya pikir ini adalah pertanyaan yang sangat bagus, tetapi jawabannya akan sedikit tersebar berdasarkan lib yang Anda gunakan dan harapan Anda untuk "migrasi".
Mari kita lihat beberapa tindakan migrasi umum:
- Tambahkan bidang: Mongo membuat ini sangat mudah. Cukup tambahkan bidang dan selesai.
- Menghapus bidang: Secara teori, Anda sebenarnya tidak terikat dengan skema Anda, jadi "penghapusan" di sini relatif. Jika Anda menghapus "properti" dan tidak lagi memuat bidang, maka tidak masalah jika bidang itu ada dalam data. Jadi jika Anda tidak peduli tentang "membersihkan" database, lalu menghapus bidang tidak memengaruhi database. Jika Anda melakukannya peduli tentang membersihkan DB, pada dasarnya Anda harus menjalankan loop for raksasa terhadap DB.
- Ubah nama bidang: Ini juga masalah yang sulit. Saat Anda mengganti nama bidang "di mana" Anda mengganti namanya? Jika Anda ingin DB mencerminkan nama bidang baru, maka pada dasarnya Anda harus menjalankan loop for raksasa pada DB. Agar aman, Anda mungkin harus "menambahkan" data, lalu memasukkan kode, lalu "menghapus" kolom lama.
Beberapa Kerutan
Namun, konsep nama bidang bersama-sama dengan objek ActiveRecord hanya sedikit miring. Objek ActiveRecord secara efektif menyediakan pemetaan properti objek ke bidang database yang sebenarnya.
Dalam RDBMS tipikal, "ukuran" nama bidang tidak terlalu relevan. Namun, di Mongo, nama bidang sebenarnya menempati ruang data dan ini membuat perbedaan besar dalam hal kinerja.
Sekarang, jika Anda menggunakan beberapa bentuk "objek data" seperti ActiveRecord, mengapa Anda mencoba menyimpan nama bidang lengkap dalam data? DB mungkin harus menyimpan semua bidang dalam urutan abjad dengan peta di sisi Objek. Jadi Dokumen dapat memiliki 8 bidang/properti dan nama DB adalah "a", "b"..."j", tetapi nama Objek akan menjadi hal yang dapat dibaca seperti "Nama", "Harga", "Kuantitas".
Alasan saya mengangkat ini adalah karena ini menambahkan kerutan lain pada Memodifikasi nama bidang . Jika Anda menerapkan pemetaan, maka mengubah nama bidang tidak benar-benar menyebabkan migrasi sama sekali.
Beberapa Kerutan lagi
Jika Anda melakukannya ingin menerapkan migrasi pada penghapusan, maka Anda harus melakukannya setelah sebuah penyebaran. Anda juga harus menyadari bahwa Anda tidak akan menghemat ruang disk saat ini saat melakukannya.
Mongo pra-mengalokasikan ruang dan itu tidak benar-benar "mengembalikannya" kecuali Anda melakukan perbaikan DB. Jadi jika Anda menghapus banyak bidang pada dokumen, dokumen tersebut masih menempati ruang yang sama pada disk. Jika dokumen tersebut kemudian dipindahkan, maka Anda dapat memperoleh kembali ruang, namun dokumen hanya bergerak saat bertambah.
Jika Anda menghapus bidang besar dari banyak dokumen, Anda akan ingin melakukan perbaikan atau memeriksa compact
perintah.