Preskoči na vsebino

Merql

Čisto PHP trismerno združevanje zbirk podatkov z razreševanjem konfliktov na ravni stolpcev. Semantika združevanja v slogu Git za tabele MySQL in SQLite.

Terminal
composer require merql/merql

Najnovejša izdaja v0.4.1 MIT PHP 8.2+

V praksi

Združevanje prebere tri shranjene posnetke in vrne operacije za zapis ter konflikte za razrešitev.

Združite tri posnetke

Ustvarite osnovni posnetek, preden se kopiji razideta, nato pa zajemite posnetek vsake strani, na primer žive zbirke podatkov in peskovniške kopije. ThreeWayMerge primerja obe strani z osnovo in združi oba nabora sprememb.

V zavihku z rezultatom je ours uredil content, theirs pa title in status iste vrstice, zato združevanje ohrani vse tri spremembe brez konflikta.

PHP
use Merql\Merge\ThreeWayMerge;

$merge = new ThreeWayMerge();
$result = $merge->merge($base, $ours, $theirs);

echo $result->operationCount(); // resolved operations
echo $result->conflictCount();  // unresolved conflicts

Trismerno združevanje

Base, ours, theirs. Trismerno združevanje v slogu git nad vrsticami in stolpci s ključi namesto vrsticami besedila. Zazna vstavljanja, posodobitve in brisanja v dveh vejah.

Razreševanje na ravni stolpcev

Ko obe strani spremenita isto vrstico, merql primerja stolpec za stolpcem. Do konflikta pride samo, če je isti stolpec spremenjen na različni vrednosti.

Izbirno združevanje celic

Posredujte CellMergeConfig v ThreeWayMerge in stolpci TEXT se združujejo po vrsticah z Myersovo razliko, stolpci JSON pa po ključih. Vmesnik facade Merql in CLI tega ne omogočata.

Več zbirk podatkov

Vtični povezovalni adapterji in gonilniki za dialekte, vključno z vgrajenima MySQL in SQLite.

Zaznavanje konfliktov

Posodobitev proti posodobitvi, posodobitev proti izbrisu, izbris proti posodobitvi in vstavitev proti vstavitvi; vsak primer je naveden skupaj s tabelo in vrstico. Pri konfliktih med posodobitvami je naveden tudi stolpec.

SQL Ustvarjanje

Parametrizirani stavki INSERT, UPDATE in DELETE z razvrščanjem, ki upošteva tuje ključe. Predogled izvajanja na suho ali uporaba v transakciji.

CLI

Ustvarjanje posnetkov, primerjava in združevanje iz ukazne vrstice. Podpira MySQL in SQLite prek spremenljivk okolja.

Preizkušeno

32 regresijskih scenarijev z ročno napisanimi pričakovanji (composer test:oracle). CI izvaja 231 enotne in integracijske preizkuse ter PHPStan na ravni 10.

Zakaj Merql

Posnetki so datoteke

Vsak posnetek je ena datoteka JSON, ki jo lahko kopirate med računalniki ali vključite v nadzor različic. Primerjava in združevanje bereta te datoteke, zato delujeta brez povezave z zbirko podatkov.

Preglejte pred zapisom

Načrt združevanja vsakemu ID-ju operacije in skupine sprememb zagotovi stabilen ID ter ohrani vrstice base, ours, theirs in result. Izberite želene skupine in uporabite samo njih.

Zastareli načrti se ustavijo

Zaščitena uporaba zapisuje samo v vrstice, ki se še vedno ujemajo s pregledanim posnetkom. Če stavek vpliva na nič vrstic, se transakcija povrne, rezultat pa vsebuje napako.

Povrnitev s preverjanjem odstopanj

Tik pred zapisom ustvarite načrt povrnitve iz živih vrstic in ga shranite kot JSON. Pred razveljavitvijo preverjanje odstopanj primerja prstne odtise vrstic in vrne operacije za vrstice, ki so se od takrat spremenile.

V primerjavi z

Merql združuje podatke vrstic iz treh posnetkov. Ta orodja različicijo, sinhronizirajo ali selijo zbirke podatkov; to so sorodna opravila.

Merql v primerjavi z drugimi orodji
Dolt Primerno zaDolt je zbirka podatkov SQL, ki jo lahko razvejite, klonirate, združujete, pošiljate in prenašate kot repozitorij Git. Povežete se z njo kot s katero koli zbirko podatkov MySQL, spremlja pa izvor vsake celice. Razlika v primerjavi z MerqlMerql ohrani obstoječo zbirko podatkov MySQL ali SQLite. Tabele shrani kot datoteke posnetkov JSON in združi tri posnetke, pri čemer osnovni posnetek izberete sami.
pt-table-sync Primerno zapt-table-sync poišče in odpravi razlike med tabelami MySQL enosmerno ali v obeh smereh med strežniki. Pri sinhronizaciji replike spremembe izvede na viru replikacije. Razlika v primerjavi z MerqlPri dvosmerni sinhronizaciji pt-table-sync izbere zmagovalno vrstico na podlagi stolpca za konflikte in kopira njene vrednosti. Merql primerja obe strani s skupno osnovo, združuje spremembe različnih stolpcev iste vrstice in nezdružljive spremembe prijavi kot konflikte, ki jih razrešite sami.
sqldiff Primerno zasqldiff primerja dve zbirki podatkov SQLite in izpiše skript SQL, ki prvo pretvori v drugo. Zapiše lahko tudi binarni nabor sprememb za razširitev seje SQLite ali povzame spremenjene vrstice po tabelah. Razlika v primerjavi z MerqlDvosmerna primerjava ne more ugotoviti, ali je ena stran dodala vrstico ali jo je druga izbrisala. Merql doda osnovni posnetek, da to razjasni, združi dva nabora sprememb in deluje tudi z MySQL.
Doctrine Migrations Primerno zaDoctrine Migrations upravlja različice sheme vaše zbirke podatkov, zato lahko spremembe sheme pregledate in preizkusite, preden jih uvedete v produkcijo. Razlika v primerjavi z MerqlMerql ni orodje za selitev sheme. Združuje podatke vrstic in poroča o stolpcih, dodanih ali odstranjenih med posnetki, spremembe sheme pa prepušča vam.

Vprašanja in odgovori

Kratki odgovori iz dokumentacije za Merql.

Sledite vodniku od prvega posnetka do načrtov združevanja, zaščitene uporabe in povrnitve.