Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash

Ma'lumotlar modeli ishlab chiqish jarayonida o'zgarishga moyil bo'ladi va ma'lum bir nuqtada u endi ma'lumotlar bazasiga mos kelmaydi. Albatta, ma'lumotlar bazasi o'chirilishi mumkin, keyin ORM modelga mos keladigan yangi versiyani yaratadi, ammo bu protsedura mavjud ma'lumotlarning yo'qolishiga olib keladi. Shunday qilib, migratsiya tizimining vazifasi, sxemani o'zgartirish natijasida, mavjud ma'lumotlarni yo'qotmasdan, ilovadagi ma'lumotlar modeli bilan sinxronlashtirilishini ta'minlashdir.

Ushbu maqolada biz ma'lumotlar bazasi migratsiyasini boshqarish uchun turli xil vositalarni ko'rib chiqmoqchimiz. Umid qilamizki, ushbu sharh shunga o'xshash tanlovga duch kelgan ishlab chiquvchilar uchun foydali bo'ladi.

Maqsad

Kompaniyamiz hozirda mahsulotning keyingi avlodini - Docs Security Suite (DSS) ni faol ravishda ishlab chiqmoqda. Server qismi .Net Core da yozilgan va DBMS sifatida Entity Framework Core ishlatiladi. Ilovani loyihalashda biz Code First yondashuvidan foydalanamiz.

Ilova domeni modeli bir vaqtning o'zida bir nechta ishlab chiquvchilar tomonidan yaratilgan - har biri tizimning o'z mantiqiy qismi uchun javobgardir.

DSS ning oldingi avlodi migratsiya boshqaruvi tizimi sifatida klassik Entity Framework Migrations (EF 6) dan foydalangan. Biroq, bunga qarshi ba'zi shikoyatlar to'plangan, eng asosiysi, EF versiyadagi ziddiyatlarni hal qilishda oqilona yondashuvga ega emas. Bu fakt qo'llab-quvvatlashning bir qismi sifatida xatolarni tuzatishda hali ham bizni xafa qiladi, shuning uchun biz muqobil variantlarni ko'rib chiqishga qaror qildik.

Muhokama natijasida migratsiyani boshqarish tizimiga quyidagi talablar shakllantirildi:

  1. Turli ma'lumotlar bazalarini qo'llab-quvvatlash. MS SQL Server, PostgreSQL, Oracle talab qilinadi, ammo boshqalardan foydalanish mumkin.
  2. ORM bilan ishlash. Dastlab, EF Core-dan foydalanish rejalashtirilgan edi, ammo dizayn bosqichida biz boshqa ORM-larni ko'rib chiqishga tayyor edik.
  3. Migratsiyalarni avtomatik yaratish. Code First-ning rivojlanishini hisobga olgan holda, men migratsiyani "qo'lda yozish" zaruratidan qochmoqchiman
  4. Versiya ziddiyati. Tarqalgan ishlab chiqish muhitida, birlashganda, EF Core nizolardan aziyat chekishi mumkin. Bu muhim muammoga aylanadi, chunki dasturning turli qismlari turli ishlab chiquvchilar tomonidan yaratilgan, shuning uchun har biriga ko'p vaqt sarflashingiz kerak.
  5. Murakkab hujjatlar va qo'llab-quvvatlash. Bu erda, bizning fikrimizcha, tushuntirish kerak emas
  6. Ozod. Mezon shartli, chunki tizimlar juda qimmat yoki qimmat emas, lekin qulaylik uchun ideal, biz ham ko'rib chiqishga tayyor edik.

Bir oz tadqiqot natijasida quyidagi variantlar topildi va ko'rib chiqish maqsadga muvofiq deb topildi:

  1. EF asosiy migratsiyalari
  2. DBup
  3. Dumaloq uyE
  4. ThinkingHome.Migrator
  5. Ravon migrator

Va endi biroz batafsilroq

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash
EntityFramework asosiy migratsiyalari

