لا ينطبق هذا الموضوع على ClickHouse Cloud، حيث تعمل النسخ المتماثلة المتوازية مثل عدة شظايا في عناقيد ClickHouse التقليدية من نوع shared-nothing، ويحل التخزين الكائني محل النسخ المتماثلة، بما يضمن التوافر العالي وتحمّل الأعطال.
ما هي شظايا الجداول في ClickHouse؟
في هذه الحالة، يمكن تقسيم البيانات عبر عدة خوادم ClickHouse على هيئة شظايا جدول:
تحتوي كل شظية على مجموعة فرعية من البيانات، وتعمل كجدول ClickHouse عادي يمكن الاستعلام عنه بشكل مستقل. لكن الاستعلامات لن تعالج سوى تلك المجموعة الفرعية، وقد يكون ذلك مناسبًا بحسب توزيع البيانات. وعادةً ما يوفّر جدول موزّع (غالبًا واحدًا لكل خادم) عرضًا موحّدًا لمجموعة البيانات الكاملة. وهو لا يخزّن البيانات بنفسه، بل يمرّر استعلامات SELECT إلى جميع الشظايا، ويجمّع النتائج، ويوجّه عمليات INSERTS لتوزيع البيانات بالتساوي.
إنشاء جدول موزّع
ON CLUSTER عبارة DDL موزعة، ويُوجّه ClickHouse إلى إنشاء الجدول على جميع الخوادم المُدرجة في تعريف العنقود test_cluster. وتتطلب DDL الموزعة مكوّن Keeper إضافيًا في معمارية العنقود.
بالنسبة إلى معلمات المحرك الموزع، نحدد اسم العنقود (test_cluster)، واسم قاعدة البيانات (uk) للجدول الهدف المُجزّأ، واسم الجدول الهدف المُجزّأ (uk_price_paid_simple)، ومفتاح التجزئة لتوجيه INSERT. في هذا المثال، نستخدم الدالة rand لإسناد الصفوف إلى الشظايا عشوائيًا. ومع ذلك، يمكن استخدام أي تعبير — حتى التعبيرات المعقدة — كمفتاح تجزئة، بحسب حالة الاستخدام. يوضح القسم التالي كيفية عمل توجيه INSERT.
توجيه INSERT
① يُرسَل INSERT (يتضمن صفًا واحدًا) يستهدف الجدول الموزّع إلى خادم ClickHouse يستضيف الجدول، إما مباشرةً أو عبر موازن تحميل. ② لكل صف من INSERT (صف واحد فقط في مثالنا)، يقيّم ClickHouse مفتاح التجزئة (هنا، rand())، ثم يحسب باقي قسمة النتيجة على عدد خوادم الشظايا، ويستخدم الناتج بوصفه معرّف الخادم الهدف (تبدأ المعرّفات من 0 وتزداد بمقدار 1). بعد ذلك، يُمرَّر الصف ثم ③ يُدرَج في الشظية المقابلة من الجدول على ذلك الخادم. يشرح القسم التالي كيفية عمل إعادة توجيه SELECT.
إعادة توجيه SELECT
SELECT باستخدام جدول موزّع في ClickHouse:
① يُرسَل استعلام
SELECT تجميعي يستهدف الجدول الموزّع إلى خادم ClickHouse المعني، إما مباشرةً أو عبر موازن تحميل.
② يمرّر جدول موزّع الاستعلام إلى جميع الخوادم التي تستضيف شظايا الجدول الهدف، حيث يحسب كل خادم ClickHouse نتيجة التجميع المحلية الخاصة به بالتوازي.
بعد ذلك، يجمع خادم ClickHouse الذي يستضيف الجدول الموزّع المستهدف في البداية ③ جميع النتائج المحلية، ثم ④ يدمجها في النتيجة العامة النهائية، و⑤ يعيدها إلى مُرسِل الاستعلام.
ما هي النسخ المتماثلة للجداول في ClickHouse؟
Shard-1 وShard-2 من الجدول، اللذين قُدِّما سابقًا، يمتلك كلٌّ منهما ثلاث نسخ متماثلة. ويُرسَل استعلام إلى هذا العنقود:
تعمل معالجة الاستعلام بصورة مماثلة للإعدادات التي لا تحتوي على نسخ متماثلة، إذ لا ينفّذ الاستعلام سوى نسخة متماثلة واحدة من كل شظية.
لا تضمن النسخ المتماثلة تكامل البيانات والتبديل عند الفشل فحسب، بل تحسّن أيضًا إنتاجية معالجة الاستعلامات عبر السماح بتشغيل عدة استعلامات بالتوازي على نسخ متماثلة مختلفة.① يُرسَل الاستعلام الذي يستهدف الجدول الموزّع إلى خادم ClickHouse المعني، إما مباشرةً أو عبر موازن تحميل. ② يمرّر الجدول الموزّع الاستعلام إلى نسخة متماثلة واحدة من كل شظية، حيث يحسب كل خادم ClickHouse يستضيف النسخة المتماثلة المحددة نتيجة استعلامه المحلية بالتوازي. ويعمل ما تبقّى بالطريقة نفسها كما في الإعدادات التي لا تحتوي على نسخ متماثلة، لذلك لا يظهر في المخطط أعلاه. ويجمع خادم ClickHouse الذي يستضيف الجدول الموزّع المستهدف في البداية جميع النتائج المحلية، ويدمجها في النتيجة العامة النهائية، ثم يعيدها إلى مُرسِل الاستعلام. لاحظ أن ClickHouse يتيح ضبط استراتيجية تمرير الاستعلام في الخطوة ②. وافتراضيًا — بخلاف ما هو موضح في المخطط أعلاه — يفضّل الجدول الموزّع نسخة متماثلة محلية إن كانت متاحة، لكن يمكن استخدام استراتيجيات أخرى لموازنة الحمل.