Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох

Өгөгдлийн загвар нь хөгжүүлэлтийн явцад өөрчлөгдөх хандлагатай байдаг бөгөөд хэзээ нэгэн цагт энэ нь мэдээллийн сантай тохирохоо больсон. Мэдээжийн хэрэг, мэдээллийн санг устгаж болох бөгөөд дараа нь 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. Дугуй байшинE
  4. ThinkingHome.Migrator
  5. Чөлөөт цагаач

Тэгээд одоо бага зэрэг дэлгэрэнгүй

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох
EntityFramework үндсэн шилжилт хөдөлгөөн

Мэдээжийн хэрэг, энэ нь сонгох хамгийн анхны бөгөөд гол сонголт байсан. Хэнгэрэг дуугаргахгүйгээр гартаа тааралддаг уугуул хөгжмийн зэмсэг. Их хэмжээний баримт бичиг, албан ёсны, тийм биш, энгийн байдал гэх мэт. Гэсэн хэдий ч сонгодог EF-ийн талаархи гомдол нь EF Core-д нэлээд хамааралтай.

Тиймээс EF Core-ийн давуу талуудыг онцлон тэмдэглэв.

  • Microsoft-ын дэмжлэг, баримт бичиг, түүний дотор орос хэл дээр, асар том нийгэмлэг
  • CodeFirst дээр суурилсан шилжилт хөдөлгөөнийг автоматаар үүсгэх
  • EF 6-тай харьцуулахад EF Core нь мэдээллийн сангийн хормын хувилбарыг хадгалахаа больсон. Code First-д EF Core-тэй ажиллахад мэдээллийн сан байршуулах шаардлагагүй болсон
  • Бид Code First-ээс бүжиглэж байгаа тул шаардлагатай бүх өгөгдөлд хандах үйлчилгээ үзүүлэгч рүү нэг шилжилт хийх боломжтой
  • Үйлчилгээ үзүүлэгчдийн тухайд PostgreSQL, Oracle гэх мэт, тэр ч байтугай MS SQL серверийг дэмждэг 

Мөн сул талууд:

  • Мөргөлдөөнийг шийдвэрлэх түвшин ижил түвшинд хэвээр байна. Шилжилтийн дарааллыг эрэмбэлэх, мэдээллийн сангийн хормын хувилбаруудыг шинэчлэх шаардлагатай
  • Шилжилтийг бий болгож буй загваруудаас хамаарал

DbUp

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох
dbup.github.io

DbUp нь NuGet-ээс суулгасан .NET номын сан бөгөөд SQL серверт өөрчлөлт оруулахад тусалдаг. Энэ нь аль хэдийн хийгдсэн өөрчлөлтийн скриптүүдийг хянаж, мэдээллийн санг шинэчлэхэд шаардлагатай скриптүүдийг ажиллуулдаг. Номын сан нь ASP.NET дээр нээлттэй эхийн блог хөтлөх хөдөлгүүрт зориулсан төслөөс үүссэн бөгөөд MIT лицензийн дор байдаг бөгөөд код нь GitHub дээр байдаг. Шилжилт хөдөлгөөнийг T-SQL ашиглан тайлбарласан.

Ямар давуу талтай вэ:

  • Олон тооны DBMS-ийн дэмжлэг (MS SQL Server, PstgreSQL, MySQL)
  • Скриптүүд нь T-SQL хэл дээр бичигдсэн тул маш энгийн харагддаг
  • Мөн зөрчилдөөнийг SQL ашиглан шийддэг

Мөн сул талууд:

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

Дугуй байшинE

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох
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-д зориулсан тогтвортой хэрэгжилт байхгүйтэй холбоотой гэж нийтлэлд заасан - гэхдээ энэ нь нэг жилийн өмнө юм)
  • Шилжүүлгийг автоматаар үүсгэхгүй

Ерөнхийдөө төсөл нь ирээдүйтэй харагдаж байна, ялангуяа хөгжих юм бол бид энд, одоо шийдвэр гаргах хэрэгтэй байсан.

Чөлөөт цагаач

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох
github.com/fluentmigrator/fluentmigrator

Олон тооны шүтэн бишрэгчидтэй шилжилт хөдөлгөөний хамгийн алдартай хэрэгсэл. Apache 2.0 лицензийн дагуу түгээгдсэн. Тайлбарт дурдсанчлан, энэ нь Ruby on Rails Migrations-тэй төстэй .NET-д зориулсан шилжилтийн хүрээ юм. Өгөгдлийн сангийн схемд гарсан өөрчлөлтийг C# ангиудад тайлбарласан болно.

Энд давуу талууд бий:

  • Шаардлагатай DBMS-ийн дэмжлэг
  • .NET Core-ийн дэмжлэг
  • Том хөгжсөн нийгэмлэг
  • Шилжин суурьшилтын хоорондох зөрчилдөөнийг дараалан шийдвэрлэдэг - шилжилт хөдөлгөөнийг гүйцэтгэх дарааллыг тодорхойлсон. Нэмж дурдахад, хэрэв нэг аж ахуйн нэгжийн эргэн тойронд зөрчилдөөн үүссэн бол кодыг нэгтгэх үед үүнийг бусад кодын нэгэн адил шийдвэрлэдэг.
  • Амжилттай шилжүүлсний дараа хийгдсэн профайлууд байдаг. Мөн тэд үйлчилгээний функцийг гүйцэтгэж чадна.Сүүлийн шинэчлэлт нь сарын өмнө хийгдсэн, өөрөөр хэлбэл төсөл амьд байна

Сул талуудын тухайд гэвэл:

  • Шилжүүлгийг автоматаар үүсгэхгүй
  • EF загваруудтай холбоо байхгүй
  • Өгөгдлийн сангийн хормын хувилбар байхгүй

Бидний сонголт юу байсан бэ?

Өгөгдөл шилжүүлэх системийг харьцуулах, сонгох

Шилжин суурьшилтыг автоматаар бий болгох, зөрчилдөөнийг зөвөөр шийдвэрлэх гэсэн хоёр параметрийн эргэн тойронд ширүүн маргаан өрнөв. Бусад хүчин зүйлээс хамаагүй бага айдас төрүүлэв. Үүний үр дүнд хэлэлцүүлгийн үр дүнд үндэслэн баг шинэ төсөлдөө Fluent Migrator програмыг ашиглахаар шийджээ. Учир нь ирээдүйд зөрчилдөөнийг шийдвэрлэх нь илүү их ашиг тусыг авчрах болно.

үр дүн нь

Мэдээжийн хэрэг төгс төгөлдөр хэрэгсэл гэж байдаггүй. Тиймээс бид сонголтоо хийх "хүсэл"-ээ урьтал болгох хэрэгтэй болсон. Гэсэн хэдий ч бусад баг болон бусад даалгаврын хувьд бусад хүчин зүйлүүд шийдвэрлэх үүрэг гүйцэтгэдэг. Энэ нийтлэл танд сонголт хийхэд тусална гэж найдаж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх