Merql
Καθαρή συγχώνευση βάσεων δεδομένων τριών κατευθύνσεων σε PHP με επίλυση διενέξεων σε επίπεδο στηλών. Σημασιολογία συγχώνευσης τύπου Git για πίνακες MySQL και SQLite.
composer require merql/merqlΤελευταία έκδοση v0.4.1 MIT PHP 8.2+
use Merql\Merql;
Merql::init($connection);
// Snapshot all tables.
$snapshot = Merql::snapshot('baseline');
// Snapshot specific tables.
$snapshot = Merql::snapshot('baseline', ['posts', 'comments', 'users']);Στην πράξη
Μια συγχώνευση διαβάζει τρία αποθηκευμένα στιγμιότυπα και επιστρέφει τις πράξεις προς εγγραφή και τις διενέξεις προς επίλυση.
Συγχώνευση τριών στιγμιότυπων
Δημιουργήστε το στιγμιότυπο βάσης πριν αποκλίνουν τα δύο αντίγραφα και, στη συνέχεια, δημιουργήστε στιγμιότυπο για κάθε πλευρά, για παράδειγμα για μια ενεργή βάση δεδομένων και ένα δοκιμαστικό αντίγραφο. Το ThreeWayMerge συγκρίνει και τις δύο πλευρές με τη βάση και συγχωνεύει τα δύο σύνολα αλλαγών.
Στην καρτέλα αποτελέσματος, η δική μας πλευρά επεξεργάστηκε το content και η άλλη πλευρά επεξεργάστηκε το title και το status της ίδιας γραμμής, οπότε η συγχώνευση διατηρεί και τις τρεις αλλαγές χωρίς διένεξη.
use Merql\Merge\ThreeWayMerge;
$merge = new ThreeWayMerge();
$result = $merge->merge($base, $ours, $theirs);
echo $result->operationCount(); // resolved operations
echo $result->conflictCount(); // unresolved conflictsBase: { title: "Hello", content: "Body", status: "draft" }
Ours: { title: "Hello", content: "Body v2", status: "draft" }
Theirs: { title: "New Title", content: "Body", status: "publish" }
Result: { title: "New Title", content: "Body v2", status: "publish" }Συγχώνευση τριών κατευθύνσεων
Βάση, δική μας πλευρά, άλλη πλευρά. Συγχώνευση τριών κατευθύνσεων τύπου git σε γραμμές και στήλες με κλειδιά αντί για γραμμές κειμένου. Εντοπίζει εισαγωγές, ενημερώσεις και διαγραφές μεταξύ δύο κλάδων.
Επίλυση σε επίπεδο στηλών
Όταν και οι δύο πλευρές αλλάζουν την ίδια γραμμή, το merql συγκρίνει τις στήλες μία προς μία. Αναφέρει διένεξη μόνο όταν η ίδια στήλη αλλάζει σε διαφορετικές τιμές.
Προαιρετική συγχώνευση κελιών
Περάστε ένα CellMergeConfig στο ThreeWayMerge και οι στήλες TEXT συγχωνεύονται γραμμή προς γραμμή με το Myers diff, οι στήλες JSON κλειδί προς κλειδί. Η πρόσοψη Merql και το CLI δεν την ενεργοποιούν.
Πολλαπλές βάσεις δεδομένων
Προσαρμόσιμοι προσαρμογείς σύνδεσης και οδηγοί διαλέκτων, με ενσωματωμένα τα MySQL και SQLite.
Εντοπισμός διενέξεων
Ενημέρωση έναντι ενημέρωσης, ενημέρωση έναντι διαγραφής, διαγραφή έναντι ενημέρωσης και εισαγωγή έναντι εισαγωγής· κάθε περίπτωση αναφέρεται μαζί με τον πίνακα και τη γραμμή. Οι διενέξεις ενημέρωσης έναντι ενημέρωσης αναφέρουν επίσης τη στήλη.
SQL δημιουργία
Παραμετροποιημένες εντολές INSERT, UPDATE, DELETE με σειρά που λαμβάνει υπόψη τα ξένα κλειδιά. Προεπισκόπηση χωρίς εκτέλεση ή εφαρμογή σε συναλλαγή.
CLI
Δημιουργήστε στιγμιότυπα, διαφορές και συγχωνεύσεις από τη γραμμή εντολών. Υποστηρίζει τα MySQL και SQLite μέσω μεταβλητών περιβάλλοντος.
Δοκιμασμένο
32 σενάρια παλινδρόμησης με χειρόγραφες προσδοκώμενες τιμές (composer test:oracle). Το CI εκτελεί δοκιμές μονάδας και ενσωμάτωσης 231 και επίπεδο 10 του PHPStan.
Γιατί Merql
Τα στιγμιότυπα είναι αρχεία
Κάθε στιγμιότυπο είναι ένα αρχείο JSON που μπορείτε να αντιγράψετε μεταξύ μηχανημάτων ή να καταχωρίσετε στον έλεγχο εκδόσεων. Η σύγκριση και η συγχώνευση διαβάζουν αυτά τα αρχεία, οπότε εκτελούνται χωρίς σύνδεση με βάση δεδομένων.
Ελέγξτε πριν από την εγγραφή
Ένα σχέδιο συγχώνευσης δίνει σε κάθε πράξη και ομάδα αλλαγών ένα σταθερό αναγνωριστικό και διατηρεί τις γραμμές βάσης, της δικής μας πλευράς, της άλλης πλευράς και του αποτελέσματος. Επιλέξτε τις ομάδες που θέλετε και εφαρμόστε μόνο αυτές.
Τα παρωχημένα σχέδια διακόπτονται
Η ελεγχόμενη εφαρμογή γράφει μόνο σε γραμμές που εξακολουθούν να συμφωνούν με το στιγμιότυπο που ελέγξατε. Αν μια εντολή επηρεάσει μηδέν γραμμές, η συναλλαγή επαναφέρεται και το αποτέλεσμα περιλαμβάνει το σφάλμα.
Επαναφορά με έλεγχο αποκλίσεων
Δημιουργήστε ένα σχέδιο επαναφοράς από τις ενεργές γραμμές ακριβώς πριν από την εγγραφή και αποθηκεύστε το ως JSON. Πριν από την αναίρεση, ο έλεγχος αποκλίσεων συγκρίνει τα αποτυπώματα γραμμών και επιστρέφει τις πράξεις των οποίων οι γραμμές έχουν αλλάξει έκτοτε.
Σε σύγκριση με
Το Merql συγχωνεύει δεδομένα γραμμών από τρία στιγμιότυπα. Αυτά τα εργαλεία διαχειρίζονται εκδόσεις, συγχρονίζουν ή μεταφέρουν βάσεις δεδομένων· πρόκειται για συναφείς εργασίες.
| Εργαλείο | Κατάλληλο για | Διαφορά με το Merql |
|---|---|---|
| Dolt | Κατάλληλο γιαΤο Dolt είναι βάση δεδομένων SQL που μπορείτε να διακλαδώσετε, να κλωνοποιήσετε, να δημιουργήσετε κλάδους, να συγχωνεύσετε, να στείλετε και να λάβετε αλλαγές όπως σε ένα αποθετήριο Git. Συνδέεστε σε αυτήν όπως σε οποιαδήποτε βάση δεδομένων MySQL και παρακολουθεί την προέλευση κάθε κελιού. | Διαφορά με το MerqlΤο Merql διατηρεί τη βάση δεδομένων MySQL ή SQLite που ήδη χρησιμοποιείτε. Αποθηκεύει τους πίνακες ως αρχεία στιγμιότυπων JSON και συγχωνεύει τρία από αυτά, με τη βάση να επιλέγεται από εσάς. |
| pt-table-sync | Κατάλληλο γιαΤο pt-table-sync εντοπίζει και διορθώνει διαφορές μεταξύ πινάκων MySQL, προς μία κατεύθυνση ή αμφίδρομα μεταξύ διακομιστών. Όταν συγχρονίζει ένα αντίγραφο, εφαρμόζει τις αλλαγές στην πηγή αναπαραγωγής. | Διαφορά με το MerqlΣε αμφίδρομο συγχρονισμό, το pt-table-sync επιλέγει τη γραμμή που επικρατεί με βάση μια στήλη διενέξεων και αντιγράφει τις τιμές της. Το Merql συγκρίνει και τις δύο πλευρές με μια κοινή βάση, συγχωνεύει αλλαγές σε διαφορετικές στήλες της ίδιας γραμμής και αναφέρει τις ασύμβατες αλλαγές ως διενέξεις προς επίλυση. |
| sqldiff | Κατάλληλο γιαΤο sqldiff συγκρίνει δύο βάσεις δεδομένων SQLite και εκτυπώνει ένα σενάριο SQL που μετατρέπει την πρώτη στη δεύτερη. Μπορεί επίσης να γράψει ένα δυαδικό σύνολο αλλαγών για την επέκταση συνεδριών SQLite ή να συνοψίσει τις αλλαγμένες γραμμές ανά πίνακα. | Διαφορά με το MerqlΜια σύγκριση δύο κατευθύνσεων δεν μπορεί να διακρίνει αν η μία πλευρά πρόσθεσε μια γραμμή ή αν η άλλη τη διέγραψε. Το Merql προσθέτει ένα στιγμιότυπο βάσης για να απαντήσει σε αυτό, συγχωνεύει δύο σύνολα αλλαγών και λειτουργεί επίσης με το MySQL. |
| Doctrine Migrations | Κατάλληλο γιαΤο Doctrine Migrations διαχειρίζεται τις εκδόσεις του σχήματος της βάσης δεδομένων σας, ώστε οι αλλαγές σχήματος να μπορούν να ελεγχθούν και να δοκιμαστούν πριν αναπτυχθούν σε περιβάλλον παραγωγής. | Διαφορά με το MerqlΤο Merql δεν είναι εργαλείο μετάβασης σχήματος. Συγχωνεύει δεδομένα γραμμών και αναφέρει τις στήλες που προστέθηκαν ή αφαιρέθηκαν μεταξύ στιγμιότυπων, αφήνοντας σε εσάς τη διαχείριση της αλλαγής σχήματος. |
Ερωτήσεις και απαντήσεις
Σύντομες απαντήσεις από την τεκμηρίωση του Merql.
Το MySQL και το SQLite, μέσω των προσαρμογέων PDO ή mysqli. Για άλλη μηχανή, γράψτε μια κλάση που υλοποιεί τη διεπαφή Driver και καταχωρίστε την με το DriverFactory::register().
Όχι. Δεν μεταφέρει σχήματα σε νέες εκδόσεις, δεν αναπαράγει βάσεις δεδομένων και δεν τις συγχρονίζει σε πραγματικό χρόνο. Με δεδομένες τρεις καταστάσεις βάσης δεδομένων, παράγει μια τέταρτη, συγχωνευμένη κατάσταση με εντοπισμένες τις διενέξεις.
Όταν και οι δύο πλευρές αλλάζουν την ίδια στήλη της ίδιας γραμμής σε διαφορετικές τιμές, όταν η μία πλευρά ενημερώνει μια γραμμή που διέγραψε η άλλη ή όταν και οι δύο εισάγουν γραμμή με το ίδιο κλειδί. Οι αλλαγές σε διαφορετικές στήλες της ίδιας γραμμής συγχωνεύονται χωρίς πρόβλημα.
Όχι. Διαβάζουν αποθηκευμένα αρχεία στιγμιότυπων· μόνο η λήψη στιγμιότυπου και η εφαρμογή ενός αποτελέσματος συνδέονται στη βάση δεδομένων.
Ναι. Δημιουργήστε ένα σχέδιο συγχώνευσης, επιλέξτε ομάδες αλλαγών με βάση τα αναγνωριστικά τους και μετατρέψτε την επιλογή σε καθαρό αποτέλεσμα για το Merql::apply() ή το Merql::applyGuarded().
Μόνο αν το επιλέξετε δημιουργώντας το ThreeWayMerge με ένα CellMergeConfig, όπως το CellMergeConfig::auto(). Τα Merql::merge(), Merql::plan() και το CLI αντιμετωπίζουν κάθε τιμή στήλης ως ενιαίο σύνολο.
Ακολουθήστε τον οδηγό από το πρώτο στιγμιότυπο έως τα σχέδια συγχώνευσης, την εφαρμογή με ελέγχους και την επαναφορά.