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

> يوفّر وصولًا آنيًا إلى جداول قاعدة بيانات على عنقود محدّد في تهيئة الخادم، ويوجّه إليه استعلامات `SELECT` و`INSERT`.

# العنقود

يوفّر محرك قاعدة البيانات `Cluster` وصولًا آنيًا إلى جداول قاعدة بيانات على عنقود محدّد في تهيئة الخادم. وهو نظير محرك قاعدة البيانات [`Remote`](/ar/reference/engines/database-engines/remote) المخصّص للعناقيد المُسمّاة، كما أن دالة الجدول [`cluster`](/ar/reference/functions/table-functions/cluster) هي نظير دالة الجدول [`remote`](/ar/reference/functions/table-functions/remote) للعناقيد المُسمّاة.

تُجلب قائمة الجداول وبُنية كل منها من العنقود عند الطلب، لذا تعكس قاعدة البيانات وضعه الراهن دائمًا. ويُتاح كل جدول عبر محرك التخزين [`Distributed`](/ar/reference/engines/table-engines/special/distributed) على العنقود المُسمّى، الذي يوجّه إليه استعلامات `SELECT` و`INSERT`.

يفيد ذلك في ربط عدة عناقيد ClickHouse بعضها ببعض، أو في ربط عنقود كامل بـ`clickhouse-local` أو بعنقود آخر دون الحاجة إلى ذكر عناوينه صراحةً: إذ يكفي تعريف العنقود مرة واحدة في التهيئة، بما يشمل بيانات اعتماد كل نسخة متماثلة، والاتصالات الآمنة، والسر المشترك بين الخوادم.

<h2 id="creating-a-database">
  إنشاء قاعدة بيانات
</h2>

```sql theme={null}
CREATE DATABASE cluster_db
ENGINE = Cluster('cluster_name', 'database');
```

**معاملات المحرك**