Tabiiyki, bu tanlash uchun birinchi va asosiy variant edi. Daf chalg'imasdan ishlaydigan mahalliy asbob. Ko'p miqdordagi hujjatlar, rasmiy va unchalik emas, soddaligi va boshqalar. Biroq, klassik EF haqida qilingan shikoyatlar EF Core uchun ham juda dolzarb.

Shunday qilib, EF Core-ning afzalliklari ta'kidlangan:

  • Microsoft qo'llab-quvvatlash, hujjatlar, shu jumladan rus tilida, katta hamjamiyat
  • CodeFirst asosida migratsiyalarni avtomatik yaratish
  • EF 6 bilan solishtirganda, EF Core endi ma'lumotlar bazasining suratini saqlamaydi. Code First-da EF Core bilan ishlashda endi ma'lumotlar bazasini joylashtirish shart emas
  • Biz Code First-dan raqsga tushayotganimiz sababli, barcha kerakli ma'lumotlarga kirish provayderlariga bitta ko'chirishni amalga oshirish mumkin
  • Provayderlarga kelsak, PostgreSQL qo'llab-quvvatlanadi, Oracle va boshqalar qo'llab-quvvatlanadi va hokazo, va hatto MS SQL Server 

Va shuningdek, kamchiliklari:

  • Mojarolarni hal qilish bir xil darajada qoldi. Migratsiyalarni ketma-ketlashtirish va ma'lumotlar bazasi oniy tasvirlarini yangilash kerak
  • Migratsiyalar yaratilgan modellarga bog'liqlik

DbUp

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash
dbup.github.io

DbUp - bu NuGet tomonidan o'rnatiladigan va SQL Serverga o'zgartirishlar kiritishga yordam beradigan .NET kutubxonasi. U qaysi o'zgartirish skriptlari allaqachon bajarilganligini kuzatib boradi va ma'lumotlar bazasini yangilash uchun zarur bo'lganlarni ishga tushiradi. Kutubxona ASP.NET da ochiq manbali bloglash mexanizmi loyihasidan kelib chiqqan va MIT litsenziyasi ostida mavjud va kod GitHub da. Migratsiya T-SQL yordamida tasvirlangan.

Qanday afzalliklari bor:

  • Ko'p sonli ma'lumotlar bazasini qo'llab-quvvatlash (MS SQL Server, PstgreSQL, MySQL)
  • Skriptlar T-SQL da yozilganligi sababli ular juda oddiy ko'rinadi
  • Mojarolar ham SQL yordamida hal qilinadi

Va kamchiliklari:

  • Turli xil qo'llab-quvvatlanadigan DBMS bilan Oracle ulardan biri emas
  • ORM bilan o'zaro ta'sir qilmaydi
  • T-SQL skriptlarini qo'lda yozish biz maqsad qilgan narsa emas
  • Hujjatlar va hamjamiyat shunday, ammo SQL skriptlarini yozish nuqtai nazaridan ular kerak bo'lmasligi mumkin.

Dumaloq uyE

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash
github.com/chucknorris/roundhouse

Apache 2.0 litsenziyasi ostida tarqatilgan ushbu migratsiyani boshqarish vositasi avvalgisi kabi T-SQL migratsiya mexanizmida ishlaydi. Ko'rinishidan, ishlab chiquvchilar qulay rivojlanish jarayonini yaratishdan ko'ra, DBMSni qo'llab-quvvatlash bilan bog'liq texnik muammolarni hal qilishga ustuvor ahamiyat berishgan.

Taroziga soling:

  • Kerakli ma'lumotlar bazasini qo'llab-quvvatlaydi (shu jumladan Oracle)

