Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων

Το μοντέλο δεδομένων τείνει να αλλάζει κατά τη διαδικασία ανάπτυξης και σε κάποιο σημείο δεν αντιστοιχεί πλέον στη βάση δεδομένων. Φυσικά, η βάση δεδομένων μπορεί να διαγραφεί και στη συνέχεια το 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 Core Migrations
  2. DBup
  3. RoundhouseE
  4. ThinkingHome.Migrator
  5. Fluent Migrator

Και τώρα λίγο περισσότερες λεπτομέρειες

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων
EntityFramework Core Migrations

Φυσικά, αυτή ήταν η πρώτη και κύρια επιλογή. Ένα εγγενές όργανο που δουλεύει έξω από το κουτί χωρίς να ταλαιπωρείται με ένα ντέφι. Ένας μεγάλος όγκος τεκμηρίωσης, επίσημη και όχι τόσο, απλότητα κ.λπ. Ωστόσο, τα παράπονα που γίνονται για το κλασικό EF είναι επίσης αρκετά σχετικά με το EF Core.

Έτσι, επισημαίνονται τα πλεονεκτήματα για το EF Core:

  • Υποστήριξη της Microsoft, τεκμηρίωση, συμπεριλαμβανομένων των ρωσικών, τεράστια κοινότητα
  • Αυτόματη δημιουργία μεταναστεύσεων με βάση το CodeFirst
  • Σε σύγκριση με το EF 6, το EF Core δεν αποθηκεύει πλέον ένα στιγμιότυπο της βάσης δεδομένων. Όταν εργάζεστε με το EF Core στο Code First, δεν είναι πλέον απαραίτητο να αναπτύξετε μια βάση δεδομένων
  • Εφόσον χορεύουμε από το Code First, είναι δυνατό να πραγματοποιηθεί μία μετάβαση σε όλους τους απαιτούμενους παρόχους πρόσβασης δεδομένων
  • Όσον αφορά τους παρόχους, υποστηρίζεται η PostgreSQL, η Oracle, κ.λπ., κ.λπ., ακόμη και ο MS SQL Server 

Και επίσης τα μειονεκτήματα:

  • Η επίλυση των συγκρούσεων παρέμεινε στο ίδιο επίπεδο. Είναι απαραίτητο να ακολουθήσετε τις μετεγκαταστάσεις και να ενημερώσετε τα στιγμιότυπα της βάσης δεδομένων
  • Εξάρτηση από τα μοντέλα στα οποία δημιουργούνται οι μεταναστεύσεις

DbUp

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων
dbup.github.io

Το DbUp είναι μια βιβλιοθήκη .NET που εγκαθίσταται από την NuGet και βοηθά στην προώθηση αλλαγών στον SQL Server. Παρακολουθεί ποια σενάρια αλλαγών έχουν ήδη εκτελεστεί και εκτελεί αυτά που είναι απαραίτητα για την ενημέρωση της βάσης δεδομένων. Η βιβλιοθήκη προέκυψε από ένα έργο για μια μηχανή blogging ανοιχτού κώδικα στο 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 - αλλά αυτό είναι πριν από ένα χρόνο)
  • Καμία αυτόματη δημιουργία μεταναστεύσεων

Συνολικά, το έργο φαίνεται πολλά υποσχόμενο, ειδικά αν επρόκειτο να αναπτυχθεί, αλλά έπρεπε να πάρουμε μια απόφαση εδώ και τώρα.

Fluent Migrator

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων
github.com/fluentmigrator/fluentmigrator

Το πιο δημοφιλές εργαλείο μετανάστευσης με μεγάλο στρατό θαυμαστών. Διανέμεται υπό την άδεια Apache 2.0. Όπως αναφέρεται στην περιγραφή, είναι ένα πλαίσιο μετεγκατάστασης για το .NET, παρόμοιο με το Ruby on Rails Migrations. Οι αλλαγές στο σχήμα της βάσης δεδομένων περιγράφονται στις κλάσεις C#.

Υπάρχουν πλεονεκτήματα εδώ:

  • Υποστήριξη για τα απαιτούμενα DBMS
  • Υποστήριξη .NET Core
  • Μεγάλη ανεπτυγμένη κοινότητα
  • Οι διενέξεις μεταξύ των μετεγκαταστάσεων επιλύονται διαδοχικά—καθορίζεται η σειρά εκτέλεσης των μετεγκαταστάσεων. Επιπλέον, εάν προκύψει μια σύγκρουση γύρω από μια οντότητα, κατά τη συγχώνευση του κώδικα, επιλύεται με τον ίδιο τρόπο όπως και στον υπόλοιπο κώδικα
  • Υπάρχουν προφίλ που εκτελούνται μετά από επιτυχή μετεγκατάσταση. Και μπορούν να φέρουν λειτουργίες σέρβις.Η τελευταία ενημέρωση έγινε πριν από ένα μήνα, δηλαδή το έργο είναι ζωντανό

Όσο για τα μειονεκτήματα, εδώ είναι:

  • Καμία αυτόματη δημιουργία μεταναστεύσεων
  • Καμία σύνδεση με μοντέλα EF
  • Δεν υπάρχουν στιγμιότυπα βάσης δεδομένων

Ποια ήταν η επιλογή μας;

Σύγκριση και επιλογή συστημάτων μετεγκατάστασης δεδομένων

Οι έντονες συζητήσεις περιστράφηκαν γύρω από δύο παραμέτρους - την αυτόματη δημιουργία μεταναστεύσεων και τη λογική επίλυση των συγκρούσεων. Άλλοι παράγοντες ήταν πολύ λιγότερο τρομακτικοί. Ως αποτέλεσμα, με βάση τα αποτελέσματα της συζήτησης, η ομάδα αποφάσισε να χρησιμοποιήσει το Fluent Migrator στο νέο έργο. Διότι η επίλυση συγκρούσεων στο μέλλον θα φέρει πολύ περισσότερα οφέλη.

Ευρήματα

Φυσικά, δεν υπάρχουν τέλεια εργαλεία. Έπρεπε λοιπόν να δώσουμε προτεραιότητα στα «θέλω» μας για να κάνουμε μια επιλογή. Ωστόσο, για άλλες ομάδες και άλλα καθήκοντα, άλλοι παράγοντες μπορεί να είναι καθοριστικοί. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να κάνετε μια επιλογή.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο