> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-postgresql-tls-support.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

> مقالة تقارن بين العروض المادية والإسقاطات في ClickHouse، بما في ذلك حالات الاستخدام والأداء والقيود.

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

<div id="key-differences">
  ## ملخص الفروق الرئيسية
</div>

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

| Aspect                                                                                     | Materialized views                                                                                                                                                                                                                                                                                                      | Projections                                                                                                                                                                                                                                                     |
| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| تخزين البيانات وموقعها                                                                     | تخزّن نتائجها في **جدول هدف منفصل ومُعرَّف صراحةً**، وتعمل كمشغّلات insert عند `INSERT` في جدول المصدر.                                                                                                                                                                                                                 | تُنشئ الإسقاطات تخطيطات بيانات محسّنة **تُخزَّن فعليًا إلى جانب بيانات الجدول الرئيسي** وتكون غير مرئية للمستخدم.                                                                                                                                               |
| آلية التحديث                                                                               | تعمل **بشكل متزامن** عند `INSERT` في جدول المصدر (بالنسبة إلى العروض المادية التزايدية). ملاحظة: يمكن أيضًا **جدولتها** باستخدام العروض المادية القابلة للتحديث.                                                                                                                                                        | تحديثات **غير متزامنة** في الخلفية عند `INSERT` في الجدول الرئيسي.                                                                                                                                                                                              |
| التفاعل مع الاستعلامات                                                                     | يتطلّب العمل مع Materialized Views الاستعلام من **جدول الهدف مباشرةً**، ما يعني أنك تحتاج إلى معرفة بوجود العروض المادية عند كتابة الاستعلامات.                                                                                                                                                                         | يختار ClickHouse الإسقاطات **تلقائيًا** عبر مُحسِّن الاستعلامات، وهي شفافة بمعنى أن المستخدم لا يحتاج إلى تعديل استعلاماته على الجدول الذي يحتوي على الإسقاط للاستفادة منه. وابتداءً من الإصدار 25.6، أصبح من الممكن أيضًا التصفية باستخدام أكثر من إسقاط واحد. |
| التعامل مع `UPDATE` / `DELETE`                                                             | **لا تتفاعل تلقائيًا** مع عمليات `UPDATE` أو `DELETE` على جدول المصدر، لأن العروض المادية لا تكون على دراية بجدول المصدر، بل تعمل فقط كمشغّلات insert *إلى* جدول مصدر. وقد يؤدي ذلك إلى تقادم محتمل للبيانات بين جدولي المصدر والهدف، ويستلزم حلولًا بديلة أو إعادة تحديث كاملة بشكل دوري. (عبر عرض مادي قابل للتحديث). | تكون **غير متوافقة افتراضيًا مع الصفوف `DELETED`** (وخاصة lightweight deletes). ويمكن تفعيل هذا التوافق عبر `lightweight_mutation_projection_mode` (الإصدار v24.7+).                                                                                            |
| دعم `JOIN`                                                                                 | نعم. يمكن استخدام العروض المادية القابلة للتحديث لإزالة التطبيع المعقّدة. أما العروض المادية التزايدية فلا تُفعَّل إلا عند insert في الجدول الواقع أقصى اليسار.                                                                                                                                                         | لا. عمليات `JOIN` غير مدعومة داخل تعريفات الإسقاط لتصفية البيانات المتجسدة. لكن الاستعلامات التي تربط جداول تحتوي على إسقاطات تعمل بشكل طبيعي، إذ تحسّن الإسقاطات الوصول إلى كل جدول على حدة.                                                                   |
| عبارة `WHERE` في التعريف                                                                   | نعم. يمكن تضمين عبارات `WHERE` لتصفية البيانات قبل التجسيد.                                                                                                                                                                                                                                                             | لا. عبارات `WHERE` غير مدعومة داخل تعريفات الإسقاط لتصفية البيانات المتجسدة.                                                                                                                                                                                    |
| إمكانات التسلسل                                                                            | نعم، يمكن أن يكون جدول الهدف لأحد العروض المادية مصدرًا لعرض مادي آخر، مما يتيح خطوط معالجة متعددة المراحل.                                                                                                                                                                                                             | لا. لا يمكن تسلسل الإسقاطات.                                                                                                                                                                                                                                    |
| محركات الجداول القابلة للتطبيق                                                             | يمكن استخدامها مع محركات جداول مصدر متنوعة، لكن جداول الهدف تكون عادةً من عائلة `MergeTree`.                                                                                                                                                                                                                            | **متاحة فقط** لمحركات الجداول من عائلة `MergeTree`.                                                                                                                                                                                                             |
| التعامل مع حالات الفشل                                                                     | يعني الفشل أثناء إدراج البيانات فقدانها في جدول الهدف، مما قد يؤدي إلى عدم اتساق محتمل.                                                                                                                                                                                                                                 | تُعالَج الإخفاقات **بصمت** في الخلفية. ويمكن للاستعلامات المزج بسلاسة بين الأجزاء المتجسدة وغير المتجسدة.                                                                                                                                                       |
| العبء التشغيلي                                                                             | يتطلّب إنشاء جدول هدف بشكل صريح، وغالبًا ما يتطلّب backfilling يدويًا. كما أن إدارة الاتساق مع `UPDATE`/`DELETE` تزيد من التعقيد.                                                                                                                                                                                       | تُدار الإسقاطات وتُحفَظ متزامنة تلقائيًا، ويكون عبؤها التشغيلي عمومًا أقل.                                                                                                                                                                                      |
| التوافق مع استعلامات `FINAL`                                                               | متوافق عمومًا، لكنه يتطلّب غالبًا `GROUP BY` على جدول الهدف.                                                                                                                                                                                                                                                            | **لا يعمل** مع استعلامات `FINAL`.                                                                                                                                                                                                                               |
| التجسيد الكسول                                                                             | نعم.                                                                                                                                                                                                                                                                                                                    | راقب مشكلات توافق الإسقاطات عند استخدام ميزات التجسيد. وقد تحتاج إلى ضبط `query_plan_optimize_lazy_materialization = false`                                                                                                                                     |
| النسخ المتماثلة المتوازية                                                                  | نعم.                                                                                                                                                                                                                                                                                                                    | لا.                                                                                                                                                                                                                                                             |
| [`optimize_read_in_order`](/ar/reference/settings/session-settings#optimize_read_in_order) | نعم.                                                                                                                                                                                                                                                                                                                    | نعم.                                                                                                                                                                                                                                                            |
| التحديثات وعمليات الحذف الخفيفة                                                            | نعم.                                                                                                                                                                                                                                                                                                                    | لا.                                                                                                                                                                                                                                                             |

<div id="choose-between">
  ## مقارنة بين العروض المادية والإسقاطات
</div>

<div id="choosing-materialized-views">
  ### متى تختار العروض المادية
</div>

ينبغي أن تفكر في استخدام العروض المادية عندما:

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

<div id="avoid-materialized-views">
  ### متى ينبغي تجنب العروض المادية
</div>

ينبغي التفكير في تجنب استخدام العروض المادية عندما:

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

<div id="choosing-projections">
  ### متى تختار الإسقاطات
</div>

ينبغي التفكير في استخدام الإسقاطات عندما:

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

<div id="avoid-projections">
  ### متى يجب تجنب الإسقاطات
</div>

يجب التفكير في تجنب استخدام الإسقاطات عندما:

* **تكون هناك حاجة إلى تحويل بيانات معقد أو ETL متعدد المراحل**: لا تدعم تعريفات الإسقاط عمليات `JOIN`، ولا يمكن تسلسلها لبناء pipelines متعددة الخطوات، كما أنها لا تدعم بعض ميزات SQL مثل دوال النوافذ أو عبارات `CASE` المعقدة. وبينما يمكن للاستعلامات على الجداول التي تحتوي على إسقاطات أن تُجري عمليات join بحرية، فإن الإسقاطات نفسها ليست مناسبة لتحويل البيانات المعقد.
* **تكون هناك حاجة إلى تصفية صريحة للبيانات المُخزَّنة فعليًا**: لا تدعم الإسقاطات عبارات `WHERE` في تعريفها لتصفية البيانات التي تُخزَّن فعليًا داخل الإسقاط نفسه.
* **يتم استخدام محركات جداول لا تنتمي إلى MergeTree**: لا تتوفر الإسقاطات إلا للجداول التي تستخدم عائلة محركات `MergeTree`.
* تكون استعلامات `FINAL` ضرورية: لا تعمل الإسقاطات مع استعلامات `FINAL`، التي تُستخدم أحيانًا لإزالة التكرار.
* تحتاج إلى [parallel replicas](/ar/products/cloud/features/infrastructure/parallel-replicas)، إذ إنها غير مدعومة مع الإسقاطات.

<div id="summary">
  ## الملخص
</div>

تُعد العروض المادية والإسقاطات أداتين فعّالتين لتحسين الاستعلامات وتحويل البيانات، وبوجه عام، نوصي بعدم التعامل مع استخدامهما على أنهما خياران متبادلان لا يجتمعان. بل يمكن استخدامهما بشكل متكامل لتحقيق أقصى استفادة من استعلاماتك. لذلك، فإن الاختيار بين العروض المادية والإسقاطات في ClickHouse يعتمد في الأساس على حالة الاستخدام المحددة لديك وأنماط الوصول.

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

ومن ناحية أخرى، ينبغي استخدام الإسقاطات عندما تحتاج إلى تحسين الاستعلامات التي تُطبِّق تصفية على أعمدة تختلف عن تلك المستخدمة في المفتاح الأساسي للجدول، وهو ما يحدد الترتيب المادي للبيانات على القرص. وهي مفيدة بشكل خاص عندما لا يعود من الممكن تغيير المفتاح الأساسي لجدول ما، أو عندما تكون أنماط الوصول لديك أكثر تنوعًا مما يمكن أن يستوعبه المفتاح الأساسي.
