الانتقال إلى المحتوى الرئيسي
من الأسئلة الشائعة بين المستخدمين: متى ينبغي استخدام العروض المادية بدلًا من الإسقاطات؟ في هذه المقالة نستعرض الاختلافات الرئيسية بين الاثنين ولماذا قد تفضّل اختيار أحدهما على الآخر في سيناريوهات معينة.

ملخص الفروق الرئيسية

يلخّص الجدول أدناه الفروق الرئيسية بين العروض المادية والإسقاطات عبر جوانب مختلفة للمقارنة.

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

متى تختار العروض المادية

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

متى ينبغي تجنب العروض المادية

ينبغي التفكير في تجنب استخدام العروض المادية عندما:
  • تُحدَّث البيانات المصدر أو تُحذف بشكل متكرر: من دون استراتيجيات إضافية لضمان الاتساق بين الجدول المصدر والجدول الهدف، قد تصبح العروض المادية التزايدية متقادمة وغير متسقة.
  • إذا كانت البساطة والتحسين التلقائي هما المفضلين: إذا كنت تريد تجنب إدارة جداول هدف منفصلة.

متى تختار الإسقاطات

ينبغي التفكير في استخدام الإسقاطات عندما:
  • تحسين الاستعلامات لجدول واحد: يكون هدفك الأساسي هو تسريع الاستعلامات على جدول أساسي واحد، من خلال توفير ترتيبات فرز بديلة، وتحسين عوامل التصفية على الأعمدة التي لا تشكّل جزءًا من المفتاح الأساسي، أو إجراء التجميعات مسبقًا لجدول واحد.
  • تريد شفافية الاستعلامات: أي أن تستهدف الاستعلامات الجدول الأصلي دون تعديل، مع الاعتماد على ClickHouse لاختيار أفضل تخطيط للبيانات للاستعلام المعني.

متى يجب تجنب الإسقاطات

يجب التفكير في تجنب استخدام الإسقاطات عندما:
  • تكون هناك حاجة إلى تحويل بيانات معقد أو ETL متعدد المراحل: لا تدعم تعريفات الإسقاط عمليات JOIN، ولا يمكن تسلسلها لبناء pipelines متعددة الخطوات، كما أنها لا تدعم بعض ميزات SQL مثل دوال النوافذ أو عبارات CASE المعقدة. وبينما يمكن للاستعلامات على الجداول التي تحتوي على إسقاطات أن تُجري عمليات join بحرية، فإن الإسقاطات نفسها ليست مناسبة لتحويل البيانات المعقد.
  • تكون هناك حاجة إلى تصفية صريحة للبيانات المُخزَّنة فعليًا: لا تدعم الإسقاطات عبارات WHERE في تعريفها لتصفية البيانات التي تُخزَّن فعليًا داخل الإسقاط نفسه.
  • يتم استخدام محركات جداول لا تنتمي إلى MergeTree: لا تتوفر الإسقاطات إلا للجداول التي تستخدم عائلة محركات MergeTree.
  • تكون استعلامات FINAL ضرورية: لا تعمل الإسقاطات مع استعلامات FINAL، التي تُستخدم أحيانًا لإزالة التكرار.
  • تحتاج إلى parallel replicas، إذ إنها غير مدعومة مع الإسقاطات.

الملخص

تُعد العروض المادية والإسقاطات أداتين فعّالتين لتحسين الاستعلامات وتحويل البيانات، وبوجه عام، نوصي بعدم التعامل مع استخدامهما على أنهما خياران متبادلان لا يجتمعان. بل يمكن استخدامهما بشكل متكامل لتحقيق أقصى استفادة من استعلاماتك. لذلك، فإن الاختيار بين العروض المادية والإسقاطات في ClickHouse يعتمد في الأساس على حالة الاستخدام المحددة لديك وأنماط الوصول. وكقاعدة عامة، ينبغي التفكير في استخدام العروض المادية عندما تحتاج إلى تجميع البيانات من جدول مصدر واحد أو أكثر في جدول هدف، أو إلى إجراء تحويلات معقدة على نطاق واسع. وتُعد العروض المادية ممتازة لنقل عبء عمليات التجميع المكلفة من وقت الاستعلام إلى وقت الإدراج. كما أنها خيار رائع لعمليات rollup اليومية أو الشهرية، أو لوحات المعلومات في الوقت الفعلي، أو ملخصات البيانات. ومن ناحية أخرى، ينبغي استخدام الإسقاطات عندما تحتاج إلى تحسين الاستعلامات التي تُطبِّق تصفية على أعمدة تختلف عن تلك المستخدمة في المفتاح الأساسي للجدول، وهو ما يحدد الترتيب المادي للبيانات على القرص. وهي مفيدة بشكل خاص عندما لا يعود من الممكن تغيير المفتاح الأساسي لجدول ما، أو عندما تكون أنماط الوصول لديك أكثر تنوعًا مما يمكن أن يستوعبه المفتاح الأساسي.
آخر تعديل في ٢٩ يونيو ٢٠٢٦