كيف يعمل الفهرس الأساسي المتناثر في ClickHouse؟
يساعد الفهرس الأساسي المتناثر في ClickHouse على تحديد الحبيبات—وهي كتل من الصفوف—التي يُحتمل أن تحتوي على بيانات تطابق شرط query على أعمدة primary key للجدول، وذلك بكفاءة. في القسم التالي، نشرح كيفية إنشاء هذا الفهرس من القيم الموجودة في تلك الأعمدة.
إنشاء الفهرس الأساسي المتناثر
لأغراض المعالجة، تُقسَّم بيانات كل عمود ④ منطقيًا إلى حبيبات—تغطي كل منها 8,192 صفًا—وهي أصغر الوحدات التي تعمل عليها آليات معالجة البيانات في ClickHouse. وهذا التقسيم إلى حبيبات هو أيضًا ما يجعل الفهرس الأساسي متناثرًا: فبدلًا من فهرسة كل صف، يخزّن ClickHouse ⑤ قيم المفتاح الأساسي من صف واحد فقط لكل حبيبة—وتحديدًا الصف الأول. وينتج عن ذلك مُدخل فهرس واحد لكل حبيبة:
وبفضل هذا التبعثر، يكون الفهرس الأساسي صغيرًا بما يكفي ليتسع بالكامل في الذاكرة، مما يتيح تصفيةً سريعةً للاستعلامات التي تتضمن شروطًا على أعمدة المفتاح الأساسي. في القسم التالي، نوضح كيف يساعد ذلك في تسريع مثل هذه الاستعلامات.
نوضح بإيجاز كيف يُستخدم الفهرس الأساسي المتناثر لتسريع الاستعلام من خلال رسم متحرك آخر:
① يتضمن استعلام المثال شرطًا على كلٍّ من عمودَي المفتاح الأساسي:
town = 'LONDON' AND street = 'OXFORD STREET'.
② لتسريع الاستعلام، يحمّل ClickHouse الفهرس الأساسي للجدول إلى الذاكرة.
③ ثم يفحص إدخالات الفهرس لتحديد الحبيبات التي قد تحتوي على صفوف تطابق الشرط، أي الحبيبات التي لا يمكن تخطيها.
④ بعد ذلك، تُحمَّل هذه الحبيبات التي يُحتمل أن تكون ذات صلة وتُعالَج في الذاكرة، إلى جانب الحبيبات المقابلة من أي أعمدة أخرى مطلوبة للاستعلام.
مراقبة الفهارس الأساسية
النقاط الرئيسية
- تساعد الفهارس الأساسية المتناثرة ClickHouse على تخطي البيانات غير الضرورية عبر تحديد الحبيبات التي قد تحتوي على صفوف تطابق شروط الاستعلام على أعمدة المفتاح الأساسي.
- يخزّن كل فهرس قيم المفتاح الأساسي من الصف الأول فقط في كل حبيبة (تحتوي الحبيبة افتراضيًا على 8,192 صفًا)، مما يجعله مدمجًا بما يكفي ليوضع في الذاكرة.
- لكل جزء بيانات في جدول MergeTree فهرسه الأساسي الخاص، ويُستخدم هذا الفهرس بشكل مستقل أثناء تنفيذ الاستعلامات.
- أثناء تنفيذ الاستعلامات، يتيح الفهرس لـ ClickHouse تخطي الحبيبات، مما يقلل من عمليات I/O واستخدام الذاكرة ويُسرّع الأداء.
-
يمكنك فحص محتويات الفهرس باستخدام الدالة الجدولية
mergeTreeIndexومراقبة استخدام الفهرس باستخدام clause EXPLAIN.