أدوات إعادة بيع قواعد البيانات: Flyway vs. Liquibase

في هذه المقالة ، سنتحدث عن Flyway و Liquibase ، وهما أكثر أدوات إعادة تشكيل قاعدة البيانات المستندة إلى Java شيوعًا. الغرض من هذه المقالة هو مقارنة هذه الأدوات ومعرفة أيها أفضل استخدام في هذه الحالات.


ديسيبل الجامع


Flyway


تتمحور فكرة Flyway حول ستة فرق مختلفة لدعم إعادة هيكلة قواعد البيانات الآلية وإصدارها. يمكن تنفيذ هذه الأوامر من سطر الأوامر ، أثناء عملية الإنشاء (التي يتم إنتاجها باستخدام Maven أو Gradle) ، أو مباشرة من تعليمات Java البرمجية باستخدام مكالمات API. عند تنفيذ هذه الأوامر ، تحتاج إلى توفير المعلمات للاتصال بقاعدة البيانات (url ، اسم المستخدم ، كلمة المرور) التي تريد إعادة تشكيلها.


يُطلق على الأمر الرئيسي migrate ويقوم بإجراء يحتوي على جوهر إعادة تشكيل قاعدة البيانات بالكامل: فهو يقوم بمسح مجلد خاص به سكربتات sql (لكل منها رقم إصدار في اسم الملف) ويتحقق من أي منها قد تم تطبيقه بالفعل على قاعدة البيانات الهدف. ثم ينفذ هؤلاء الذين لم يطبقوا بعد على قاعدة البيانات هذه. في حالة حدوث تعارض ، على سبيل المثال ، إذا تم تغيير البرنامج النصي الذي تم تطبيقه بالفعل منذ استخدامه ، فإن Flyway يقطع تشغيله برسالة خطأ.


ميزة فريدة من نوعها في Flyway هي أن برامج الترحيل يمكن أن تكون ليس فقط بتنسيق SQL ، ولكن أيضًا في شكل شفرة Java. يسمح لك الخيار الثاني بتنفيذ عمليات الترحيل الديناميكية ذات المنطق المعقّد. ومع ذلك ، يجب عليك استخدام أسلوب Java بحذر ، حيث يصعب تصحيح برامج الترحيل هذه إذا حدث خطأ ما فيها.


بالإضافة إلى أمر migrate الرئيسي ، لدى Flyway أوامر إضافية تسهل عملية إعادة بناء قاعدة البيانات.


يعرض الأمر info جميع برامج الترحيل المتاحة من مجلد معين ويلاحظ أيًا منها قد تم استخدامه بالفعل وأي منها سيتم تطبيقه فقط على قاعدة البيانات الهدف.


للتحقق مما إذا كانت البرامج النصية المطبقة على قاعدة البيانات قد تغيرت ، يتم استخدام الأمر validate . من المفيد لنا معرفة ما إذا كان قد تم تغيير البرنامج النصي المطبق بالفعل من المجلد منذ تطبيقه على قاعدة البيانات ، لأن هذا قد يعني أن البرنامج النصي تم تطبيقه على قواعد بيانات مختلفة في إصدارات مختلفة ، وهذا يمكن أن يسبب مشاكل.


إذا كنت تعتقد أنه يجب استخدام البرامج النصية على الرغم من الفشل الذي يظهره أمر التحقق من الصحة ، يمكنك تشغيل أمر الإصلاح. ستقوم بإعادة تعيين جدول قاعدة البيانات الذي تستخدمه Flyway لإصلاح البرامج النصية التي تم تطبيقها بالفعل (يُسمى هذا الجدول افتراضيًا SCHEMA_VERSION).


والأمر الأخير ، ولكن ليس أقل أهمية ، clean الأمر بالكامل المخطط المحدد (كما تعلم ، يجب استخدام هذا الأمر فقط لقواعد بيانات الاختبار).


Liquibase


Liquibase يأخذ مقاربة مختلفة لتنفيذ إعادة بيع قواعد البيانات. على عكس Flyway ، الذي يدعم برامج الترحيل النصية فقط بتنسيقات SQL و Java ، يتيح لك Liquibase الاستخلاص من SQL ، وبالتالي إزالة إعادة بيع قواعد البيانات من تطبيقه المحدد.


بدلاً من البرامج النصية SQL ، يدعم Liquibase البرامج النصية الترحيل بتنسيقات XML و YAML و JSON. في هذه البرامج النصية ، تقوم بتعريف التغييرات في قاعدة البيانات على مستوى التجريد. لكل تغيير ، يحتوي Liquibase على عنصر مطابق في XML و YAML و JSON. على سبيل المثال ، يبدو التغيير الذي ينشئ جدول قاعدة بيانات جديد بتنسيق YAML كما يلي:


 createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255) 

تبدو التغييرات مثل add column أو create index أو alter table وغيرها ، مماثلة.
أثناء التشغيل ، يطبق Liquibase تلقائيًا جميع البرامج النصية التي لم يتم استخدامها بعد ، ومثل Flyway ، يحفظ بيانات التعريف الخاصة به في جدول قاعدة بيانات خاص. مثل Flyway ، يمكن استدعاء Liquibase من سطر الأوامر لأدوات البناء أو مباشرة من خلال Java API.


متى استخدامها؟


يدعم كل من Flyway و Liquibase جميع الوظائف اللازمة لإعادة تنظيم قواعد البيانات الاحترافية وإصدارها ، لذلك ستعرف دائمًا إصدار مخطط قاعدة البيانات الذي تتعامل معه وما إذا كان يطابق إصدار البرنامج. تم دمج كلتا الأدوات مع Maven و Gradle وفي نظام Spring Boot ، لذلك يمكن إعادة هيكلة قواعد البيانات بالكامل.


يستخدم Flyway SQL لتحديد تغييرات قاعدة البيانات ، بحيث يمكنك تكوين البرامج النصية SQL للعمل بفعالية مع أنواع محددة من قواعد البيانات في مشروعك ، مثل Oracle أو PostgreSQL. من ناحية أخرى ، يقدم Liquibase مستوى إضافي من التجريد باستخدام XML أو YAML أو JSON للكشف عن تغييرات قاعدة البيانات. وبالتالي ، فإن Liquibase هو الأنسب للبرامج التي تحتاج إلى تثبيت في بيئات مختلفة مع أنواع مختلفة من خوادم قواعد البيانات. ومع ذلك ، إذا كنت بحاجة إلى التحكم الكامل في SQL الخاص بك ، فإن Flyway هو اختيارك ، لأنه يتيح لك تعديل قاعدة البيانات باستخدام SQL مخصص بالكامل أو حتى باستخدام كود Java.


تتمثل ميزة كلتا الأداتين في أنهما يدعمهما شخص واحد (من المترجم: وفقًا للمؤلف) ، وليس بواسطة فريق كبير. قد يكون لهذا تأثير سلبي على التطوير المستقبلي لكلا الأدوات ، ولكن هذا ليس ضروريًا. في وقت كتابة هذا التقرير ، كان النشاط في مستودع Flyway GitHub أعلى منه في مستودع Liquibase .

Source: https://habr.com/ru/post/ar440696/


All Articles