Skip to main content

ما المقصود بإدارة المخطط؟

إدارة المخطط هي ممارسة تقوم على تطبيق مبادئ التحكّم في الإصدارات على مخططات قواعد البيانات. وغالبًا ما تشمل مهام مثل تتبّع التغييرات التي تطرأ على الجداول والأعمدة والعلاقات بينها وأتمتتها، بحيث تكون تحديثات المخطط قابلة للتكرار، وقابلة للتدقيق، ومتّسقة عبر مختلف البيئات. وتبرز أهمية إدارة المخطط عندما تكون هناك حاجة إلى تعديل البنية الشكلية للبيانات في قاعدة البيانات لتلبية حالة استخدام جديدة أو لتحقيق تحسين في الأداء.

لماذا يُعد ذلك مهمًا؟

تتيح لك أدوات إدارة المخطط أتمتة تغييرات المخطط بالتزامن مع عمليات نشر التطبيق. ومن الشائع أن تكون تغييرات المخطط شرطًا أساسيًا لنشر إصدار جديد من التطبيق. ويُشار إلى هذه الأدوات أيضًا باسم أدوات “ترحيل المخطط” أو “ترحيل قاعدة البيانات”، لأن المستخدمين يرحّلون قاعدة البيانات من إصدار إلى آخر. من دون أدوات لإدارة المخطط، تصبح تغييرات قاعدة البيانات يدوية، ومعرضة للأخطاء، ويصعب تنسيقها بين الفرق وعبر البيئات. ومع أنه يمكنك دائمًا تنفيذ DDL مباشرةً على قاعدة البيانات، فإن هذه الأدوات تتيح التحكم في الإصدارات، وعمليات النشر المؤتمتة، ودعم التراجع، وسجلات التدقيق. وبالنسبة إلى ClickHouse على وجه الخصوص، حيث قد تكون بعض تغييرات DDL مكلفة أو غير قابلة للتراجع، فإن عملية ترحيل مهيكلة تتضمن خطوات مراجعة تُعد بالغة الأهمية.

أنواع نُهُج إدارة المخطط

تندرج أدوات إدارة المخطط عادةً ضمن فئتين.

الإجرائي

تستخدم هذه الأدوات ملفات SQL مُرقّمة بإصدارات تصف كيفية الانتقال من الحالة A إلى الحالة B. تكتب عبارات DDL صريحة مثل CREATE TABLE أو ALTER TABLE أو DROP COLUMN ضمن ملفات. ثم تُشغِّل الأداة هذه الملفات بالتسلسل وتتعقّب أيّها تم تطبيقه. في هذه الفئة، أنت من يحدّد بدقة تعليمات SQL المطلوب تشغيلها. أمثلة: Golang Migrate وGoose وFlyway.

تصريحي

تبدأ هذه الأدوات بأن يحدّد المستخدم مخطط الحالة المطلوبة. تكتشف الأداة الفرق بين قاعدة البيانات الحالية والحالة المطلوبة، ثم تُنشئ الترحيل اللازم وتطبّقه. يقلّل هذا النهج من الحاجة إلى كتابة الترحيلات يدويًا ومن انجراف المخطط. في هذه الفئة، تحدد الأداة أوامر SQL الدقيقة التي يجب تشغيلها. أمثلة: Atlas وLiquibase. هناك فئة ثالثة من الأدوات تركّز بدرجة أقل على تغييرات مخطط قاعدة البيانات وبدرجة أكبر على تحويل البيانات نفسها. مثال: dbt. تركّز هذه المقالة حصريًا على الأدوات الخاصة بتغييرات مخطط قاعدة البيانات. اختر أداة تتوافق مع أسلوب عمل فريقك. توفّر الأدوات الإجرائية رؤية كاملة ودقيقة لأوامر DDL التي ستُشغَّل، لكنها تتطلب اهتمامًا خاصًا بتحديد انجراف المخطط وإدارته. تؤتمت الأدوات التصريحية قدرًا كبيرًا من أعمال الصيانة وتساعد على منع انجراف المخطط، لكن ينبغي دائمًا مراجعة الخطة المُنشأة قبل تطبيقها على ClickHouse. تأكد من عدم وجود mutation غير متوقعة أو إعادة كتابة مكلفة مخفية في خطة مُنشأة تلقائيًا.

ما ينبغي مراعاته عند اختيار أداة

ما الأدوات التي يستخدمها فريقك بالفعل؟

من المرجّح أن تميلوا إلى الأدوات التي تنسجم مع التقنيات المألوفة لديكم. فإذا كان فريقك يعمل بلغة Go، فقد يبدو Golang Migrate أو Goose خيارًا طبيعيًا. وإذا كنتم ضمن منظومة Java، فقد يكون Flyway أو Liquibase مستخدمَين لديكم بالفعل. وإذا كان فريق البنية التحتية لديكم يستخدم Terraform وأنماط البنية التحتية بوصفها شيفرة، فقد يكون النموذج التصريحي في Atlas مناسبًا وسهل التبنّي. وهناك قيمة حقيقية في اختيار أداة يعرفها فريقك مسبقًا: فأفضل أداة هي تلك التي يتبنّاها الفريق ويستخدمها باستمرار.

ما العملية التي ترغب بها؟

فكّر في كيفية انتقال تغييرات المخطط عبر مؤسستك. وراعِ ما إذا كنت تحتاج إلى:
  • سير عمل بسيط على نمط “اكتب SQL، شغّله في CI، وانتهى الأمر”، مثل Goose أو Golang Migrate.
  • سير عمل مُدار للموافقات، مع سجلات تدقيق وRBAC، مثل Bytebase أو Liquibase.
  • تعريف المخطط بصورة تصريحية، بحيث تتولى الأداة تحديد الفرق، مثل Atlas.
