Skip to main content
إذا كنت تستخدم قاعدة بيانات علائقية تقليدية، فقد تبحث في ClickHouse عن الإجراءات المخزنة والعبارات المُحضّرة. يشرح هذا الدليل نهج ClickHouse تجاه هذه المفاهيم ويقدّم بدائل موصى بها.

بدائل الإجراءات المخزنة في ClickHouse

لا يدعم ClickHouse الإجراءات المخزنة التقليدية التي تتضمن منطق التحكم في التدفق (IF/ELSE، والحلقات، وما إلى ذلك). وهذا قرار تصميمي مقصود يستند إلى معمارية ClickHouse باعتباره قاعدة بيانات تحليلية. ولا يُنصح باستخدام الحلقات في قواعد البيانات التحليلية، لأن معالجة O(n) من الاستعلامات البسيطة تكون عادةً أبطأ من معالجة عدد أقل من الاستعلامات المعقدة. تم تحسين ClickHouse من أجل:
  • أحمال العمل التحليلية - عمليات تجميع معقدة عبر مجموعات بيانات كبيرة
  • المعالجة على دفعات - التعامل بكفاءة مع كميات كبيرة من البيانات
  • الاستعلامات التصريحية - استعلامات SQL التي تصف البيانات المطلوب استرجاعها، لا كيفية معالجتها
تتعارض الإجراءات المخزنة ذات المنطق الإجرائي مع أوجه التحسين هذه. وبدلًا من ذلك، يوفّر ClickHouse بدائل تتوافق مع نقاط قوته.

الدوال المعرّفة من قبل المستخدم (UDFs)

تتيح لك الدوال المعرّفة من قبل المستخدم تغليف منطق قابل لإعادة الاستخدام من دون التحكم في التدفق. يدعم ClickHouse نوعين:

UDFs المستندة إلى Lambda

أنشئ الدوال باستخدام تعبيرات SQL وبنية Lambda:
القيود:
  • لا توجد حلقات أو بنى تحكم معقدة في التدفق
  • لا يمكن تعديل البيانات (INSERT/UPDATE/DELETE)
  • لا يُسمح بالدوال العودية
راجع CREATE FUNCTION للاطلاع على البنية الكاملة.

دوال UDF القابلة للتنفيذ

للمنطق الأكثر تعقيدًا، استخدم دوال UDF القابلة للتنفيذ التي تستدعي برامج خارجية:
يمكن لـ Executable UDFs تنفيذ أي منطق مخصّص بأي لغة (بايثون، Node.js، Go، إلخ). راجع Executable UDFs لمزيد من التفاصيل.

العروض ذات المعلمات

تعمل العروض ذات المعلمات كأنها دوال تُرجِع مجموعات بيانات. وهي مثالية للاستعلامات القابلة لإعادة الاستخدام مع التصفية الديناميكية:

حالات الاستخدام الشائعة

راجع قسم العروض ذات المعلمات لمزيد من المعلومات.

العروض المادية

تُعد العروض المادية مثالية للحساب المسبق لعمليات التجميع المكلفة التي كانت تُنفَّذ تقليديًا داخل الإجراءات المخزنة. إذا كنت معتادًا على قواعد البيانات التقليدية، فاعتبر العرض المادي مُشغِّل INSERT يحوِّل البيانات ويجمعها تلقائيًا عند إدراجها في جدول المصدر:

العروض المادية القابلة للتحديث

للمعالجة الدفعية المجدولة (مثل الإجراءات المخزنة الليلية):
راجع العروض المادية المتتالية للاطلاع على الأنماط المتقدمة.

تنسيق العمليات خارجيًا

عند التعامل مع منطق أعمال معقّد، أو سير عمل ETL، أو عمليات متعددة الخطوات، يمكن دائمًا تنفيذ هذا المنطق خارج ClickHouse باستخدام مكتبات العملاء للغات البرمجة.

استخدام شيفرة التطبيق

فيما يلي مقارنة جنبًا إلى جنب توضّح كيفية تحويل إجراء مخزّن في MySQL إلى شيفرة تطبيق عند استخدام ClickHouse:

الاختلافات الرئيسية

  1. التحكم في التدفق - تستخدم الإجراءات المخزنة في MySQL تعليمات IF/ELSE وحلقات WHILE. في ClickHouse، نفّذ هذا المنطق في شيفرة التطبيق لديك (بايثون، Java، إلخ.)
  2. المعاملات - يدعم MySQL أوامر BEGIN/COMMIT/ROLLBACK لمعاملات ACID. أما ClickHouse فهي قاعدة بيانات تحليلية مُحسّنة لأعباء العمل المعتمدة على الإلحاق فقط، وليست مخصّصة للتحديثات المعاملاتية
  3. التحديثات - يستخدم MySQL عبارات UPDATE. بينما يفضّل ClickHouse استخدام INSERT مع ReplacingMergeTree أو CollapsingMergeTree للبيانات القابلة للتغيير
  4. المتغيرات والحالة - يمكن للإجراءات المخزنة في MySQL تعريف متغيرات (DECLARE v_discount). في ClickHouse، أدر الحالة في شيفرة التطبيق لديك
  5. معالجة الأخطاء - يدعم MySQL SIGNAL ومعالجات الاستثناءات. وفي شيفرة التطبيق، استخدم آليات معالجة الأخطاء الأصلية في لغتك (try/catch)
