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