Apakah migrasi skema basis data menjadi masalah di lingkungan produksi?

13

Dalam diskusi tentang database NoSQL vs SQL, saya terkadang mendengar bahwa perusahaan lebih suka menggunakan database NoSQL schemaless karena bermasalah untuk memigrasi skema ke versi baru. Tetapi apakah itu benar-benar masalah besar ketika melakukan peningkatan? Apakah basis data relasional buruk untuk operasi seperti itu?

Saya membaca posting blog ini di blog MongoDB: Mengapa Schemaless?

Jonas
sumber

Jawaban:

20

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 Namebidang Anda menjadi FirstNamedan LastNamehal-hal menjadi menarik.

Wyatt Barnett
sumber
Dengan RDBMS tradisional, ini BUKAN masalah yang terpecahkan. Anda masih harus memperbarui semua data selain memperbarui skema. Bagian ini umum untuk SQL dan NoSQL.
kawing-chiu
3
@ RDBMSes kawing-chiu bernilai garam mereka memiliki DDL transaksional, yang membuatnya menjadi masalah yang terpecahkan. Skema modifikasi dan koreksi data harus dilakukan dalam satu transaksi yang dapat diputar kembali.
Blrfl
19

Tetapi apakah itu benar-benar masalah besar ketika melakukan peningkatan?

Itu bisa saja.

Beberapa organisasi - terorganisasi dengan baik, dan melakukan pekerjaan migrasi skema yang sangat buruk.

  1. "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.

  2. "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".

  3. "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.

Apakah basis data relasional buruk untuk operasi seperti itu?

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.

S.Lott
sumber
9
Saya merasa kotor setelah membaca ini.
Michael Borgwardt
3
+1 untuk pergantian frasa yang hebat; "Mengambil sandera skema". Analogi yang bagus. Pernah ke sana, mengalami hal itu.
Warren P
1
Tetapi aplikasi ini juga harus ditingkatkan, jadi apakah database Schemaless benar-benar membantu?
Jonas
1
@Jonas: Pertanyaan Anda tidak jelas. Tapi. Menghapus skema SQL yang membatasi berarti Anda memiliki satu hal yang kurang untuk diatasi. Jadi, sepele, "Ya, itu membantu." Anda selalu memiliki perubahan aplikasi. Perubahan aplikasi tanpa perubahan skema akan kurang bekerja. Baik? Atau Anda bertanya sesuatu yang berbeda?
S.Lott
3

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.

JGWeissman
sumber
1

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.

treecoder
sumber
Tetapi aplikasi ini juga harus ditingkatkan, jadi apakah database Schemaless benar-benar membantu?
Jonas