Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау

Мәліметтер моделі әзірлеу процесінде өзгеруге бейім болады және белгілі бір уақытта ол деректер базасына сәйкес келмейді. Әрине, дерекқорды жоюға болады, содан кейін ORM модельге сәйкес келетін жаңа нұсқаны жасайды, бірақ бұл процедура бұрыннан бар деректердің жоғалуына әкеледі. Осылайша, көшіру жүйесінің функциясы схеманы өзгерту нәтижесінде ол бар деректерді жоғалтпай қолданбадағы деректер үлгісімен синхрондалуын қамтамасыз ету болып табылады.

Бұл мақалада біз дерекқорды тасымалдауды басқаруға арналған әртүрлі құралдарды қарастырғымыз келеді. Бұл шолу ұқсас таңдауға тап болған әзірлеушілер үшін пайдалы болады деп үміттенеміз.

Мақсаты

Біздің компания қазіргі уақытта өнімнің келесі буынын - Docs Security Suite (DSS) белсенді түрде әзірленуде. Сервер бөлігі .Net Core тілінде жазылған және Entity Framework Core ДҚБЖ ретінде пайдаланылады. Қолданбаны құрастыру кезінде біз Code First тәсілін қолданамыз.

Қолданбалы домен үлгісін бір уақытта бірнеше әзірлеушілер жасайды – әрқайсысы жүйенің өзінің логикалық бөлігіне жауап береді.

DSS алдыңғы буыны тасымалдауды басқару жүйесі ретінде классикалық Entity Framework Migrations (EF 6) қолданды. Дегенмен, оған қарсы кейбір шағымдар жиналды, ең бастысы, EF-де нұсқалардың қайшылықтарын шешуге дұрыс көзқарасы жоқ. Бұл факт қолдаудың бөлігі ретінде қателерді түзеткенде бізді әлі де ренжітеді, сондықтан біз балама опцияларды қарастыруды шештік.

Талқылау нәтижесінде көші-қонды басқару жүйесіне келесі талаптар қалыптасты:

  1. Әртүрлі ДҚБЖ қолдауы. MS SQL Server, PostgreSQL, Oracle қажет, бірақ басқаларын пайдалану ықтимал.
  2. ORM-мен жұмыс істеу. Бастапқыда EF Core пайдалану жоспарланған болатын, бірақ дизайн кезеңінде біз басқа ORMs қарастыруға дайын болдық.
  3. Көшірулерді автоматты түрде жасау. Code First-тің дамуын ескере отырып, мен көші-қонды «қолмен жазу» қажеттілігінен аулақ болғым келеді.
  4. Нұсқа қайшылықтары. Бөлінген әзірлеу ортасында біріктіру кезінде EF Core қайшылықтардан зардап шегуі мүмкін. Бұл маңызды мәселеге айналады, себебі қолданбаның әртүрлі бөліктерін әртүрлі әзірлеушілер жасайды, сондықтан әрқайсысына көп уақыт жұмсауға тура келеді.
  5. Жетілдірілген құжаттама және қолдау. Бұл жерде бізге түсініктеме қажет емес сияқты
  6. Тегін. Критерий шартты болып табылады, өйткені жүйелер өте қымбат немесе қымбат емес, бірақ ыңғайлы болу үшін өте қолайлы, біз де қарастыруға дайынбыз.

Кішігірім зерттеулер нәтижесінде келесі нұсқалар табылды және қарастыру қажет болды:

  1. EF негізгі тасымалдаулары
  2. DBup
  3. Дөңгелек үйЕ
  4. ThinkingHome.Migrator
  5. Fluent Migrator

Ал енді толығырақ

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау
EntityFramework негізгі тасымалдаулары

Әрине, бұл таңдаудың бірінші және негізгі нұсқасы болды. Доббырмен дірілдетпей-ақ жұмыс істейтін отандық аспап. Құжаттаманың үлкен көлемі, ресми және олай емес, қарапайымдылық және т.б. Дегенмен, классикалық EF туралы шағымдар EF Core үшін де маңызды.

Осылайша, EF Core үшін артықшылықтар атап өтіледі:

  • Microsoft қолдауы, құжаттама, соның ішінде орыс тілінде, үлкен қауымдастық
  • CodeFirst негізінде тасымалдауларды автоматты түрде жасау
  • EF 6 нұсқасымен салыстырғанда, EF Core енді дерекқордың суретін сақтамайды. Code First ішіндегі EF Core бағдарламасымен жұмыс істегенде, енді дерекқорды қолдану қажет емес
  • Біз Code First-тен билеп жатқандықтан, деректерге қол жеткізудің барлық қажетті провайдерлеріне бір көшіруді жүргізуге болады
  • Провайдерлерге келетін болсақ, PostgreSQL, Oracle және т.б. қолдау көрсетіледі, тіпті MS SQL Server 

Және де кемшіліктері:

  • Қақтығыстарды шешу бұрынғы деңгейде қалды. Тасымалдауларды реттілікпен жүргізу және дерекқордың суретін жаңарту қажет
  • Тасымалдаулар жасалатын үлгілерге тәуелділік

DbUp

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау
dbup.github.io

