Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն

Տվյալների մոդելը հակված է փոփոխության զարգացման գործընթացում, և ինչ-որ պահի այն այլևս չի համապատասխանում տվյալների բազային: Իհարկե, տվյալների բազան կարող է ջնջվել, իսկ հետո ORM-ը կստեղծի նոր տարբերակ, որը կհամապատասխանի մոդելին, սակայն այս ընթացակարգը կհանգեցնի առկա տվյալների կորստի: Այսպիսով, միգրացիոն համակարգի գործառույթն է ապահովել, որ սխեմայի փոփոխության արդյունքում այն ​​համաժամանակացվի հավելվածում առկա տվյալների մոդելի հետ՝ չկորցնելով առկա տվյալները:

Այս հոդվածում մենք կցանկանայինք դիտարկել տվյալների բազայի միգրացիան կառավարելու տարբեր գործիքներ: Հուսով ենք, որ այս վերանայումը օգտակար կլինի նմանատիպ ընտրության առջև կանգնած ծրագրավորողների համար:

Առաջադրանք

Մեր ընկերությունը ներկայումս ակտիվորեն զարգացնում է արտադրանքի հաջորդ սերունդը՝ Docs Security Suite (DSS): Սերվերի մասը գրված է .Net Core-ով, իսկ Entity Framework Core-ն օգտագործվում է որպես DBMS: Հավելվածը նախագծելիս մենք օգտագործում ենք Code First մոտեցումը:

Հավելվածի տիրույթի մոդելը ստեղծվում է միաժամանակ մի քանի մշակողների կողմից. յուրաքանչյուրը պատասխանատու է համակարգի իր տրամաբանական մասի համար:

DSS-ի նախորդ սերունդը որպես միգրացիայի կառավարման համակարգ օգտագործում էր դասական Entity Framework Migrations (EF 6): Այնուամենայնիվ, դրա դեմ որոշ բողոքներ են կուտակվել, որոնցից հիմնականն այն է, որ EF-ն չունի խելամիտ մոտեցում տարբերակների կոնֆլիկտները լուծելու համար: Այս փաստը դեռևս վրդովեցնում է մեզ, երբ շտկում ենք սխալները որպես աջակցության մաս, ուստի մենք որոշեցինք դիտարկել այլընտրանքային տարբերակներ:

Քննարկման արդյունքում ձևավորվել են միգրացիայի կառավարման համակարգի հետևյալ պահանջները.

  1. Աջակցություն տարբեր DBMS-ների համար: Պահանջվում են MS SQL Server, PostgreSQL, Oracle, բայց հնարավոր է, որ հնարավոր է օգտագործել ուրիշներ
  2. Աշխատում է ORM-ի հետ: Սկզբում նախատեսվում էր օգտագործել EF Core-ը, սակայն նախագծման փուլում մենք պատրաստ էինք դիտարկել այլ ORM-ներ:
  3. Միգրացիաների ավտոմատ գեներացիա: Հաշվի առնելով Code First-ի զարգացումը, ես կցանկանայի խուսափել «ձեռագիր» միգրացիաների անհրաժեշտությունից
  4. Տարբերակների հակասություններ. Բաշխված զարգացման միջավայրում, երբ միաձուլվում է, EF Core-ը կարող է տուժել կոնֆլիկտներից: Սա էական խնդիր է դառնում, քանի որ հավելվածի տարբեր մասեր ստեղծվում են տարբեր ծրագրավորողների կողմից, այնպես որ դուք պետք է շատ ժամանակ ծախսեք յուրաքանչյուրի վրա:
  5. Ընդլայնված փաստաթղթեր և աջակցություն: Այստեղ, մեզ թվում է, բացատրություն պետք չէ
  6. Անվճար. Չափանիշը պայմանական է, քանի որ համակարգերը շատ թանկ կամ թանկ չեն, բայց հարմարության մեջ իդեալական են, մենք նույնպես պատրաստ էինք դիտարկել.

Փոքրիկ հետազոտության արդյունքում գտնվել և դիտարկման համար ցանկալի են եղել հետևյալ տարբերակները.

  1. EF հիմնական միգրացիաներ
  2. DBup
  3. RoundhouseE
  4. ThinkingHome.Migrator
  5. Սահուն միգրատոր

Իսկ հիմա մի փոքր ավելի մանրամասն

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն
EntityFramework Core Migrations

