Маалыматтарды көчүрүү системаларын салыштыруу жана тандоо

Маалыматтарды көчүрүү системаларын салыштыруу жана тандоо

Маалыматтарды көчүрүү системаларын салыштыруу жана тандоо

Берилиштер модели иштеп чыгуу процессинде өзгөрүүгө умтулат жана кайсы бир учурда ал маалымат базасына туура келбейт. Албетте, маалымат базасы жок кылынышы мүмкүн, андан кийин ORM моделге дал келген жаңы версияны түзөт, бирок бул процедура учурдагы маалыматтардын жоголушуна алып келет. Ошентип, миграциялык тутумдун функциясы схеманы өзгөртүүнүн натыйжасында ал тиркемедеги маалыматтар модели менен учурдагы маалыматтарды жоготпостон синхрондоштурууну камсыз кылуу болуп саналат.

Бул макалада биз маалымат базасынын миграциясын башкаруунун ар кандай куралдарын карагыбыз келет. Бул карап чыгуу ушул сыяктуу тандоого туш болгон иштеп чыгуучулар үчүн пайдалуу болот деп үмүттөнөбүз.

маселе

Биздин компания учурда продуктунун кийинки муунун - Docs Security Suite (DSS) жигердүү иштеп жатат. Сервер бөлүгү .Net Core менен жазылган жана DBMS катары Entity Framework Core колдонулат. Тиркемени иштеп чыгууда биз Code First ыкмасын колдонобуз.

Колдонмо доменинин модели бир эле учурда бир нече иштеп чыгуучулар тарабынан түзүлөт - ар бири системанын өзүнүн логикалык бөлүгү үчүн жооптуу.

DSSтин мурунку муунунда миграцияны башкаруу системасы катары классикалык Entity Framework Migrations (EF 6) колдонулган. Бирок, айрым даттануулар ага каршы топтолгон, эң негизгиси, EF версиядагы чыр-чатактарды чечүүгө акыл-эстүү мамилеси жок. Бул факт колдоонун бир бөлүгү катары мүчүлүштүктөрдү оңдоодо бизди капа кылууда, ошондуктан биз альтернативалуу варианттарды карап чыгууну чечтик.

Талкуунун жыйынтыгында миграцияны башкаруу системасына төмөнкү талаптар түзүлдү:

  1. Ар кандай DBMS үчүн колдоо. MS SQL Server, PostgreSQL, Oracle талап кылынат, бирок башкаларды колдонсо болот.
  2. ORM менен иштөө. Башында, EF Core колдонуу пландаштырылган, бирок долбоорлоо баскычында биз башка ORMs карап чыгууга даяр болчу.
  3. Миграцияларды авто-генерациялоо. Code First иштеп чыгууну эске алуу менен, мен миграцияны “кол менен жазуу” зарылдыгынан алыс болгум келет
  4. Версиядагы карама-каршылыктар. Бөлүштүрүлгөн иштеп чыгуу чөйрөсүндө, бириктирилгенде, EF Core чыр-чатактардан жабыркашы мүмкүн. Бул олуттуу көйгөй болуп калат, анткени тиркеменин ар кандай бөлүктөрү ар кандай иштеп чыгуучулар тарабынан түзүлгөн, андыктан ар бирине көп убакыт коротушуңуз керек.
  5. Өркүндөтүлгөн документтер жана колдоо. Бул жерде бизге эч кандай түшүндүрмөнүн кереги жоктой туюлат
  6. бекер. Критерий шарттуу, анткени системалар өтө кымбат же кымбат эмес, бирок ыңгайлуулугу боюнча идеалдуу, биз да карап чыгууга даярбыз.

Кичинекей изилдөөнүн натыйжасында төмөнкү варианттар табылды жана карап чыгууга ылайыктуу деп табылды:

  1. EF Негизги Миграциялары
  2. DBup
  3. RoundhouseE
  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 аркылуу сүрөттөлөт.

Кандай артыкчылыктары бар:

  • Көп сандаган DBMS колдоо (MS SQL Server, PstgreSQL, MySQL)
  • Скрипттер T-SQLде жазылгандыктан, алар абдан жөнөкөй көрүнөт
  • Чыр-чатактар ​​SQL аркылуу да чечилет

Жана минустары:

  • Колдоого алынган DBMSтердин ар кандай түрлөрү менен Oracle алардын бири эмес
  • ORM менен иштешпейт
  • T-SQL скрипттерин кол менен жазуу биз көздөгөн нерсе эмес
  • SQL скрипттерин жазуу жагынан алар талап кылынбашы мүмкүн болсо да, документация жана коомчулук ушундай.

RoundhouseE

Маалыматтарды көчүрүү системаларын салыштыруу жана тандоо
github.com/chucknorris/roundhouse

Apache 2.0 лицензиясынын алкагында таратылган бул миграцияны башкаруу куралы, мурункудай эле, T-SQL миграция кыймылдаткычында иштейт. Сыягы, иштеп чыгуучулар ыңгайлуу иштеп чыгуу процессин түзүүнүн ордуна, DBMS колдоосуна байланыштуу техникалык маселелерди чечүүгө артыкчылык беришкен.

артыкчылыктары:

  • Керектүү DBMS колдойт (анын ичинде 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# класстарында сүрөттөлөт.

Бул жерде артыкчылыктар бар:

  • Керектүү DBMS үчүн колдоо
  • .NET Core колдоосу
  • Чоң өнүккөн коомчулук
  • Миграциялардын ортосундагы чыр-чатактар ​​ырааттуу түрдө чечилет — миграцияны аткаруунун тартиби көрсөтүлөт. Кошумчалай кетсек, эгер конфликт бир объекттин айланасында пайда болсо, кодду бириктиргенде, ал коддун калган бөлүгүндөгүдөй эле чечилет.
  • Ийгиликтүү миграциядан кийин аткарылган профилдер бар. Жана алар сервистик функцияларды аткара алышат.Акыркы жаңылануу бир ай мурун болгон, башкача айтканда, долбоор тирүү

Минустарга келсек, бул жерде:

  • Миграцияны автоматтык түрдө түзүү жок
  • EF моделдери менен байланыш жок
  • Маалымат базасынын сүрөттөрү жок

Биздин тандоо кандай болду?

Маалыматтарды көчүрүү системаларын салыштыруу жана тандоо

Кызуу талаш-тартыштар эки параметрдин тегерегинде жүрдү - миграцияны автоматтык түрдө түзүү жана конфликттерди акыл-эстүү чечүү. Башка факторлор алда канча азыраак коркунучтуу болгон. Жыйынтыгында талкуунун жыйынтыгы менен команда жаңы долбоордо Fluent Migrator программасын колдонууну чечти. Анткени чыр-чатакты чечүү келечекте бир топ пайда алып келет.

табылгалары

Албетте, идеалдуу куралдар жок. Ошентип, биз тандоо жасоо үчүн "каалообузду" биринчи орунга коюшубуз керек болчу. Бирок, башка командалар жана башка милдеттер үчүн башка факторлор чечүүчү болушу мүмкүн. Бул макала сизге тандоо жасоого жардам берет деп үмүттөнөбүз.

Source: www.habr.com

Комментарий кошуу