Skip to main content

ما هي أجزاء الجدول في ClickHouse؟


تُنظَّم بيانات كل جدول في ClickHouse ضمن عائلة محركات MergeTree على القرص في شكل مجموعة من data parts غير القابلة للتغيير. ولتوضيح ذلك، نستخدم هذا الجدول (المُقتبس من مجموعة بيانات أسعار العقارات في المملكة المتحدة)، والذي يتتبع تاريخ بيع العقارات في المملكة المتحدة وبلدتها وشارعها وسعرها:
يمكنك الاستعلام عن هذا الجدول في ClickHouse SQL Playground الخاص بنا. يُنشأ جزء بيانات كلما أُدرجت مجموعة من الصفوف في الجدول. يوضّح المخطط التالي ذلك:
عندما يعالج خادم ClickHouse مثال الإدراج الذي يحتوي على 4 صفوف (على سبيل المثال، عبر عبارة INSERT INTO) الموضحة في المخطط أعلاه، فإنه ينفّذ عدة خطوات: الفرز: تُفرَز الصفوف بحسب مفتاح الفرز الخاص بالجدول (town, street)، ويُنشأ فهرس أساسي متناثر للصفوف المُفرَزة. التقسيم: تُقسَّم البيانات المُفرَزة إلى أعمدة. الضغط: يُصبح كل عمود مضغوطًا. الكتابة إلى القرص: تُحفَظ الأعمدة المضغوطة كملفات أعمدة ثنائية داخل دليل جديد يمثّل جزء البيانات الخاص بعملية الإدراج. ويُضغط الفهرس الأساسي المتناثر أيضًا ويُخزَّن في الدليل نفسه. اعتمادًا على المحرك المحدد للجدول، قد تحدث تحويلات إضافية بالتوازي مع الفرز. تكون أجزاء البيانات مكتفية ذاتيًا، وتشمل جميع البيانات الوصفية اللازمة لتفسير محتوياتها من دون الحاجة إلى كتالوج مركزي. وإلى جانب الفهرس الأساسي المتناثر، تحتوي الأجزاء على بيانات وصفية إضافية، مثل فهارس تخطي البيانات الثانوية، وإحصاءات الأعمدة، وقيم التحقق، وفهارس الحدين الأدنى والأقصى (إذا استُخدم التقسيم)، والمزيد.

دمج الأجزاء

لإدارة عدد الأجزاء في كل جدول، تجمع مهمة دمج في الخلفية الأجزاء الأصغر دوريًا في أجزاء أكبر حتى تصل إلى حجم مضغوط قابل للتهيئة (عادةً نحو 150 جيجابايت). وتُعلَّم الأجزاء المدمجة على أنها غير نشطة، ثم تُحذف بعد فاصل زمني قابل للتهيئة. ومع مرور الوقت، تُنشئ هذه العملية بنية هرمية من الأجزاء المدمجة، ولهذا سُمّي جدول MergeTree بهذا الاسم:
لتقليل عدد الأجزاء الأولية والعبء الإضافي الناتج عن عمليات الدمج، يُنصح عملاء قاعدة البيانات إما بإدراج الصفوف على دفعات كبيرة، مثل 20,000 صف دفعة واحدة، أو باستخدام وضع الإدراج غير المتزامن، حيث يخزّن ClickHouse مؤقتًا الصفوف الواردة من عدة عمليات INSERT إلى الجدول نفسه، ولا ينشئ جزءًا جديدًا إلا بعد أن يتجاوز حجم المخزن المؤقت عتبة قابلة للتهيئة، أو تنتهي مهلة timeout.

مراقبة أجزاء الجدول

يمكنك الاستعلام عن قائمة جميع الأجزاء النشطة الموجودة حاليًا في جدول المثال لدينا باستخدام العمود الافتراضي _part:
يسترجع الاستعلام أعلاه أسماء المجلدات على القرص، حيث يمثّل كل مجلد جزء بيانات نشطًا من الجدول. ولمكوّنات أسماء هذه المجلدات معانٍ محددة، وهي موثّقة هنا لمن يرغب في التعمق أكثر. بدلًا من ذلك، يتتبّع ClickHouse معلومات جميع الأجزاء في جميع الجداول ضمن جدول النظام system.parts، ويُرجع الاستعلام التالي لجدول المثال أعلاه قائمة بجميع الأجزاء النشطة حاليًا، ومستوى الدمج لكل منها، وعدد الصفوف المخزّنة فيها:
يرتفع مستوى الدمج بمقدار واحد مع كل عملية دمج إضافية تُجرى على الجزء. ويشير المستوى 0 إلى أن هذا جزء جديد لم يُدمج بعد.
آخر تعديل في ٣ يوليو ٢٠٢٦