Բնականաբար, սա ընտրության առաջին և հիմնական տարբերակն էր։ Հարազատ գործիք, որն աշխատում է առանց դափի հետ շփվելու: Մեծ քանակությամբ փաստաթղթեր, պաշտոնական և ոչ այնքան, պարզություն և այլն: Այնուամենայնիվ, դասական 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-ը .NET գրադարան է, որը տեղադրված է NuGet-ի կողմից և օգնում է փոփոխություններ կատարել SQL Server-ում: Այն հետևում է, թե որ փոփոխության սկրիպտներն են արդեն իրականացվել և գործարկում է դրանք, որոնք անհրաժեշտ են տվյալների բազան թարմացնելու համար: Գրադարանը առաջացել է 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

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն

Տվյալների տվյալների բազայի սխեմայի տարբերակված միգրացիայի գործիք .NET Core հարթակ, որը բաշխված է MIT լիցենզիայի ներքո: Ինքը՝ մշակողը, գրել է դրա վերջին տարբերակի մասին գրեթե մեկ տարի առաջ.

Կոալիցիայում:

  • Նախատեսված է .NET Core-ի համար
  • Իրականացրել է միգրացիաների ճյուղավորվող հաջորդականություն
  • Իրականացվել է միգրացիայի գրանցում

Դեմ:

  • Վերջին անգամ թարմացվել է մեկ տարի առաջ: Ըստ երևույթին, նախագիծը չի աջակցվում
  • Չի աջակցվում Oracle-ի կողմից (հոդվածում ասվում է, որ դա պայմանավորված է .NET Core-ի կայուն ներդրման բացակայության պատճառով, բայց սա մեկ տարի առաջ է)
  • Միգրացիաների ավտոմատ սերունդ չկա

Ընդհանուր առմամբ, նախագիծը խոստումնալից է թվում, հատկապես, եթե այն զարգանա, բայց մենք պետք է որոշում կայացնեինք այստեղ և հիմա:

Սահուն միգրատոր

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն
github.com/fluentmigrator/fluentmigrator

Ամենահայտնի միգրացիոն գործիքը երկրպագուների մեծ բանակով: Բաշխված է Apache 2.0 լիցենզիայի ներքո: Ինչպես նշված է նկարագրության մեջ, դա .NET-ի միգրացիոն շրջանակ է, որը նման է Ruby on Rails Migrations-ին: Տվյալների բազայի սխեմայի փոփոխությունները նկարագրված են C# դասերում:

Այստեղ կան առավելություններ.

  • Աջակցություն պահանջվող DBMS-ին
  • .NET Core աջակցություն
  • Խոշոր զարգացած համայնք
  • Միգրացիաների միջև կոնֆլիկտները լուծվում են հաջորդաբար. նշվում է միգրացիաների կատարման կարգը: Բացի այդ, եթե կոնֆլիկտ է ծագում մեկ սուբյեկտի շուրջ, կոդը միաձուլելիս այն լուծվում է այնպես, ինչպես մնացած կոդի մեջ։
  • Կան պրոֆիլներ, որոնք կատարվում են հաջող միգրացիայից հետո: Եվ դրանք կարող են կրել սպասարկման գործառույթներ:Վերջին թարմացումը եղել է մեկ ամիս առաջ, այսինքն՝ նախագիծը կենդանի է

Ինչ վերաբերում է մինուսներին, ապա դրանք հետևյալն են.

  • Միգրացիաների ավտոմատ սերունդ չկա
  • Ոչ մի կապ EF մոդելների հետ
  • Տվյալների բազայի նկարներ չկան

Ո՞րն էր մեր ընտրությունը:

Տվյալների միգրացիոն համակարգերի համեմատություն և ընտրություն

Թեժ բանավեճերը ծավալվեցին երկու պարամետրի շուրջ՝ միգրացիաների ավտոմատ առաջացում և հակամարտությունների ողջամիտ լուծում։ Մյուս գործոնները շատ ավելի քիչ վախեցնող էին: Արդյունքում, քննարկման արդյունքների հիման վրա թիմը որոշեց օգտագործել Fluent Migrator-ը նոր նախագծում։ Քանի որ ապագայում հակամարտությունների լուծումը շատ ավելի մեծ օգուտներ կբերի:

Արդյունքները

Իհարկե, չկան կատարյալ գործիքներ: Այսպիսով, մենք պետք է առաջնահերթություն դնեինք ընտրություն կատարելու մեր «ցանկություններին»: Այնուամենայնիվ, այլ թիմերի և այլ առաջադրանքների համար այլ գործոններ կարող են որոշիչ լինել: Հուսով ենք, որ այս հոդվածը կօգնի ձեզ ընտրություն կատարել:

Source: www.habr.com

Добавить комментарий