Skip to main content
يوفّر محرك قاعدة البيانات Cluster وصولًا آنيًا إلى جداول قاعدة بيانات على عنقود محدّد في تهيئة الخادم. وهو نظير محرك قاعدة البيانات Remote المخصّص للعناقيد المُسمّاة، كما أن دالة الجدول cluster هي نظير دالة الجدول remote للعناقيد المُسمّاة. تُجلب قائمة الجداول وبُنية كل منها من العنقود عند الطلب، لذا تعكس قاعدة البيانات وضعه الراهن دائمًا. ويُتاح كل جدول عبر محرك التخزين Distributed على العنقود المُسمّى، الذي يوجّه إليه استعلامات SELECT وINSERT. يفيد ذلك في ربط عدة عناقيد ClickHouse بعضها ببعض، أو في ربط عنقود كامل بـclickhouse-local أو بعنقود آخر دون الحاجة إلى ذكر عناوينه صراحةً: إذ يكفي تعريف العنقود مرة واحدة في التهيئة، بما يشمل بيانات اعتماد كل نسخة متماثلة، والاتصالات الآمنة، والسر المشترك بين الخوادم.

إنشاء قاعدة بيانات

معاملات المحرك
  • cluster_name — اسم عنقود من تهيئة الخادم (راجع العناقيد)، كما هو الحال في محرك الجدول Distributed. تُدعم وحدات الماكرو مثل {cluster}، وتُوسَّع عند كل وصول.
  • database — اسم قاعدة البيانات على العنقود.
