Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi

Məlumat modeli inkişaf prosesi zamanı dəyişməyə meyllidir və müəyyən bir nöqtədə verilənlər bazasına uyğun gəlməyi dayandırır. Əlbəttə ki, verilənlər bazası silinə bilər və sonra ORM modelə uyğun gələn yeni versiya yaradacaq, lakin bu prosedur mövcud məlumatların itirilməsinə səbəb olacaq. Beləliklə, miqrasiya sisteminin funksiyası, sxem dəyişikliyi nəticəsində mövcud məlumatları itirmədən tətbiqdəki məlumat modeli ilə sinxronizasiyasını təmin etməkdir.

Bu yazıda verilənlər bazası miqrasiyasını idarə etmək üçün müxtəlif vasitələri nəzərdən keçirmək istərdik. Ümid edirik ki, bu baxış oxşar seçimlə qarşılaşan tərtibatçılar üçün faydalı olacaq.

Tapşırıq

Şirkətimiz hazırda məhsulun növbəti nəslini - Docs Security Suite-ni (DSS) fəal şəkildə inkişaf etdirir. Server hissəsi .Net Core-da yazılmışdır və Entity Framework Core müvafiq olaraq DBMS kimi istifadə olunur. Tətbiqi tərtib edərkən biz Code First yanaşmasından istifadə edirik.

Tətbiq domeni modeli eyni anda bir neçə tərtibatçı tərəfindən yaradılır - hər biri sistemin öz məntiqi hissəsinə cavabdehdir.

Əvvəlki nəsil DSS miqrasiya idarəetmə sistemi kimi klassik Entity Framework Migrations (EF 6) istifadə edirdi. Bununla belə, ona qarşı bəzi şikayətlər yığılıb, ən başlıcası EF-də versiya konfliktlərinin həllinə sağlam yanaşmanın olmaması olub. Bu fakt dəstəyin bir hissəsi kimi səhvləri düzəldərkən hələ də bizi narahat edir, buna görə də alternativ variantları nəzərdən keçirmək qərara alındı.

Müzakirə nəticəsində miqrasiya idarəetmə sisteminə aşağıdakı tələblər formalaşdırılıb:

  1. Müxtəlif DBMS üçün dəstək. Məcburi MS SQL Server, PostgreSQL, Oracle, lakin başqalarından istifadə etmək potensial olaraq mümkündür
  2. ORM ilə işləmək Əvvəlcə EF Core istifadə edilməli idi, lakin dizayn mərhələsində digər ORM-lər nəzərdən keçirilməyə hazır idi.
  3. Miqrasiyaların avtomatik yaradılması. Code First-in işlənib hazırlanmasını nəzərə alaraq, miqrasiyaların “qələmlərlə rənglənməsi” ehtiyacından qaçmaq istərdim
  4. Versiya ziddiyyətləri. Paylanmış inkişaf mühitində birləşmə zamanı EF Core münaqişələrə düşə bilər. Tətbiqin müxtəlif hissələri müxtəlif tərtibatçılar tərəfindən yaradıldığından bu, əhəmiyyətli bir problemə çevrilir, buna görə də hər birinə çox vaxt sərf etməlisiniz.
  5. Hazırlanmış sənədlər və dəstək. Burada bizə elə gəlir ki, izaha ehtiyac yoxdur.
  6. Pulsuz. Kriteriya şərtlidir, çünki çox bahalı sistemlər və ya bahalı deyil, lakin rahatlıq baxımından idealdır, biz də nəzərdən keçirməyə hazır idik.

Kiçik bir araşdırma nəticəsində aşağıdakı variantlar tapıldı və nəzərdən keçirilməsi məqsədəuyğun hesab edildi:

  1. EF Əsas Miqrasiyaları
  2. DBup
  3. Dairəvi evE
  4. ThinkingHome.Migrator
  5. Səlis Miqrasiya

İndi bir az daha

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi
EntityFramework Əsas Miqrasiyaları

Təbii ki, bu seçim üçün ilk və əsas variant idi. Heç bir qaval rəqsi olmadan qutudan çıxan yerli alət. Böyük miqdarda sənədlər, rəsmi və belə deyil, sadəlik və s. Bununla belə, klassik EF-ə qarşı irəli sürülən iddialar EF Core üçün də kifayət qədər aktualdır.

Beləliklə, EF Core üçün üstünlüklər vurğulanır:

  • Microsoft dəstəyi, sənədlər, o cümlədən rus dilində, böyük bir cəmiyyət
  • CodeFirst əsasında miqrasiyaların avtomatik yaradılması
  • EF 6 ilə müqayisədə EF Core artıq verilənlər bazasının snapshotunu saxlamır. Code First-də EF Core ilə işləyərkən verilənlər bazasını yerləşdirmək artıq tələb olunmur
  • Biz Code First-dən rəqs etdiyimiz üçün bütün tələb olunan məlumat girişi təminatçılarına bir miqrasiya etmək mümkündür
  • Provayderlərə gəldikdə, o, PostgreSQL, Oracle və s. və s., hətta MS SQL Server -nı dəstəkləyir.

Həm də mənfi cəhətləri:

  • Münaqişənin həlli eyni olaraq qalır. Miqrasiya ardıcıllığını qurmaq və verilənlər bazası anlıq görüntülərini yeniləmək lazımdır
  • Miqrasiyaların yaradıldığı modellərdən asılılıq

DbUp

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi
dbup.github.io

