Hanya karena basis data NoSql Anda tidak memiliki skema dalam arti tradisional, tidak berarti tidak ada skema logis yang perlu Anda tangani saat ia berubah. Dalam hal aplikasi tipikal menggunakan MongoDb, kemungkinan besar kode Anda mengharapkan bidang tertentu dari objek json untuk berperilaku dengan cara tertentu. Jika Anda mengubah perilaku, Anda mungkin ingin memperbarui data yang sudah ada dalam database. Sekarang, dengan RDBMS tradisional ini adalah masalah yang sebagian besar dipecahkan - Anda hanya perlu mengubah tabel yang mendasarinya. Tetapi dengan database NoSQL bermodel baru ini, Anda memiliki keputusan - apakah Anda menulis skrip untuk menghapus dan memperbarui semua objek Anda? Atau apakah Anda menambahkan kode untuk mengkonversi antar versi dengan cepat? Jika demikian, berapa lama Anda mendukung objek v1? Selama-lamanya? Sampai v3?
Saya akan menambahkan bahwa contoh yang digunakan dalam posting blog MongoDb agak sederhana dan sangat mudah ditangani jika Anda memiliki proses pembaruan yang layak, apa pun RDBMS itu; menambahkan bidang jarang menyakitkan. Saat itulah Anda memutuskan untuk membagi Name
bidang Anda menjadi FirstName
dan LastName
hal-hal menjadi menarik.
Itu bisa saja.
Beberapa organisasi - terorganisasi dengan baik, dan melakukan pekerjaan migrasi skema yang sangat buruk.
"Migrasi Akhir Pekan". Hentikan server. Cadangkan dan ekspor semua data. Bangun skema baru (seringkali dengan memodifikasi skema yang ada). Muat ulang data atau upaya merestrukturisasi di tempat.
"Continuous Tweaking". Ubah tabel sejauh diizinkan oleh SQL. Tanpa melacak urutan ALTER dilakukan. Dengan tidak ada cara untuk kembali ke versi skema sebelumnya. Bila perlu, buat tabel baru dari tabel yang ada, semoga menyesuaikan semua aplikasi untuk menggunakan tabel baru. Tapi - kurang QA baik - meninggalkan meja lama di tempat "berjaga-jaga".
"Panik Penuh". Cukup cegah modifikasi skema. Membuat bau besar. Klaim risikonya terlalu tinggi. Blokir semua upaya ke arah ini. Ambil sandera skema sampai dipaksa untuk mengadopsi beberapa pendekatan yang lebih masuk akal.
Setiap skema adalah rasa sakit untuk bermigrasi.
Masalah terbesar bukanlah teknis.
Itu semantik.
Salah satu alasan utama perubahan skema adalah bahwa skema sebelumnya tidak cocok dengan domain masalah dengan sangat baik. Karena semantik telah berubah, basis data (dan aplikasi) perlu diubah. Terkadang ini adalah perubahan mendalam yang membutuhkan pemikiran ulang cara aplikasi bekerja dengan data.
Merevisi semantik database bisa sangat sulit.
Apa yang dilakukan orang alih-alih perubahan skema hanyalah penyalahgunaan skema fisik. Mereka mulai memuat data yang salah ke bidang yang ada karena mereka bisa. Bidang "komentar" tiba-tiba mulai memiliki bagian penting dari informasi manajemen pelanggan diikuti oleh "//" diikuti oleh komentar nyata. Itu tumbuh harus potongan data "bidang 1 - bidang 2 // komentar". Pengguna memiliki spreadsheet yang mengekstrak data tambahan ini dari bidang komentar karena perangkat lunak aplikasi "nyata" memiliki skema yang sulit diubah sehingga TI menolak mengubahnya.
sumber
Kami memutakhirkan basis data produksi menambahkan tabel dan kolom (nullable) tanpa masalah. Versi sebelumnya dari aplikasi berfungsi dengan baik dengan database yang ditingkatkan, mereka hanya tidak merujuk hal-hal baru. Kami menghindari menghapus tabel atau kolom, atau mengubah cara data yang ada disimpan, meskipun saat ini diperlukan, kami menghasilkan skrip konversi yang sesuai. Apakah database Anda memiliki skema tipe aman atau tidak, perubahan dalam struktur data memerlukan konversi data dan peningkatan aplikasi untuk berinteraksi dengan struktur baru.
sumber
Tergantung.
Pertama, jika Anda memiliki basis data yang sangat besar yang mencakup beberapa mesin, maka semuanya (bukan hanya pembaruan basis data) akan menjadi menyakitkan. (Tidak peduli berapa banyak yang Anda rencanakan sebelumnya).
Kedua, memperbarui basis data BUKAN hanya basis data - itu juga tergantung pada sistem yang lebih besar di mana DB menjadi bagiannya. Ini juga termasuk penyebaran basis data (banyak server basis data, banyak pusat data, pengaturan master-slave, dll.)
Rasa sakit dapat dikurangi dengan membuat komponen sistem Anda sedemikian rupa sehingga mereka semua memiliki semacam 'kesadaran' acara perubahan skema DB. Ini berarti bahwa keseluruhan sistem harus toleran terhadap perubahan skema dan dapat menanggapinya dengan cara yang 'waras'.
Anda dapat memeriksa utilitas yang dikembangkan oleh Facebook untuk menangani pembaruan skema MySQL.
Juga, ada praktik terbaik standar seperti mengubah master Anda menjadi read-only, membuat perubahan pada slave atau menyalin pengembangan, dll.
Bagaimanapun, memiliki cadangan penuh dan rangkaian uji yang luas adalah suatu KEHARUSAN. Hanya dengan begitu, Anda dapat melakukan perubahan dengan percaya diri dan aman.
sumber