متى تستخدم كل نهج:
  • أعباء عمل OLTP (الطلبات، المدفوعات، حسابات المستخدمين) → استخدم MySQL/PostgreSQL مع الإجراءات المخزنة
  • أعباء عمل التحليلات (التقارير، التجميعات، السلاسل الزمنية) → استخدم ClickHouse مع التنسيق على مستوى التطبيق
  • المعمارية الهجينة → استخدم كليهما! ابثّ البيانات المعاملاتية من OLTP إلى ClickHouse لأغراض التحليلات

استخدام أدوات تنسيق سير العمل

  • Apache Airflow - جدولة مخططات DAG المعقدة لاستعلامات ClickHouse ومراقبتها
  • dbt - تحويل البيانات باستخدام مهام سير عمل قائمة على SQL
  • Prefect/Dagster - تنسيق حديث قائم على بايثون
  • Custom schedulers - مهام Cron وCronJobs في Kubernetes وما إلى ذلك.
فوائد التنسيق الخارجي:
  • إمكانات كاملة للغات البرمجة
  • معالجة أفضل للأخطاء ومنطق أفضل لإعادة المحاولة
  • التكامل مع الأنظمة الخارجية (واجهات برمجة التطبيقات، وقواعد البيانات الأخرى)
  • التحكم في الإصدارات والاختبار
  • المراقبة والتنبيهات
  • جدولة أكثر مرونة

بدائل العبارات المُحضَّرة في ClickHouse

مع أن ClickHouse لا يدعم “العبارات المُحضَّرة” التقليدية بالمفهوم المتعارف عليه في أنظمة إدارة قواعد البيانات العلائقية، فإنه يوفّر معلمات الاستعلام التي تؤدي الغرض نفسه: استعلامات آمنة مُعلَّمة بمعلمات وتمنع حقن SQL.

الصيغة

هناك طريقتان لتحديد معلمات الاستعلام:

الطريقة 1: استخدام SET

الطريقة 2: استخدام معلَمات CLI

بنية المعاملات

يُشار إلى المعاملات باستخدام: {parameter_name: DataType}
  • parameter_name - اسم المعامل (من دون البادئة param_)
  • DataType - نوع بيانات ClickHouse الذي يُحوَّل المعامل إليه

أمثلة على أنواع البيانات


لاستخدام معلَمات الاستعلام في مكتبات العملاء للغات البرمجة، راجع وثائق مكتبة العميل الخاصة بلغة البرمجة التي تهمك.

قيود معلمات الاستعلام

معلمات الاستعلام ليست بدائل نصية عامة، بل لها قيود محددة:
  1. هي مخصصة أساسًا لعبارات SELECT - وأفضل دعم لها يكون في استعلامات SELECT
  2. هي تعمل كمُعرّفات أو قيم حرفية - ولا يمكنها أن تحل محل أجزاء SQL عشوائية
  3. لديها دعم محدود لـ DDL - فهي مدعومة في CREATE TABLE، ولكن ليس في ALTER TABLE
ما ينجح:
ما الذي لا يعمل:

أفضل الممارسات الأمنية

استخدم دائمًا معلمات الاستعلام لأي إدخال من المستخدم:
تحقّق من أنواع الإدخال:

العبارات المُحضَّرة في بروتوكول MySQL

تتضمن واجهة MySQL في ClickHouse حدًا أدنى من دعم العبارات المُحضَّرة (COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_CLOSE)، وذلك أساسًا لإتاحة الاتصال بأدوات مثل Tableau Online التي تُغلّف الاستعلامات داخل عبارات مُحضَّرة. القيود الأساسية:
  • ربط المَعلمات غير مدعوم - لا يمكنك استخدام العناصر النائبة ? مع مَعلمات مرتبطة
  • تُخزَّن الاستعلامات، لكنها لا تُحلَّل أثناء PREPARE
  • التنفيذ محدود جدًا ومصمم للتوافق مع أدوات BI محددة
مثال على ما لا يعمل:
استخدم معلمات الاستعلام الأصلية في ClickHouse بدلًا من ذلك. فهي توفّر دعمًا كاملًا لربط المعلمات، وأمانًا للأنواع، وحماية من حقن SQL عبر جميع واجهات ClickHouse:
لمزيد من التفاصيل، راجع وثائق واجهة MySQL ومنشور المدونة حول دعم MySQL.

الخلاصة

بدائل ClickHouse للإجراءات المخزنة

استخدام معلمات الاستعلام

يمكن استخدام معلمات الاستعلام للأغراض التالية:
  • منع حقن SQL
  • الاستعلامات المُعلَّمة مع ضمان سلامة الأنواع
  • التصفية الديناميكية في التطبيقات
  • قوالب استعلام قابلة لإعادة الاستخدام
آخر تعديل في ٣ يوليو ٢٠٢٦