انتقل إلى المحتوى

Merql

دمج ثلاثي الاتجاهات لقواعد البيانات باستخدام PHP، مع حل تعارضات على مستوى الأعمدة. دلالات دمج شبيهة بـ Git لجداول MySQL وSQLite.

الطرفية
composer require merql/merql

أحدث إصدار v0.4.1 MIT PHP 8.2+

في التطبيق العملي

تقرأ عملية الدمج ثلاث لقطات محفوظة وتُرجع العمليات المطلوب كتابتها والتعارضات المطلوب حلها.

دمج ثلاث لقطات

التقط اللقطة الأساسية قبل أن تتفرع النسختان، ثم التقط لقطة لكل جانب، مثل قاعدة بيانات مباشرة ونسخة اختبارية. يقارن ThreeWayMerge كلا الجانبين باللقطة الأساسية ويدمج مجموعتي التغييرات.

في تبويب النتيجة، عدّلنا content، وعدّلوا title وstatus في الصف نفسه، لذا يحتفظ الدمج بالتعديلات الثلاثة كلها دون تعارض.

PHP
use Merql\Merge\ThreeWayMerge;

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

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

الدمج ثلاثي الاتجاهات

Base وours وtheirs. دمج ثلاثي الاتجاهات بأسلوب git للصفوف والأعمدة ذات المفاتيح بدلًا من الأسطر. يكتشف عمليات الإدراج والتحديث والحذف عبر فرعين.

حل على مستوى الأعمدة

عندما يغيّر الطرفان الصف نفسه، يقارن merql الأعمدة واحدًا تلو الآخر. ولا يظهر تعارض إلا إذا غيّر الطرفان العمود نفسه إلى قيمتين مختلفتين.

دمج الخلايا اختياريًا

مرّر CellMergeConfig إلى ThreeWayMerge لدمج أعمدة TEXT سطرًا بسطر باستخدام فرق Myers، وأعمدة JSON مفتاحًا بمفتاح. لا تفعّله الواجهة الموحدة Merql ولا CLI.

قواعد بيانات متعددة

محولات اتصال قابلة للتوسعة وبرامج تشغيل للهجات، مع دعم مدمج لـ MySQL وSQLite.

اكتشاف التعارضات

تحديث مقابل تحديث، وتحديث مقابل حذف، وحذف مقابل تحديث، وإدراج مقابل إدراج؛ يُبلّغ عن كل حالة مع الجدول والصف. كما تُسمّي تعارضات التحديث مقابل التحديث العمود.

إنشاء SQL

عبارات INSERT وUPDATE وDELETE ذات معاملات مرتبة مع مراعاة المفاتيح الخارجية. معاينة تشغيل جاف أو تطبيق ضمن معاملة.

CLI

التقط لقطات واكتشف الفروق وادمج من سطر الأوامر. يدعم MySQL وSQLite عبر متغيرات البيئة.

مختبَر

32 سيناريو تراجع بتوقعات مكتوبة يدويًا (composer test:oracle). يشغّل CI عدد 231 اختبارًا للوحدات والتكامل وPHPStan بالمستوى 10.

لماذا 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 إصدارات لمخطط قاعدة بياناتك، لتتمكن من مراجعة تغييرات المخطط واختبارها قبل نشرها في بيئة الإنتاج. الاختلاف عن MerqlMerql ليس أداة لترحيل المخطط. فهو يدمج بيانات الصفوف ويعرض الأعمدة المضافة أو المحذوفة بين اللقطات، ويترك لك إجراء تغيير المخطط.

الأسئلة والأجوبة

إجابات موجزة من توثيق Merql.

اتبع الدليل بدءًا من لقطتك الأولى، مرورًا بخطط الدمج والتطبيق المحمي، وصولًا إلى التراجع.