على عكس محرك قاعدة البيانات Remote، لا يقبل المحرك Cluster أي وسائط لبيانات الاعتماد ولا يخزّن أي أسرار، إذ تستخدم الاتصالات إعدادات كل نسخة متماثلة الواردة في تهيئة العنقود (المستخدم، وكلمة المرور، والاتصالات الآمنة، والضغط، والسر المشترك بين الخوادم). ويُعاد تحديد العنقود من التهيئة عند كل وصول، وبذلك تواكب قاعدة البيانات عمليات إعادة تحميل التهيئة والاكتشاف التلقائي للعنقود، تمامًا كما يفعل جدول Distributed. يجب أن يكون العنقود موجودًا عند إنشاء قاعدة البيانات؛ وإذا اختفى لاحقًا من التهيئة، فسيظل الخادم قادرًا على بدء التشغيل، وتُبلغ قاعدة البيانات عن العنقود المفقود إلى أن يعود إلى التهيئة. تُعامَل النسخة المتماثلة التي تشير إلى الخادم الحالي على أنها مقطع محلي: إذ يُنفَّذ SELECT وINSERT مباشرةً باسم المستخدم الحالي — الذي يحتاج بالتالي إلى الامتيازات المقابلة على قاعدة البيانات الأساسية وجداولها — ولا تُستخدم بيانات اعتماد العنقود المهيأة إلا للنسخ المتماثلة البعيدة فعلًا. وإذا لم تكن قاعدة البيانات أو أحد الجداول موجودًا على النسخة المتماثلة المحلية لمقطع ما، فإن البحث يتحول احتياطيًا إلى النسخ المتماثلة البعيدة لذلك المقطع، تمامًا كما يفعل جدول Distributed. عندما يحتوي العنقود على عدة مقاطع، يقرأ كل جدول وكيل منها جميعًا، لكن البيانات الوصفية — أي قائمة الجداول وبنيتها — تُؤخذ من مقطع عشوائي (مع تفضيل المقطع المحلي)، تمامًا كما تفعل دالة الجدول cluster، بحيث لا يتطلب سرد الجداول سوى استعلام واحد بدلًا من استعلام لكل مقطع. لذلك يُفترض أن تقدّم مقاطع العنقود مجموعة الجداول نفسها؛ أما الجدول الموجود على بعضها فقط، فيُقدَّم عبر وكيل تفشل استعلاماته على المقاطع التي لا تحتويه. ويُرسل INSERT في جدول ضمن قاعدة بيانات متعددة المقاطع كل صف إلى مقطع عشوائي (إذ تحمل جداول Distributed الوكيلة مفتاح تقسيم ضمنيًا rand() يراعي أوزان المقاطع المهيأة)؛ ولتثبيت المقطع لاستعلام ما، اضبط insert_shard_id. يقتصر دور المفتاح الضمني على توزيع الصفوف المُدرجة، أما عند القراءة فيتصرف الجدول كجدول Distributed بلا مفتاح تقسيم (وعلى وجه الخصوص، لا يعامله optimize_skip_unused_shards وforce_optimize_skip_unused_shards كمفتاح لاستبعاد المقاطع). وبوجه خاص، لا يظهر الجدول الموجود فقط على مقطع غير مُعتمَد لتحديد البيانات الوصفية في SHOW TABLES أو EXISTS TABLE، ويُبلَغ عن UNKNOWN_TABLE عند تحديده بالاسم؛ إذ ليس له جدول وكيل يمكن الاستعلام عنه. أما الجدول الموجود على المقطع المُعتمَد والغائب عن مقطع آخر فيكون مرئيًا، لكن استعلامات الوكيل قد تفشل على ذلك المقطع الآخر. لا يوجد تعريف مكافئ قابل لإعادة التنفيذ لجدول وكيل من نوع Cluster، ولذلك يُبلغ SHOW CREATE TABLE عن الخطأ THERE_IS_NO_QUERY. ويشمل ذلك الحالات التالية:
  • يُقدَّم الجدول حاليًا عبر التحويل الاحتياطي إلى النسخ المتماثلة البعيدة الموضح أعلاه (أي أن النسخة المتماثلة المحلية لمقطع ما لا تحتوي على قاعدة البيانات أو الجدول). لا يُجري جدول Distributed المُعرَّف على العنقود بأكمله أي تحويل احتياطي من هذا النوع، كما أن المجموعة الفرعية الاحتياطية من العنقود ليس لها اسم خاص بها.
  • يحتوي اسم عنقود قاعدة البيانات على وحدات ماكرو. يوسّع Cluster هذه الوحدات عند كل وصول، بينما يوسّعها Distributed عند إنشاء الجدول فقط، لذا فإن استخدام تعبير الماكرو أو توسيعه الحالي كليهما سيؤدي إلى سلوك مختلف بعد تغيير التهيئة.
  • قد تُحوّل إعادة تحميل التهيئة عنقودًا أحادي المقطع إلى عنقود متعدد المقاطع. عندها يكتسب الوكيل النشط مفتاح rand() ضمنيًا لتوزيع صفوف INSERT، بينما لا يمتلك الجدول المُسلسَل قبل إعادة التحميل أي مفتاح. ولا تكون سَلسلة المفتاح دون شروط مكافئة كذلك، لأنها ستجعل جدول Distributed مستقلًا يستخدمه لاستبعاد المقاطع عند القراءة؛ ولا تتيح CREATE TABLE أي طريقة للتعبير عن مفتاح تقسيم يقتصر على الإدراج.

ملاحظات

  • يتيح هذا المحرك عرض بيانات العنقود بالقراءة منه مباشرةً: لا تُدعم عبارات DDL مثل CREATE TABLE وDROP TABLE وALTER وغيرها على قاعدة بيانات Cluster. أدِر المخطط على العنقود مباشرةً، مثلًا باستخدام استعلامات DDL مع ON CLUSTER.
  • تُطبَّق حقوق الوصول على الخوادم البعيدة بحسب المستخدمين المحدّدين في تعريف العنقود (أو بحسب المستخدم الحالي إذا كان العنقود يستخدم السر المشترك بين الخوادم)، وتُطبَّق محليًا وفقًا للامتيازات المعتادة على قاعدة البيانات وجداولها.
  • تنطبق تفاصيل سلوك محرك قاعدة البيانات Remote على محرك Cluster أيضًا، بما في ذلك قواعد ظهور جداول المقطع المحلي، ومدى اكتمال قائمة الجداول، والإبلاغ عن الأخطاء عندما يكون العنقود غير متاح، وسلاسل قواعد البيانات الوسيطة؛ راجع الملاحظات الخاصة به.

مثال

أنشئ قاعدة بيانات Cluster تشير إلى قاعدة البيانات default في العنقود test_shard_localhost المُعرَّف في تهيئة الخادم، ثم استخدمها:
آخر تعديل في ١٤ أكتوبر ٢٠٢٦