Kamchiliklari:

  • Oracle (shuningdek, biz uchun ahamiyatsiz bo'lgan Access) .NET Core-da qo'llab-quvvatlanmaydi, faqat .NET Full Framework-da.
  • ORM bilan ishlamaydi
  • Oldingi vositaga qaraganda kamroq hujjatlar mavjud
  • Yana - migratsiya skriptlar bilan yoziladi

ThinkingHome.Migrator

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash

MIT litsenziyasi ostida tarqatilgan .NET Core platformasiga versiyali ma'lumotlar bazasi sxemasini ko'chirish uchun vosita. Ishlab chiquvchining o'zi deyarli bir yil oldin uning so'nggi versiyasi haqida yozgan.

Taroziga soling:

  • .NET Core uchun mo'ljallangan
  • Migratsiyaning shoxlangan ketma-ketligini amalga oshirdi
  • Migratsiya jurnali amalga oshirildi

Kamchiliklari:

  • Oxirgi marta bir yil oldin yangilangan. Ko'rinishidan, loyiha qo'llab-quvvatlanmaydi
  • Oracle tomonidan qo'llab-quvvatlanmaydi (maqolada aytilishicha, bu .NET Core uchun barqaror dasturning yo'qligi bilan bog'liq - lekin bu bir yil oldin)
  • Avtomatik migratsiya yaratilmaydi

Umuman olganda, loyiha istiqbolli ko'rinadi, ayniqsa u ishlab chiqilsa, lekin biz bu erda va hozir qaror qabul qilishimiz kerak edi.

Ravon migrator

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash
github.com/fluentmigrator/fluentmigrator

Muxlislarning katta armiyasi bilan eng mashhur migratsiya vositasi. Apache 2.0 litsenziyasi ostida tarqatiladi. Tavsifda aytilganidek, bu Ruby on Rails Migrations-ga o'xshash .NET uchun migratsiya ramkasidir. Ma'lumotlar bazasi sxemasiga kiritilgan o'zgartirishlar C# sinflarida tasvirlangan.

Bu erda afzalliklar mavjud:

  • Kerakli ma'lumotlar bazasini qo'llab-quvvatlash
  • .NET Core-ni qo'llab-quvvatlash
  • Katta rivojlangan jamiyat
  • Migratsiya o'rtasidagi nizolar ketma-ket hal qilinadi - migratsiyani amalga oshirish tartibi ko'rsatilgan. Bundan tashqari, agar bitta ob'ekt atrofida ziddiyat yuzaga kelsa, kodni birlashtirganda, u kodning qolgan qismidagi kabi hal qilinadi.
  • Muvaffaqiyatli migratsiyadan keyin bajariladigan profillar mavjud. Va ular xizmat funktsiyalarini bajarishlari mumkin.So'nggi yangilanish bir oy oldin bo'lgan, ya'ni loyiha tirik

Kamchiliklarga kelsak, ular quyidagilar:

  • Avtomatik migratsiya yaratilmaydi
  • EF modellari bilan aloqa yo'q
  • Ma'lumotlar bazasi oniy tasvirlari yo'q

Bizning tanlovimiz nima edi?

Ma'lumotlarni ko'chirish tizimlarini taqqoslash va tanlash

Qizg'in bahslar ikki parametr - migratsiyani avtomatik ravishda yaratish va nizolarni oqilona hal qilish atrofida bo'lib o'tdi. Boshqa omillar kamroq qo'rqinchli edi. Natijada, muhokama natijalariga ko'ra, jamoa yangi loyihada Fluent Migrator dasturidan foydalanishga qaror qildi. Chunki kelajakda nizolarni hal qilish yanada ko'proq foyda keltiradi.

topilmalar

Albatta, mukammal vositalar yo'q. Shuning uchun biz tanlov qilish uchun "istaklarimiz" ni birinchi o'ringa qo'yishimiz kerak edi. Biroq, boshqa jamoalar va boshqa vazifalar uchun boshqa omillar hal qiluvchi bo'lishi mumkin. Umid qilamizki, ushbu maqola sizga tanlov qilishga yordam beradi.

Manba: www.habr.com

a Izoh qo'shish