DbUp NuGet tərəfindən quraşdırılmış və SQL Serverə dəyişiklikləri təkan verməyə kömək edən .NET kitabxanasıdır. O, hansı dəyişiklik skriptlərinin artıq icra olunduğunu izləyir və verilənlər bazasını yeniləmək üçün lazım olanları işə salır. Kitabxana ASP.NET-də açıq mənbəli blog mühərriki layihəsindən yaranıb və MIT lisenziyası altında mövcuddur və kod GitHub-dadır. Miqrasiya T-SQL istifadə edərək təsvir edilir.

Burada üstünlüklər nələrdir:

  • Çoxlu sayda DBMS üçün dəstək (MS SQL Server, PstgreSQL, MySQL)
  • Skriptlər T-SQL-də yazıldığından olduqca sadə görünürlər.
  • Münaqişələr də SQL ilə həll olunur

Və mənfi cəhətləri:

  • Dəstəklənən DBMS-lərin bütün müxtəlifliyi ilə Oracle onlardan biri deyil
  • ORM ilə əlaqə yaratmır
  • T-SQL-də "tutacaqlar" ilə skriptlər yazmaq bizim səy göstərdiyimiz şey deyil.
  • Sənədləşmə və icma belədir, baxmayaraq ki, SQL skriptlərinin yazılması baxımından onlara ehtiyac olmaya bilər.

Dairəvi evE

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi
github.com/chucknorris/roundhouse

Apache 2.0 lisenziyası altında paylanmış bu miqrasiya idarəetmə aləti, əvvəlki kimi, T-SQL miqrasiya mühərrikində işləyir. Göründüyü kimi, tərtibatçılar rahat inkişaf prosesi yaratmaqdansa, DBMS-nin dəstəklənməsi baxımından texniki problemlərin həllinə diqqət yetiriblər.

Pros:

  • Tələb olunan DBMS-ni dəstəkləyir (Oracle daxil olmaqla)

Eksiler:

  • Oracle (həmçinin bizim üçün əhəmiyyətsiz olan Access) .NET Core-da dəstəklənmir, yalnız .NET Full Framework-də
  • ORM ilə işləmir
  • Əvvəlki alətdən daha az sənədlər
  • Yenə - köçürmələr skriptlərlə yazılır

ThinkingHome.Migrator

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi

MIT lisenziyası altında paylanmış verilənlər bazası sxeminin .NET Core platformasına versiyalı miqrasiyası üçün alət. Tərtibatçı özü onun son versiyası haqqında demək olar ki, bir il əvvəl yazmışdı.

Pros:

  • .NET Core üçün uyğunlaşdırılmışdır
  • Miqrasiyaların budaqlanan ardıcıllığını həyata keçirdi
  • Miqrasiya qeydini həyata keçirdi

Eksiler:

  • Son yeniləmə bir il əvvəl idi. Görünür, layihə dəstəklənmir
  • Oracle tərəfindən dəstəklənmir (məqalədə bunun .NET Core üçün sabit tətbiqin olmaması ilə əlaqədar olduğu bildirilir - lakin bu bir il əvvəldir)
  • Miqrasiyaların avtomatik yaradılması yoxdur

Ümumiyyətlə, layihə perspektivli görünür, xüsusən də inkişaf etdirilibsə, amma biz burada və indi qərar verməli idik.

Səlis Miqrasiya

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi
github.com/fluentmigrator/fluentmigrator

Böyük bir fan bazası olan ən məşhur miqrasiya vasitəsi. Apache 2.0 lisenziyası altında paylanmışdır. Təsvirdə qeyd edildiyi kimi, Ruby on Rails Migrations-a bənzər .NET üçün miqrasiya çərçivəsidir. Verilənlər bazası sxemindəki dəyişikliklər C# siniflərində təsvir edilmişdir.

Burada üstünlüklər var:

  • Tələb olunan DBMS üçün dəstək
  • .NET Core dəstəyi
  • Böyük inkişaf etmiş icma
  • Miqrasiya münaqişələri ardıcıllıqla həll olunur - miqrasiya qaydası dəqiqləşdirilir. Bundan əlavə, bir qurum ətrafında münaqişə yaranarsa, kodu birləşdirərkən, kodun qalan hissəsində olduğu kimi həll edilir.
  • Uğurlu miqrasiyadan sonra işləyən profillər var. Və onlar xidmət funksiyalarını daşıya bilirlər.Son yeniləmə bir ay əvvəl olub, yəni layihə yaşayır

Mənfi cəhətlərə gəlincə, burada:

  • Miqrasiyaların avtomatik yaradılması yoxdur
  • EF modelləri ilə əlaqə yoxdur
  • DB snapshotları yoxdur

Seçimimiz nə idi?

Məlumat miqrasiya sistemlərinin müqayisəsi və seçilməsi

Ən qızğın müzakirələr iki parametr ətrafında cərəyan edirdi - miqrasiyaların avtomatik yaranması və münaqişənin sağlam həlli. Digər amillər daha az qorxutdu. Nəticədə, müzakirənin nəticələrinə əsasən komanda yeni layihədə Fluent Migrator-dan istifadə etmək qərarına gəldi. Münaqişələrin həlli üçün gələcəkdə daha çox üstünlüklər gətirəcəkdir.

Tapıntılar

Əlbəttə ki, mükəmməl alətlər yoxdur. Beləliklə, seçim etmək üçün "İstək Siyahımızı" prioritetləşdirməli olduq. Bununla belə, digər komandalar və digər tapşırıqlar üçün başqa amillər həlledici ola bilər. Ümid edirik ki, bu məqalə seçiminizi etməkdə sizə kömək edəcək.

Mənbə: www.habr.com

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