اختر الأداة بما يتناسب مع متطلباتك وآلية عملك. هذه هي الأدوات التي نوصي بها عادةً لمستخدمي ClickHouse استنادًا إلى مدى نضجها، وتوافقها مع ClickHouse، ومستوى اعتماد المجتمع لها، وملاءمتها من الناحية التشغيلية.

Atlas

Atlas هي أداة لإدارة المخطط كرمز تتبع نهجًا تصريحيًا. تحدد حالة المخطط المطلوبة في HCL أو SQL، ثم يفحص Atlas قاعدة البيانات الحالية، ويحسب الفرق، ويولّد خطة ترحيل، ويطبّقها، مع إتاحة مراجعتها مسبقًا إذا رغبت. لماذا يعمل جيدًا مع ClickHouse: يوفّر Atlas دعمًا أصيلًا لـ ClickHouse، بما في ذلك الجداول، والعروض، والعروض المادية، والإسقاطات، والتقسيمات، وUDFs. وأضاف Atlas دعم العناقيد في الإصدار v0.37 في سبتمبر 2025. كما يدعم كلاً من HCL وتعريفات المخطط بلغة SQL العادية. ما الذي ينبغي الانتباه إليه: لا يتوفر برنامج تشغيل ClickHouse في Atlas إلا ضمن خطة Pro أو خلال فترة تجريبية. ينشئ Atlas خطط ترحيل، لكنه لا يدرك تكلفة تلك الخطط. فقد يبدو الفرق بسيطًا، مثل تغيير نوع عمود، لكنه قد يتسبب في mutation مكلفة على جدول بحجم عدة تيرابايتات. راجع دائمًا الخطط التي يتم إنشاؤها قبل تطبيقها. الأفضل لـ: الفرق التي تريد سير عمل للبنية التحتية كرمز واكتشاف الانحرافات تلقائيًا.
  • النوع: تصريحي
  • اللغة: Go، ويُوزَّع كملف تنفيذي واحد
  • الترخيص والتوفر: Open Core؛ يوفّر Atlas CLI إصدارًا مجتمعيًا بترخيص Apache 2.0، لكن دعم ClickHouse يتطلب خطة Pro أو نسخة تجريبية
  • دعم العناقيد: نعم

Golang Migrate

يُعد Golang Migrate أداة بسيطة وشائعة على نطاق واسع لتشغيل الترحيلات. تكتب ملفات SQL مُرقّمة بالإصدارات تتضمن خطوتَي up وdown، ثم تطبقها الأداة بالترتيب، مع تتبّع الحالة في جدول schema_migrations داخل قاعدة بيانات ClickHouse. لماذا يعمل جيدًا مع ClickHouse: لأنه بسيط ومرن. تكتب أوامر DDL الخاصة بـ ClickHouse التي تريد تشغيلها كما هي تمامًا. وهو ملف تنفيذي واحد بلغة Go من دون تبعيات وقت التشغيل، مما يسهّل دمجه في مسار CI/CD أو حاوية Docker. ما الذي ينبغي الانتباه إليه: إذا احتوى ملف ترحيل على عدة عبارات وفشل أحدها أثناء التنفيذ، فقد تُترك قاعدة البيانات في حالة تطبيق جزئي تتطلب تدخّلًا يدويًا. ويمكن التعامل مع ذلك بالالتزام بقاعدة: عبارة واحدة لكل ملف. الأفضل لـ: الفرق التي تريد البساطة وتحكمًا كاملًا ودقيقًا في أوامر SQL التي تُنفَّذ على مثيل ClickHouse الخاص بها.
  • النوع: إجرائي
  • اللغة: Go
  • الترخيص: مفتوح المصدر، MIT
  • دعم العناقيد: نعم

Goose

يُعد Goose أداة أخرى لتشغيل عمليات الترحيل مبنية على Go، وتتبع فلسفة مشابهة لـ Golang Migrate. تكتب ملفات SQL ذات إصدارات، أو دوال Go للمنطق المعقد، ثم يطبّقها Goose بالتسلسل مع تتبّع الحالة في جدول الإصدارات داخل ClickHouse. لماذا يعمل جيدًا مع ClickHouse: يعتمد Goose نهج SQL-first، ويتطلب حدًا أدنى من الإعداد، ويوفر واجهة CLI مباشرة، كما يسهل دمجه في CI/CD. ويدعم Goose أيضًا كتابة عمليات الترحيل على شكل دوال Go، ما يمنحك مرونة أكبر للتعامل مع المنطق المعقد الذي لا يمكن التعبير عنه باستخدام SQL وحده. ما الذي يجب الانتباه إليه: لا يوفر Goose مقارنة للمخططات أو إنشاء عمليات الترحيل تلقائيًا. الأنسب لـ: الفرق التي تستخدم Goose بالفعل، أو التي تفضّل اصطلاحات ملفات الترحيل الخاصة به على تلك الخاصة بـ Golang Migrate.
  • Type: إجرائي
  • Language: Go، ويُوزَّع كملف تنفيذي واحد
  • License: مفتوح المصدر، MIT
  • دعم العناقيد: لا

أدوات أخرى في المنظومة

تعمل الأدوات التالية أيضًا مع ClickHouse، وقد تكون أنسب بحسب المكدس التقني وسير العمل لديك. ومع ذلك، نوصي عمومًا بالأدوات المذكورة أعلاه.
آخر تعديل في ١٤ أغسطس ٢٠٢٦