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

> يدعم المحرك `Atomic` استعلامات `DROP TABLE` و`RENAME TABLE` غير الحاجبة، واستعلامات `EXCHANGE TABLES` الذرّية. ويُستخدم محرك قاعدة البيانات `Atomic` افتراضيًا.

# Atomic

يدعم المحرك `Atomic` استعلامات [`DROP TABLE`](#drop-detach-table) و[`RENAME TABLE`](#rename-table) غير الحاجبة، واستعلامات [`EXCHANGE TABLES`](#exchange-tables) الذرّية. ويُستخدم محرك قاعدة البيانات `Atomic` افتراضيًا في ClickHouse مفتوح المصدر.

<Note>
  في ClickHouse Cloud، يُستخدم أيضًا افتراضيًا [محرك قاعدة البيانات `Shared`](/ar/products/cloud/features/infrastructure/shared-catalog#shared-database-engine)، كما يدعم العمليات المذكورة أعلاه.
</Note>

## إنشاء قاعدة بيانات

```sql theme={null}
CREATE DATABASE test [ENGINE = Atomic] [SETTINGS name = value, ...];
```

يمكن حذف `ENGINE = Atomic`، لأنه الخيار الافتراضي. ويمكن أن تتضمّن عبارة `SETTINGS` إعدادات محرك قاعدة البيانات (مثل [`disk`](#metadata-disk) أو [`max_tables`](#limiting-the-number-of-tables)) وإعدادات الاستعلام العادية معًا؛ إذ يُوجَّه كل اسم إلى الفئة التي ينتمي إليها منهما.

## تفاصيل وتوصيات

### معرّف UUID للجدول

لكل جدول في قاعدة البيانات `Atomic` معرّف [معرّف UUID](/ar/reference/data-types/uuid) دائم، وتُخزَّن بياناته في الدليل التالي:

```text theme={null}
/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/
```

حيث يشير `xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` إلى معرّف UUID الخاص بالجدول.

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

على سبيل المثال:

```sql theme={null}
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;
```

<Note>
  يمكنك استخدام الإعداد [show\_table\_uuid\_in\_table\_create\_query\_if\_not\_nil](/ar/reference/settings/session-settings/show#show_table_uuid_in_table_create_query_if_not_nil) لعرض معرّف UUID عبر استعلام `SHOW CREATE`.
</Note>

### RENAME TABLE

لا تُعدّل استعلامات [`RENAME`](/ar/reference/statements/rename) معرّف UUID ولا تنقل بيانات الجدول. تُنفَّذ هذه الاستعلامات فورًا ولا تنتظر حتى تكتمل الاستعلامات الأخرى التي تستخدم الجدول.

### DROP/DETACH TABLE

عند استخدام `DROP TABLE`، لا تُزال أي بيانات. يكتفي محرّك `Atomic` بوضع علامة على الجدول على أنه محذوف، وذلك بنقل البيانات الوصفية الخاصة به إلى `/clickhouse_path/metadata_dropped/` وإخطار خيط المعالجة في الخلفية. ويُحدَّد التأخير قبل الحذف النهائي لبيانات الجدول بواسطة إعداد [`database_atomic_delay_before_drop_table_sec`](/ar/reference/settings/server-settings/settings/other#database_atomic_delay_before_drop_table_sec).
يمكنك تحديد الوضع المتزامن باستخدام المُعدِّل `SYNC`. استخدم الإعداد [`database_atomic_wait_for_drop_and_detach_synchronously`](/ar/reference/settings/session-settings/database#database_atomic_wait_for_drop_and_detach_synchronously) لتحقيق ذلك. في هذه الحالة، ينتظر `DROP` حتى تنتهي استعلامات `SELECT` و`INSERT` وغيرها من الاستعلامات الجارية التي تستخدم الجدول. وسيُزال الجدول عندما لا يعود قيد الاستخدام.

### EXCHANGE TABLES/DICTIONARIES

يُبدّل استعلام [`EXCHANGE`](/ar/reference/statements/exchange) الجداول أو القواميس تبديلًا ذريًا. على سبيل المثال، بدلًا من هذه العملية غير الذرية:

```sql title="Non-atomic" theme={null}
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;
```

يمكنك استخدام قاعدة بيانات بمحرك atomic:

```sql title="Atomic" theme={null}
EXCHANGE TABLES new_table AND old_table;
```

### ReplicatedMergeTree في قاعدة بيانات atomic

بالنسبة إلى جداول [`ReplicatedMergeTree`](/ar/reference/engines/table-engines/mergetree-family/replication)، يُنصح بعدم تحديد معلمات المحرك الخاصة بالمسار في ZooKeeper واسم النسخة المتماثلة. في هذه الحالة، ستُستخدم معلمتا الإعداد [`default_replica_path`](/ar/reference/settings/server-settings/settings/default-replica#default_replica_path) و[`default_replica_name`](/ar/reference/settings/server-settings/settings/default-replica#default_replica_name). وإذا أردت تحديد معلمات المحرك صراحةً، فيُنصح باستخدام ماكرو `{uuid}`. وهذا يضمن إنشاء مسارات فريدة تلقائيًا لكل جدول في ZooKeeper.

### قرص البيانات الوصفية

عند تحديد `disk` في `SETTINGS`، يُستخدم القرص لتخزين ملفات البيانات الوصفية للجدول.
ويمكن أن يشير إلى قرص مُعرَّف في إعدادات الخادم، أو أن يُعرَّف بشكل مضمّن باستخدام الدالة `disk`،
تمامًا كما هو الحال مع الجدول المفرد:

```sql theme={null}
CREATE DATABASE db SETTINGS disk = 'db_disk';
CREATE DATABASE db SETTINGS disk = disk(type = 'local', path = '/var/lib/clickhouse-disks/db_disk');
```

إذا لم يُحدَّد، فسيُستخدَم افتراضيًا القرص المُعرَّف في `database_disk.disk`.

تعمل عبارة `SETTINGS` نفسها مع `ATTACH DATABASE`، وهي الطريقة التي تُربط بها بالخادم قاعدة بيانات توجد
ملفات البيانات الوصفية الخاصة بها على قرص آخر. ويتطلب `Atomic` في هذه الحالة تحديد معرّف `UUID` الخاص
بقاعدة البيانات صراحةً:

```sql theme={null}
ATTACH DATABASE db UUID '28f1c61c-2970-457a-bffe-454156ddcfef'
SETTINGS disk = disk(type = 'local', path = '/var/lib/clickhouse-disks/db_disk');
```

### تحديد عدد الجداول

يحدّ الإعداد `max_tables` عدد الجداول التي يمكن أن تحتويها قاعدة البيانات، والقيمة `0` (وهي الافتراضية) تعني بلا حد. ويُحتسب ضمن هذا الحد كل كائن شبيه بالجدول: الجدول العادي، والـ VIEW، والـ materialized view، والقاموس المُنشأ باستخدام `CREATE DICTIONARY`. وعند بلوغ الحد، تُطلق العمليات `CREATE TABLE` و`CREATE DICTIONARY` و`ATTACH TABLE` استثناء `TOO_MANY_TABLES`.

```sql theme={null}
CREATE DATABASE db ENGINE = Atomic SETTINGS max_tables = 100;
```

يمكن تغيير الحد لقاعدة بيانات موجودة باستخدام `ALTER DATABASE`:

```sql theme={null}
ALTER DATABASE db MODIFY SETTING max_tables = 200;
```

خفض الحد إلى ما دون العدد الحالي للجداول لا يؤدي إلى حذف أي جداول، بل يمنع فقط إنشاء جداول جديدة إلى أن ينخفض العدد دون الحد مجددًا.

ينشئ `CREATE OR REPLACE TABLE` الجدول البديل لفترة وجيزة باسم مؤقت قبل أن يستبدله بالأصلي، لذا فإن استبدال جدول بينما تكون قاعدة البيانات عند `max_tables` بالضبط يفشل مع الخطأ `TOO_MANY_TABLES` رغم أن العدد النهائي للجداول لن يزداد. كما يخضع لهذا الحد نقل كائن إلى قاعدة البيانات باستخدام `RENAME TABLE` أو `RENAME DICTIONARY`.

العرض المُجسَّد (materialized view) الذي يُنشأ من دون `TO` clause يمتلك جدولًا داخليًا مخفيًا يُحتسب ضمن الحد كجدول قائم بذاته.

يُفحص الحد قبل بدء العملية، لذا فهو يعمل على أساس بذل أقصى جهد: إذ يمكن للاستعلامات المتزامنة أن تدفع قاعدة البيانات لتجاوزه قليلًا.

يتوفر هذا الإعداد لمحركات قواعد البيانات العاملة على القرص التي تحتفظ بجداولها في الذاكرة وببياناتها الوصفية في ملفات `.sql` محلية: `Atomic` و`Ordinary`. أما محرك `Replicated` فلا يدعمه.

## انظر أيضًا

* [system.databases](/ar/reference/system-tables/databases) جدول النظام
