Kami telah membahas teknik penyebaran basis data hari ini, setelah mengalami beberapa kegagalan baru-baru ini dalam proses kami saat ini dan telah melihat situasi di mana kami ingin membatalkan penerapan, tetapi versi aplikasi yang lama tidak pernah diuji terhadap versi baru dari basis data.
Di satu sisi, ada penyebaran gaya Migrasi, di mana Anda memiliki instruksi versi-atas dan instruksi versi-turun (apakah itu ditulis dalam SQL atau dalam bahasa aplikasi Anda) dan aplikasi Anda tahu versi mana yang diperlukan.
Ini sederhana, dan karena kami tidak akan sering mundur, pengembang tertarik pada yang sederhana. Namun, ada risiko saat Anda menambahkan bidang / tabel dan bidang itu diisi sebelum Anda memutar kembali. Atau lebih buruk, di mana Anda menjatuhkan data yang relevan dengan versi sebelumnya.
Di sisi lain, kita dapat mempertimbangkan pendekatan upgrade, rollback, rollforward di mana rolling back tidak sedrastis Migrasi. Misalnya, peningkatan dapat menambahkan bidang yang tidak dapat dibatalkan; rollback membuatnya nullable sehingga aplikasi lama tidak peduli; rollforward mengisi bidang nol dan menjadikannya tidak dapat dibatalkan lagi.
Ini menyimpan data tetapi rumit baik untuk kode maupun untuk menguji (sayangnya, tes integrasi otomatis kami hampir tidak ada dan sementara kami memperbaiki itu, kami memiliki masalah sementara itu).
Apakah ada cara aman untuk mengurangi masalah dengan ini? Apakah ada opsi lain yang harus saya pertimbangkan? Pernahkah Anda memiliki pengalaman buruk yang ingin Anda bagikan yang dapat menyelamatkan saya dari rasa sakit nantinya?