Skip to main content
جميع أدلة البدء السريع
التحليلات اللحظيةمستودعات البياناتالرصدAI/MLCloudOss

المتطلبات الأساسية

To successfully follow this guide, you’ll need the following: يجب أيضًا أن تكون قد أكملت أدلة البدء السريع التالية، لأن هذا الدليل يستند مباشرةً إلى جدول uk_price_paid والمفاهيم المقدَّمة فيها:

ما الذي ستبنيه

في دليل البدء السريع لـ MergeTree، رأيت أن الاستعلام عن uk_price_paid حسب town أو county يتطلب فحصًا كاملًا للجدول لأن الجدول مُرتَّب وفق (postcode, addr1, addr2). في دليل البدء السريع هذا، ستحل هذه المشكلة بإنشاء إسقاط — وهو تمثيل إضافي مُرتَّب لبياناتك ومخزَّن داخل الجدول نفسه. وخلافًا للعروض المادية، لا تتطلب الإسقاطات أي جدول وجهة منفصل، وتبقى متزامنة مع التعديلات (الحذف والتحديث)، ويستخدمها مُحسِّن الاستعلامات بشفافية، بحيث تواصل الاستعلام باستخدام اسم الجدول نفسه. وبحلول النهاية، ستفهم كيفية إضافة إسقاط وتفعيل تجسيده، وكيف يختاره ClickHouse تلقائيًا، ومتى تختار الإسقاطات بدلًا من العروض المادية.
1

افهم سبب حاجتك إلى إسقاط

يُفرز جدول uk_price_paid حسب (postcode, addr1, addr2). وهذا يعني أن ClickHouse يستطيع تخطي كتل كبيرة من البيانات عند التصفية حسب postcode أو addr1 أو addr2، لكن الاستعلامات التي تُصفّي حسب town يجب أن تفحص كل الصفوف — أي 30 مليون صف بالكامل.يخزّن الإسقاط نسخة إضافية مفروزة من بعض الأعمدة أو كلها داخل الجدول نفسه. وعند الاستعلام من الجدول، يتحقق مُحسِّن الاستعلامات تلقائيًا مما إذا كانت القراءة من الإسقاط ستتطلب عددًا أقل من الـ granules مقارنةً بالبيانات الأساسية، ويستخدمه تلقائيًا إذا كان الأمر كذلك.الاختلافات الأساسية عن العروض المادية:
  • لا يوجد جدول منفصل - فالإسقاط موجود داخل uk_price_paid نفسه
  • تحسين شفاف للاستعلامات - تستعلم من uk_price_paid كالمعتاد، ويتولى ClickHouse اختيار الإسقاط تلقائيًا
  • يبقى متزامنًا مع mutations - تنعكس عمليات الحذف والتحديث المطبقة على الجدول في الإسقاط
اطّلع على المزيد في الوثائق المرجعية الخاصة بالإسقاطات.
2

أضف إسقاطًا إلى جدولك

عرّف إسقاطًا على uk_price_paid يخزّن town وdate وprice وtype مرتبةً حسب (town, date):
يؤدي هذا إلى تسجيل الإسقاط في البيانات الوصفية للجدول، لكنه لا يُطبَّق ماديًا على البيانات الحالية، وإنما ستقوم فقط عمليات الإدراج المستقبلية بملئه.تحقّق من ظهور الإسقاط في تعريف الجدول:
يجب أن ترى كتلة PROJECTION uk_price_paid_by_town في المخرجات.
3

تجسيد الإسقاط للبيانات الحالية

مثل العروض المُجسَّدة، لا يُطبَّق الإسقاط المُضاف حديثًا إلا على عمليات الإدراج اللاحقة. ولملئه بـ30 مليون صف موجودة بالفعل في الجدول، قم بتجسيده صراحةً:
يُنفَّذ هذا كعملية mutation في الخلفية. يمكنك التحقق من تقدّمه:
بمجرد أن تصبح is_done = 1، يكون الإسقاط قد تم تخزينه فعليًا بالكامل. ويمكنك أيضًا التحقق من ذلك بفحص system.projection_parts:
4

نفّذ استعلامًا على الجدول ولاحظ الاستخدام التلقائي للإسقاط

الآن نفّذ استعلامًا مع التصفية حسب town على نفس الجدول الذي تجري عليه استعلاماتك دائمًا:
تحقّق من إحصاءات الاستعلام - ستلاحظ أن عدد الصفوف المقروءة أقل بكثير مقارنةً بما كان عليه قبل وجود الإسقاط، لأن ClickHouse اختار تلقائيًا القراءة من الإسقاط uk_price_paid_by_town بدلًا من فحص البيانات الأساسية.يمكنك التأكد من استخدام الإسقاط عبر EXPLAIN:
ابحث في المخرجات عن ReadFromMergeTree مع الإشارة إلى اسم الإسقاط. إذا أردت مقارنة الأداء مباشرةً، يمكنك تعطيل تحسين الإسقاط لاستعلام واحد:
يؤدي هذا إلى إجراء مسح كامل للجدول لكي تتمكن من ملاحظة الفرق في عدد الصفوف المقروءة.
5

قارن بين الإسقاطات والعروض المادية

تعالج الإسقاطات والعروض المادية المشكلة نفسها، وهي تسريع عمليات القراءة لأنماط الوصول البديلة، لكن لكلٍّ منهما مفاضلات مختلفة. باختصار، تكون الإسقاطات هي الخيار الأفضل عندما تحتاج فقط إلى ترتيب فرز مختلف للبيانات نفسها؛ أما العروض المادية فهي أكثر مرونة عندما تحتاج إلى تحويل البيانات أو تجميعها أو توجيهها إلى مخطط مختلف. ولمقارنة مفصلة، راجع العروض المادية مقابل الإسقاطات.
6

راقب الأثر الإضافي على التخزين

تخزّن الإسقاطات نسخةً ثانية من الأعمدة المحددة داخل الجدول نفسه، مما يزيد من استخدام القرص. استعلم من system.parts للاطلاع على الحجم الإجمالي لـ uk_price_paid (والذي يتضمن الآن بيانات الإسقاط):
يمكنك أيضًا التحقّق من مساحة التخزين الخاصة بالإسقاطات:
هذه هي المقايضة الجوهرية نفسها كما في العروض المادية: مساحة أكبر على القرص مقابل قراءات أسرع. وقد يكون الإسقاط أصغر من نسخة كاملة لأنه يقتصر على الأعمدة الأربعة المحددة، كما يختلف الضغط باختلاف ترتيب الفرز.

الخطوات التالية

في دليل البدء السريع هذا، أضفتَ إسقاط إلى uk_price_paid يخزّن البيانات مرتبةً حسب (town, date)، مما يتيح عمليات lookup سريعة حسب البلدة دون إنشاء table منفصل. وتعلّمتَ أن مُحسِّن الاستعلامات يختار إسقاط تلقائيًا، وأنها تبقى متزامنة مع mutations، وتستبدل مساحة disk بأداء read أفضل. اطّلع بعد ذلك على أدلة البدء السريع التالية: أو تعمّق أكثر بالرجوع إلى وثائق Reference:
ClickHouse Academy — Master ClickHouse with expert-designed training for every skill level

Check out the ClickHouse academy for on-demand and live training

Last modified on July 2, 2026