Ugrás a tartalomhoz

Merql

Tiszta PHP háromutas adatbázis-egyesítés oszlopszintű konfliktusfeloldással. Git stílusú egyesítési szemantika MySQL és SQLite táblákhoz.

Terminál
composer require merql/merql

Legújabb kiadás v0.4.1 MIT PHP 8.2+

A gyakorlatban

Az egyesítés három mentett pillanatképből beolvassa az írandó műveleteket és a feloldandó konfliktusokat.

Három pillanatkép egyesítése

Készítsd el az alap pillanatképét, mielőtt a két másolat szétválik, majd mindkét oldalról készíts pillanatképet, például az éles adatbázisról és egy sandbox-másolatról. A ThreeWayMerge mindkét oldalt az alaphoz hasonlítja, majd egyesíti a két változáskészletet.

Az eredménylapon a miénk a content, az övék pedig ugyanannak a sornak a title és status értékét szerkesztette, ezért az egyesítés mindhárom módosítást megtartja konfliktus nélkül.

PHP
use Merql\Merge\ThreeWayMerge;

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

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

Háromutas egyesítés

Alap, miénk, övék. A githez hasonló háromutas egyesítés kulccsal azonosított adatbázissorokon és oszlopokon, szövegsorok helyett. Két ág beszúrásait, frissítéseit és törléseit is felismeri.

Oszlopszintű feloldás

Ha mindkét oldal módosítja ugyanazt a sort, a merql oszloponként hasonlítja össze az értékeket. Csak akkor jelez konfliktust, ha ugyanaz az oszlop eltérő értékre változik.

Választható cellaszintű egyesítés

Adj át egy CellMergeConfig példányt a ThreeWayMerge-nek: ekkor a TEXT oszlopokat soronkénti Myers diff segítségével egyesíti, a JSON oszlopokat pedig kulcsonként. A Merql facade és a CLI nem engedélyezi ezt.

Több adatbázis

Bővíthető kapcsolati adapterek és dialektusillesztők, beépített MySQL és SQLite támogatással.

Konfliktusészlelés

Frissítés frissítéssel, frissítés törléssel, törlés frissítéssel, beszúrás beszúrással ütközése: mindegyik tábla és sor szerint jelentve. A frissítés-frissítés konfliktusok az érintett oszlopot is megnevezik.

SQL-generálás

Paraméterezett INSERT, UPDATE és DELETE utasítások, idegen kulcsokat figyelembe vevő sorrenddel. Száraz futtatásos előnézet vagy alkalmazás tranzakcióban.

CLI

Pillanatkép készítése, diff és egyesítés a parancssorból. A MySQL és a SQLite támogatott környezeti változókon keresztül.

Tesztelt

32 regressziós forgatókönyv kézzel írt elvárásokkal (composer test:oracle). A CI 231 egység- és integrációs teszteket, valamint PHPStan 10-es szintet futtat.

Miért Merql?

A pillanatképek fájlok

Minden pillanatkép egyetlen JSON fájl, amelyet átmásolhatsz más gépekre, vagy beküldhetsz verziókezelésbe. A diff és az egyesítés ezekből a fájlokból olvas, ezért adatbázis-kapcsolat nélkül is futnak.

Ellenőrzés írás előtt

Az egyesítési terv minden művelethez és változáscsoporthoz stabil azonosítót rendel, és megőrzi az alap, a miénk, az övék és az eredmény sorait. Válaszd ki a kívánt csoportokat, és csak azokat alkalmazd.

Az elavult tervek leállnak

A védett alkalmazás csak olyan sorokba ír, amelyek még mindig megfelelnek az ellenőrzött pillanatképnek. Ha egy utasítás nulla sort érint, a tranzakció visszagördül, az eredmény pedig tartalmazza a hibát.

Visszagörgetés eltérésellenőrzéssel

Közvetlenül az írás előtt készíts visszagörgetési tervet az éles sorokból, és mentsd el JSON formátumban. A visszavonás előtt az eltérésellenőrzés összehasonlítja a sorok ujjlenyomatait, és megadja azoknak a műveleteknek a listáját, amelyek sorai azóta megváltoztak.

Összehasonlítás

A Merql három pillanatkép soradatait egyesíti. Ezek az eszközök adatbázisok verziózását, szinkronizálását vagy migrálását végzik, vagyis kapcsolódó feladatokra valók.

Merql összehasonlítása más eszközökkel
Dolt Amiben jóA Dolt egy SQL adatbázis, amelyet a Git tárolóhoz hasonlóan elágaztathatsz, klónozhatsz, egyesíthetsz, feltölthetsz és letölthetsz. Mint bármely MySQL adatbázishoz, ehhez is csatlakozol; emellett nyomon követi minden cella eredetét. Különbségek Merql-hoz képestA Merql megőrzi a már használt MySQL vagy SQLite adatbázist. A táblákat JSON pillanatképfájlokként menti, és hármat egyesít közülük, az alap pillanatképét pedig te választod ki.
pt-table-sync Amiben jóA pt-table-sync megkeresi és kijavítja az eltéréseket a MySQL táblák között, egy irányban vagy két szerver között mindkét irányban. Replika szinkronizálásakor a változtatásokat a replikációs forráson hajtja végre. Különbségek Merql-hoz képestKétirányú szinkronizáláskor a pt-table-sync egy konfliktusoszlop alapján kiválasztja a nyertes sort, majd átmásolja az értékeit. A Merql mindkét oldalt egy közös alaphoz hasonlítja, egyesíti ugyanazon sor különböző oszlopainak módosításait, az össze nem egyeztethető változásokat pedig feloldandó konfliktusként jelenti.
sqldiff Amiben jóAz sqldiff két SQLite adatbázist hasonlít össze, és olyan SQL szkriptet ír ki, amely az elsőt a másodikká alakítja. Bináris változáskészletet is írhat a SQLite munkamenet-bővítményhez, vagy táblánként összefoglalhatja a módosult sorokat. Különbségek Merql-hoz képestA kétutas diff nem tudja megállapítani, hogy az egyik oldal adott-e hozzá egy sort, vagy a másik törölte. A Merql egy alap-pillantképpel válaszol erre, egyesíti a két változáskészletet, és MySQL adatbázisokkal is működik.
Doctrine Migrations Amiben jóA Doctrine Migrations verziózza az adatbázis sémáját, így a sémamódosításokat éles üzembe helyezés előtt ellenőrizheted és tesztelheted. Különbségek Merql-hoz képestA Merql nem séma-migrációs eszköz. Soradatokat egyesít, és jelenti a pillanatképek között hozzáadott vagy eltávolított oszlopokat; a séma módosítása rád marad.

Kérdések és válaszok

Rövid válaszok a Merql dokumentációjából.

Kövesd az útmutatót az első pillanatképtől az egyesítési terveken és a védett alkalmazáson át a visszagörgetésig.