* `cluster_name` — اسم عنقود من تهيئة الخادم (راجع [العناقيد](/ar/reference/engines/table-engines/special/distributed#distributed-clusters))، كما هو الحال في محرك الجدول `Distributed`. تُدعم [وحدات الماكرو](/ar/reference/settings/server-settings/settings/other#macros) مثل `{cluster}`، وتُوسَّع عند كل وصول.
* `database` — اسم قاعدة البيانات على العنقود.

على عكس محرك قاعدة البيانات `Remote`، لا يقبل المحرك `Cluster` أي وسائط لبيانات الاعتماد ولا يخزّن أي أسرار، إذ تستخدم الاتصالات إعدادات كل نسخة متماثلة الواردة في تهيئة العنقود (المستخدم، وكلمة المرور، والاتصالات الآمنة، والضغط، والسر المشترك بين الخوادم). ويُعاد تحديد العنقود من التهيئة عند كل وصول، وبذلك تواكب قاعدة البيانات عمليات إعادة تحميل التهيئة و[الاكتشاف التلقائي للعنقود](/ar/guides/oss/deployment-and-scaling/cluster-discovery)، تمامًا كما يفعل جدول `Distributed`. يجب أن يكون العنقود موجودًا عند إنشاء قاعدة البيانات؛ وإذا اختفى لاحقًا من التهيئة، فسيظل الخادم قادرًا على بدء التشغيل، وتُبلغ قاعدة البيانات عن العنقود المفقود إلى أن يعود إلى التهيئة.

تُعامَل النسخة المتماثلة التي تشير إلى الخادم الحالي على أنها مقطع محلي: إذ يُنفَّذ `SELECT` و`INSERT` مباشرةً باسم المستخدم الحالي — الذي يحتاج بالتالي إلى الامتيازات المقابلة على قاعدة البيانات الأساسية وجداولها — ولا تُستخدم بيانات اعتماد العنقود المهيأة إلا للنسخ المتماثلة البعيدة فعلًا. وإذا لم تكن قاعدة البيانات أو أحد الجداول موجودًا على النسخة المتماثلة المحلية لمقطع ما، فإن البحث يتحول احتياطيًا إلى النسخ المتماثلة البعيدة لذلك المقطع، تمامًا كما يفعل جدول [`Distributed`](/ar/reference/engines/table-engines/special/distributed).

عندما يحتوي العنقود على عدة مقاطع، يقرأ كل جدول وكيل منها جميعًا، لكن البيانات الوصفية — أي قائمة الجداول وبنيتها — تُؤخذ من مقطع عشوائي (مع تفضيل المقطع المحلي)، تمامًا كما تفعل دالة الجدول [`cluster`](/ar/reference/functions/table-functions/cluster)، بحيث لا يتطلب سرد الجداول سوى استعلام واحد بدلًا من استعلام لكل مقطع. لذلك يُفترض أن تقدّم مقاطع العنقود مجموعة الجداول نفسها؛ أما الجدول الموجود على بعضها فقط، فيُقدَّم عبر وكيل تفشل استعلاماته على المقاطع التي لا تحتويه. ويُرسل `INSERT` في جدول ضمن قاعدة بيانات متعددة المقاطع كل صف إلى مقطع عشوائي (إذ تحمل جداول `Distributed` الوكيلة مفتاح تقسيم ضمنيًا `rand()` يراعي أوزان المقاطع المهيأة)؛ ولتثبيت المقطع لاستعلام ما، اضبط [`insert_shard_id`](/ar/reference/settings/session-settings/insert#insert_shard_id). يقتصر دور المفتاح الضمني على توزيع الصفوف المُدرجة، أما عند القراءة فيتصرف الجدول كجدول `Distributed` بلا مفتاح تقسيم (وعلى وجه الخصوص، لا يعامله [`optimize_skip_unused_shards`](/ar/reference/settings/session-settings/optimize-skip#optimize_skip_unused_shards) و[`force_optimize_skip_unused_shards`](/ar/reference/settings/session-settings/force-optimize#force_optimize_skip_unused_shards) كمفتاح لاستبعاد المقاطع).

وبوجه خاص، لا يظهر الجدول الموجود فقط على مقطع غير مُعتمَد لتحديد البيانات الوصفية في `SHOW TABLES` أو `EXISTS TABLE`، ويُبلَغ عن `UNKNOWN_TABLE` عند تحديده بالاسم؛ إذ ليس له جدول وكيل يمكن الاستعلام عنه. أما الجدول الموجود على المقطع المُعتمَد والغائب عن مقطع آخر فيكون مرئيًا، لكن استعلامات الوكيل قد تفشل على ذلك المقطع الآخر.

لا يوجد تعريف مكافئ قابل لإعادة التنفيذ لجدول وكيل من نوع `Cluster`، ولذلك يُبلغ `SHOW CREATE TABLE` عن الخطأ `THERE_IS_NO_QUERY`. ويشمل ذلك الحالات التالية:

* يُقدَّم الجدول حاليًا عبر التحويل الاحتياطي إلى النسخ المتماثلة البعيدة الموضح أعلاه (أي أن النسخة المتماثلة المحلية لمقطع ما لا تحتوي على قاعدة البيانات أو الجدول). لا يُجري جدول `Distributed` المُعرَّف على العنقود بأكمله أي تحويل احتياطي من هذا النوع، كما أن المجموعة الفرعية الاحتياطية من العنقود ليس لها اسم خاص بها.
* يحتوي اسم عنقود قاعدة البيانات على وحدات ماكرو. يوسّع `Cluster` هذه الوحدات عند كل وصول، بينما يوسّعها `Distributed` عند إنشاء الجدول فقط، لذا فإن استخدام تعبير الماكرو أو توسيعه الحالي كليهما سيؤدي إلى سلوك مختلف بعد تغيير التهيئة.
* قد تُحوّل إعادة تحميل التهيئة عنقودًا أحادي المقطع إلى عنقود متعدد المقاطع. عندها يكتسب الوكيل النشط مفتاح `rand()` ضمنيًا لتوزيع صفوف `INSERT`، بينما لا يمتلك الجدول المُسلسَل قبل إعادة التحميل أي مفتاح. ولا تكون سَلسلة المفتاح دون شروط مكافئة كذلك، لأنها ستجعل جدول `Distributed` مستقلًا يستخدمه لاستبعاد المقاطع عند القراءة؛ ولا تتيح `CREATE TABLE` أي طريقة للتعبير عن مفتاح تقسيم يقتصر على الإدراج.

<h2 id="notes">
  ملاحظات
</h2>

* يتيح هذا المحرك عرض بيانات العنقود بالقراءة منه مباشرةً: لا تُدعم عبارات DDL مثل `CREATE TABLE` و`DROP TABLE` و`ALTER` وغيرها على قاعدة بيانات `Cluster`. أدِر المخطط على العنقود مباشرةً، مثلًا باستخدام استعلامات DDL مع [`ON CLUSTER`](/ar/reference/statements/distributed-ddl).
* تُطبَّق حقوق الوصول على الخوادم البعيدة بحسب المستخدمين المحدّدين في تعريف العنقود (أو بحسب المستخدم الحالي إذا كان العنقود يستخدم السر المشترك بين الخوادم)، وتُطبَّق محليًا وفقًا للامتيازات المعتادة على قاعدة البيانات وجداولها.
* تنطبق تفاصيل سلوك محرك قاعدة البيانات `Remote` على محرك `Cluster` أيضًا، بما في ذلك قواعد ظهور جداول المقطع المحلي، ومدى اكتمال قائمة الجداول، والإبلاغ عن الأخطاء عندما يكون العنقود غير متاح، وسلاسل قواعد البيانات الوسيطة؛ راجع [الملاحظات](/ar/reference/engines/database-engines/remote#notes) الخاصة به.

<h2 id="example">
  مثال
</h2>

أنشئ قاعدة بيانات `Cluster` تشير إلى قاعدة البيانات `default` في العنقود `test_shard_localhost` المُعرَّف في تهيئة الخادم، ثم استخدمها:

```sql theme={null}
CREATE DATABASE cluster_db
ENGINE = Cluster('test_shard_localhost', 'default');
```

```sql theme={null}
SHOW TABLES FROM cluster_db;
```

```text theme={null}
┌─name─┐
│ t    │
└──────┘
```

```sql theme={null}
SELECT * FROM cluster_db.t;
```