DbUp — NuGet орнатқан және SQL серверіне өзгертулерді жіберуге көмектесетін .NET кітапханасы. Ол қандай өзгерту сценарийлерінің орындалғанын қадағалайды және дерекқорды жаңарту үшін қажеттілерді іске қосады. Кітапхана ASP.NET сайтындағы ашық бастапқы блог жүргізу механизміне арналған жобадан пайда болды және MIT лицензиясы бойынша бар, ал код GitHub жүйесінде. Тасымалдау T-SQL көмегімен сипатталады.

Қандай артықшылықтар бар:

  • ДҚБЖ үлкен санын қолдау (MS SQL Server, PstgreSQL, MySQL)
  • Сценарийлер T-SQL тілінде жазылғандықтан, олар өте қарапайым болып көрінеді
  • Қайшылықтар да SQL көмегімен шешіледі

Және кемшіліктері:

  • Қолдау көрсетілетін ДҚБЖ-ның барлық алуан түрімен Oracle олардың бірі емес
  • ORM-мен әрекеттеспейді
  • T-SQL сценарийлерін қолмен жазу біздің мақсат еткен нәрсе емес
  • Құжаттама мен қауымдастық солай, бірақ SQL сценарийлерін жазу тұрғысынан олар қажет болмауы мүмкін.

Дөңгелек үйЕ

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау
github.com/chucknorris/roundhouse

Apache 2.0 лицензиясы бойынша таратылған бұл тасымалдауды басқару құралы, алдыңғы сияқты, T-SQL тасымалдау механизмінде жұмыс істейді. Әзірлеушілер ыңғайлы әзірлеу процесін жасаудан гөрі, ДҚБЖ қолдауына қатысты техникалық мәселелерді шешуге басымдық берген сияқты.

Артықшылықтары:

  • Қажетті ДҚБЖ қолдайды (соның ішінде Oracle)

Кемшіліктері:

  • Oracle (сондай-ақ біз үшін маңызды емес Access) .NET Core жүйесінде қолдау көрсетілмейді, тек .NET Full Framework жүйесінде
  • ORM-мен жұмыс істемейді
  • Алдыңғы құралға қарағанда құжаттама тіпті аз
  • Тағы да – көшіру сценарийлер арқылы жазылады

ThinkingHome.Migrator

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау

MIT лицензиясы бойынша таратылатын .NET Core платформасына нұсқаланған дерекқор схемасын тасымалдауға арналған құрал. Әзірлеушінің өзі оның соңғы нұсқасы туралы бір жыл бұрын жазған.

Артықшылықтары:

  • .NET Core үшін жасалған
  • Тасымалдаудың тармақталу тізбегін жүзеге асырды
  • Көшіру журналын тіркеу жүзеге асырылды

Кемшіліктері:

  • Соңғы рет бір жыл бұрын жаңартылған. Жобаға қолдау көрсетілмеген сияқты
  • Oracle қолдамайды (мақалада бұл .NET Core үшін тұрақты енгізудің жоқтығынан екені айтылған - бірақ бұл бір жыл бұрын)
  • Көшірулерді автоматты түрде жасау жоқ

Тұтастай алғанда, жоба перспективалы болып көрінеді, әсіресе ол дамитын болса, бірақ біз осы жерде және қазір шешім қабылдауымыз керек еді.

Fluent Migrator

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау
github.com/fluentmigrator/fluentmigrator

Жанкүйерлердің үлкен армиясы бар ең танымал көші-қон құралы. Apache 2.0 лицензиясы бойынша таратылады. Сипаттамада айтылғандай, бұл Ruby on Rails Migrations жүйесіне ұқсас .NET үшін тасымалдау негізі. Дерекқор схемасына өзгертулер C# сыныптарында сипатталған.

Мұнда артықшылықтар бар:

  • Қажетті ДҚБЖ қолдауы
  • .NET Core қолдауы
  • Үлкен дамыған қоғамдастық
  • Көші-қон арасындағы қайшылықтар дәйекті түрде шешіледі — көші-қонның орындалу реті көрсетіледі. Сонымен қатар, егер бір нысанның айналасында қайшылық туындаса, кодты біріктіру кезінде ол кодтың қалған бөлігіндегі сияқты шешіледі.
  • Сәтті тасымалдаудан кейін орындалатын профильдер бар. Және олар сервистік функцияларды атқара алады.Соңғы жаңарту бір ай бұрын болды, яғни жоба өміршең

Минустарға келетін болсақ, олар мыналар:

  • Көшірулерді автоматты түрде жасау жоқ
  • EF үлгілерімен байланыс жоқ
  • Дерекқор суреті жоқ

Біздің таңдауымыз қандай болды?

Мәліметтерді тасымалдау жүйелерін салыстыру және таңдау

Қызу пікірталас екі параметрдің төңірегінде өрбіді – көші-қонды автоматты түрде қалыптастыру және қақтығыстарды дұрыс шешу. Басқа факторлар әлдеқайда аз қорқынышты болды. Нәтижесінде, талқылау нәтижелері бойынша команда жаңа жобада Fluent Migrator қолданбасын пайдалану туралы шешім қабылдады. Өйткені келешекте жанжалдарды шешу әлдеқайда көп пайда әкеледі.

қорытындылар

Әрине, мінсіз құралдар жоқ. Сондықтан таңдау жасау үшін «қалауларымызға» басымдық беруіміз керек еді. Дегенмен, басқа командалар мен басқа тапсырмалар үшін басқа факторлар шешуші болуы мүмкін. Бұл мақала сізге таңдау жасауға көмектеседі деп үміттенеміз.

Ақпарат көзі: www.habr.com

пікір қалдыру