Lewati ke konten

Merql

Merge database tiga arah murni dalam PHP dengan penyelesaian konflik tingkat kolom. Semantik merge bergaya Git untuk tabel MySQL dan SQLite.

Terminal
composer require merql/merql

Rilis terbaru v0.4.1 MIT PHP 8.2+

Dalam praktik

Merge membaca tiga snapshot tersimpan dan mengembalikan operasi yang perlu ditulis serta konflik yang perlu diselesaikan.

Gabungkan tiga snapshot

Ambil snapshot base sebelum kedua salinan berbeda, lalu ambil snapshot setiap sisi, misalnya database aktif dan salinan sandbox. ThreeWayMerge membandingkan kedua sisi dengan base dan menggabungkan kedua changeset.

Di tab hasil, ours mengedit content dan theirs mengedit title serta status pada baris yang sama, sehingga merge mempertahankan ketiga perubahan tanpa konflik.

PHP
use Merql\Merge\ThreeWayMerge;

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

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

Merge Tiga Arah

Basis, milik kita, milik mereka. Penggabungan tiga arah bergaya git pada baris dan kolom berkunci, bukan baris teks. Mendeteksi penyisipan, pembaruan, dan penghapusan di dua cabang.

Penyelesaian Tingkat Kolom

Saat kedua sisi mengubah baris yang sama, merql membandingkan kolom demi kolom. Konflik hanya terjadi jika kolom yang sama diubah ke nilai berbeda.

Penggabungan Sel Opsional

Berikan CellMergeConfig ke ThreeWayMerge agar kolom TEXT digabungkan baris demi baris dengan diff Myers, dan kolom JSON berdasarkan kunci. Facade Merql dan CLI tidak mengaktifkannya.

Multi-Database

Adaptor koneksi dan driver dialek yang dapat dipasang, dengan MySQL dan SQLite sudah tersedia.

Deteksi Konflik

Pembaruan vs pembaruan, pembaruan vs penghapusan, penghapusan vs pembaruan, dan penyisipan vs penyisipan, masing-masing dilaporkan beserta tabel dan barisnya. Konflik pembaruan vs pembaruan juga menyebutkan kolomnya.

SQL Generation

Pernyataan INSERT, UPDATE, DELETE berparameter dengan pengurutan yang memperhatikan FK. Pratinjau uji coba atau terapkan dalam transaksi.

CLI

Ambil snapshot, buat diff, dan lakukan merge dari baris perintah. Mendukung MySQL dan SQLite melalui variabel lingkungan.

Teruji

32 skenario regresi dengan ekspektasi yang ditulis tangan (composer test:oracle). CI menjalankan pengujian unit dan integrasi 231 serta level 10 PHPStan.

Mengapa Merql

Snapshot berupa berkas

Setiap snapshot adalah satu berkas JSON yang dapat Anda salin antar mesin atau commit ke kontrol versi. Diff dan merge membaca berkas tersebut, sehingga dapat berjalan tanpa koneksi database.

Tinjau sebelum menulis

Rencana merge memberi setiap operasi dan grup perubahan ID stabil serta menyimpan baris base, ours, theirs, dan hasil. Pilih grup yang Anda inginkan lalu terapkan hanya grup tersebut.

Rencana usang dihentikan

Penerapan terjaga hanya menulis ke baris yang masih cocok dengan snapshot yang Anda tinjau. Jika sebuah pernyataan memengaruhi nol baris, transaksi dibatalkan dan hasilnya menyertakan kesalahan.

Rollback dengan pemeriksaan penyimpangan

Buat rencana rollback dari baris aktif tepat sebelum penulisan dan simpan sebagai JSON. Sebelum membatalkan perubahan, pemeriksaan penyimpangan membandingkan fingerprint baris dan mengembalikan operasi yang barisnya telah berubah sejak itu.

Dibandingkan dengan

Merql menggabungkan data baris dari tiga snapshot. Alat ini membuat versi, menyinkronkan, atau memigrasikan database; semua itu merupakan tugas terkait.

Merql dibandingkan dengan alat lainnya
Dolt KeunggulanDolt adalah database SQL yang dapat Anda fork, kloning, cabangkan, gabungkan, push, dan pull seperti repositori Git. Anda terhubung ke database ini seperti ke database MySQL lainnya, dan alat ini melacak asal-usul setiap sel. Perbedaan dengan MerqlMerql mempertahankan database MySQL atau SQLite yang sudah Anda jalankan. Alat ini menyimpan tabel sebagai berkas snapshot JSON dan menggabungkan tiga snapshot, dengan snapshot base dipilih oleh Anda.
pt-table-sync Keunggulanpt-table-sync menemukan dan memperbaiki perbedaan antara tabel MySQL, satu arah atau dua arah antarserver. Saat menyinkronkan replika, alat ini menerapkan perubahan pada sumber replikasi. Perbedaan dengan MerqlDalam sinkronisasi dua arah, pt-table-sync memilih baris pemenang berdasarkan kolom konflik dan menyalin nilainya. Merql membandingkan kedua sisi dengan base bersama, menggabungkan perubahan pada kolom berbeda di baris yang sama, dan melaporkan perubahan yang tidak kompatibel sebagai konflik untuk Anda selesaikan.
sqldiff Keunggulansqldiff membandingkan dua database SQLite dan mencetak skrip SQL yang mengubah database pertama menjadi yang kedua. Alat ini juga dapat menulis changeset biner untuk ekstensi sesi SQLite atau merangkum baris yang berubah per tabel. Perbedaan dengan MerqlDiff dua arah tidak dapat mengetahui apakah satu sisi menambahkan baris atau sisi lainnya menghapusnya. Merql menambahkan snapshot base untuk menjawabnya, menggabungkan dua kumpulan perubahan, dan juga berfungsi dengan MySQL.
Doctrine Migrations KeunggulanDoctrine Migrations memberi versi pada skema database Anda, sehingga perubahan skema dapat ditinjau dan diuji sebelum diterapkan ke produksi. Perbedaan dengan MerqlMerql bukan alat migrasi skema. Alat ini menggabungkan data baris dan melaporkan kolom yang ditambahkan atau dihapus di antara snapshot, sedangkan perubahan skema tetap menjadi tanggung jawab Anda.

Tanya jawab

Jawaban singkat dari dokumentasi Merql.

Ikuti panduan mulai dari snapshot pertama hingga rencana penggabungan, penerapan dengan pengamanan, dan pemulihan.