> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> برامج ترميز ضغط الأعمدة لتعليمة CREATE TABLE

# برامج ترميز ضغط الأعمدة

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            ميزة تجريبية
        </a>;
};

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            غير مدعوم في ClickHouse Cloud
        </a>;
};

افتراضيًا، يستخدم ClickHouse ضغط `lz4` في الإصدار المُدار ذاتيًا، و`zstd` في ClickHouse Cloud.

بالنسبة إلى عائلة محركات `MergeTree`، يمكنك تغيير طريقة الضغط الافتراضية في قسم [الضغط](/docs/ar/reference/settings/server-settings/settings/other#compression) ضمن إعدادات الخادم.

يمكنك أيضًا تحديد طريقة الضغط لكل عمود على حدة في استعلام [`CREATE TABLE`](/docs/ar/reference/statements/create/table).

```sql theme={null}
CREATE TABLE codec_example
(
    dt Date CODEC(ZSTD),
    ts DateTime CODEC(LZ4HC),
    float_value Float32 CODEC(NONE),
    double_value Float64 CODEC(LZ4HC(9)),
    value Float32 CODEC(Delta, ZSTD)
)
ENGINE = <Engine>
...
```

يمكن تحديد برنامج الترميز `Default` للإشارة إلى الضغط الافتراضي، الذي قد يعتمد وقت التشغيل على إعدادات مختلفة وخصائص البيانات.
مثال: `value UInt64 CODEC(Default)` — أي ما يعادل عدم تحديد برنامج ترميز.
راجع أيضًا [الاختيار التكيفي لبرنامج الترميز](#adaptive-codec-selection).

يمكنك أيضًا إزالة CODEC الحالي من العمود واستخدام الضغط الافتراضي من config.xml:

```sql theme={null}
ALTER TABLE codec_example MODIFY COLUMN float_value CODEC(Default);
```

يمكن دمج برامج الترميز ضمن مسار معالجة، مثل `CODEC(Delta, Default)`.

<Tip>
  لا يمكنك فك ضغط ملفات قاعدة بيانات ClickHouse باستخدام أدوات خارجية مثل `lz4`. استخدم بدلًا من ذلك الأداة الخاصة [clickhouse-compressor](https://github.com/ClickHouse/ClickHouse/tree/master/programs/compressor).
</Tip>

يدعم الضغط في محركات الجداول التالية:

* عائلة [MergeTree](/docs/ar/reference/engines/table-engines/mergetree-family/mergetree): تدعم برامج ترميز ضغط الأعمدة وتحديد طريقة الضغط الافتراضية من خلال إعدادات [الضغط](/docs/ar/reference/settings/server-settings/settings/other#compression).
* عائلة [Log](/docs/ar/reference/engines/table-engines/log-family/index): تستخدم طريقة الضغط `lz4` افتراضيًا وتدعم برامج ترميز ضغط الأعمدة.
* [Set](/docs/ar/reference/engines/table-engines/special/set): لا يدعم سوى الضغط الافتراضي.
* [Join](/docs/ar/reference/engines/table-engines/special/join): لا يدعم سوى الضغط الافتراضي.

يدعم ClickHouse برامج الترميز العامة والمتخصصة.

<div id="general-purpose-codecs">
  ## برامج الترميز العامة
</div>

<div id="none">
  ### NONE
</div>

`NONE` — بدون ضغط.

<div id="lz4">
  ### LZ4
</div>

`LZ4` — [خوارزمية ضغط بيانات](https://github.com/lz4/lz4) بلا فقدان، تُستخدم افتراضيًا. تستخدم ضغط LZ4 السريع.

<div id="lz4hc">
  ### LZ4HC
</div>

`LZ4HC[(level)]` — خوارزمية LZ4 HC (ضغط عالٍ) ذات مستوى قابل للضبط. المستوى الافتراضي: 9. يؤدي ضبط `level <= 0` إلى استخدام المستوى الافتراضي. المستويات المتاحة: \[1, 12]. نطاق المستويات الموصى به: \[4, 9].

<div id="zstd">
  ### ZSTD
</div>

`ZSTD[(level)]` — [خوارزمية الضغط ZSTD](https://en.wikipedia.org/wiki/Zstandard) ذات `level` قابل للضبط. المستويات المتاحة: \[1, 22]. المستوى الافتراضي: 1.

تكون مستويات الضغط العالية مفيدة في السيناريوهات غير المتناظرة، مثل الضغط مرة واحدة وفك الضغط مرارًا. فكلما ارتفع المستوى، تحسن الضغط وزاد استخدام CPU.

<div id="zxc">
  ### ZXC
</div>

<ExperimentalBadge />

`ZXC[(level)]` — [خوارزمية الضغط غير المتماثل `zxc`](https://github.com/hellobertrand/zxc) مع `level` قابل للضبط. المستويات المتاحة: \[1, 7]. المستوى الافتراضي: 3.

يُفضّل `ZXC` فك الضغط فائق السرعة على حساب ضغط أبطأ، بنسبة ضغط تتراوح بين `LZ4` و`ZSTD`. وهو مناسب لنمط الضغط مرة واحدة وفك الضغط عدة مرات، ويحقق أسرع أداء لفك الضغط على أنوية ARM الحديثة. تعني المستويات الأعلى ضغطًا أفضل وأبطأ، بينما يبقى فك الضغط سريعًا.

<Note>
  برنامج الترميز هذا تجريبي، ويتطلب استخدامه ضبط `SET allow_experimental_codecs = 1`.
</Note>

<div id="zstd_qat">
  ### متقادمة: ZSTD\_QAT
</div>

<CloudNotSupportedBadge />

<div id="deflate_qpl">
  ### متقادم: DEFLATE\_QPL
</div>

<CloudNotSupportedBadge />

<div id="specialized-codecs">
  ## برامج الترميز المتخصصة
</div>

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

<div id="delta">
  ### دلتا
</div>

`Delta(delta_bytes)` — أسلوب ضغط تُستبدل فيه القيم الخام بفروق القيم المتجاورة، باستثناء القيمة الأولى التي تبقى دون تغيير. يشير `delta_bytes` إلى الحد الأقصى لحجم القيم الخام، وتكون قيمته الافتراضية `sizeof(type)`. أُهمل تحديد `delta_bytes` كوسيطة، وستُزال دعمه في إصدار مستقبلي. دلتا هو برنامج ترميز لإعداد البيانات، أي لا يمكن استخدامه بمفرده.

<div id="doubledelta">
  ### DoubleDelta
</div>

`DoubleDelta(bytes_size)` — يحسب دلتا الفروق ويكتبها بصيغة ثنائية مدمجة. يحمل `bytes_size` معنى مشابهاً لـ `delta_bytes` في برنامج ترميز [Delta](#delta). أصبح تحديد `bytes_size` كوسيط مهجوراً، وستُزال دعمه في إصدار مستقبلي. تتحقق أفضل معدلات الضغط للتسلسلات الرتيبة ذات stride ثابت، مثل بيانات السلاسل الزمنية. يمكن استخدامه مع أي نوع رقمي. يطبق الخوارزمية المستخدمة في Gorilla TSDB، مع توسيعها لدعم الأنواع ذات 64 بت. يستخدم بتاً إضافياً واحداً لفروق 32 بت: بادئات من 5 بت بدلاً من بادئات من 4 بت. لمزيد من المعلومات، راجع Compressing Time Stamps في [Gorilla: A Fast, Scalable, In-Memory Time Series Database](http://www.vldb.org/pvldb/vol8/p1816-teller.pdf). يُعد DoubleDelta برنامج ترميز لإعداد البيانات، أي لا يمكن استخدامه بصورة مستقلة.

<div id="gcd">
  ### GCD
</div>

`GCD()` - - يحسب القاسم المشترك الأكبر (GCD) لقيم العمود، ثم يقسم كل قيمة على GCD. يمكن استخدامه مع أعمدة الأعداد الصحيحة والأعداد العشرية وأعمدة التاريخ/الوقت. يناسب برنامج الترميز هذا الأعمدة التي تتغير قيمها (زيادةً أو نقصانًا) بمضاعفات GCD، مثل: 24، 28، 16، 24، 8، 24 (GCD = 4). يُعد GCD برنامج ترميز لإعداد البيانات، أي لا يمكن استخدامه بمفرده.

<div id="gorilla">
  ### Gorilla
</div>

`Gorilla(bytes_size)` — يحسب عملية XOR بين قيمة الفاصلة العائمة الحالية والسابقة، ويكتب الناتج بصيغة ثنائية مضغوطة. كلما صغر الفرق بين القيم المتتالية، أي كلما تغيّرت قيم السلسلة ببطء أكبر، تحسّن معدل الضغط. ينفّذ الخوارزمية المستخدمة في Gorilla TSDB مع توسيعها لدعم الأنواع ذات 64 بت. القيم الممكنة لـ `bytes_size` هي: 1، 2، 4، 8. والقيمة الافتراضية هي `sizeof(type)` إذا كانت تساوي 1 أو 2 أو 4 أو 8؛ وفي جميع الحالات الأخرى تكون 1. لمزيد من المعلومات، راجع القسم 4.1 في [Gorilla: A Fast, Scalable, In-Memory Time Series Database](https://doi.org/10.14778/2824032.2824078).

<div id="alp">
  ### ALP
</div>

<ExperimentalBadge />

`ALP(variant)` — ضغط تكيّفي بلا فقدان للبيانات ذات الفاصلة العائمة. يدعم `Float32` و`Float64`. لمزيد من التفاصيل، راجع [ALP: Adaptive lossless floating-point compression](https://ir.cwi.nl/pub/33334).

يقبل برنامج الترميز هذا وسيطة اختيارية لتحديد المتغير:

* `ALP()` أو `ALP(AUTO)` (افتراضيًا) — يستخدم STD، ويعود إلى RD استنادًا إلى الحجم المضغوط المُقدَّر.
* `ALP(STD)` — متغير ALP القياسي. يمثّل كل قيمة كعدد صحيح مُقاس بدقة باستخدام قوى العدد 10، ثم يضغط الأعداد الصحيحة الناتجة باستخدام Frame-of-Reference وحزم البتات. تُخزَّن القيم التي لا يمكن تمثيلها كاستثناءات خام. يعمل على نحو أفضل مع الأرقام المشتقة من القيم العشرية، مثل القياسات والأسعار.
* `ALP(RD)` — متغير Real Doubles. يعيد تفسير نمط بتات كل قيمة ويقسّمه إلى جزء علوي (الإشارة + الأس + البتات العليا من المانتيسا) وجزء سفلي. تُشفَّر الأجزاء العليا باستخدام قاموس (بحد أقصى 8 إدخالات)، وتُحزم الأجزاء السفلى بالبتات. يعمل على نحو أفضل عندما تشترك قيم كثيرة في البتات العليا نفسها.

<Note>
  برنامج الترميز هذا تجريبي، ويتطلب استخدامه `SET allow_experimental_codecs = 1`.
</Note>

<div id="fpc">
  ### FPC
</div>

`FPC(level, float_size)` - يتنبأ مرارًا بقيمة الفاصلة العائمة التالية في التسلسل باستخدام الأدق من متنبئين، ثم يُجري عملية XOR بين القيمة الفعلية والقيمة المتنبأ بها، ويضغط النتيجة بحذف الأصفار البادئة. على غرار Gorilla، تكون هذه الطريقة فعالة عند تخزين سلسلة من قيم الفاصلة العائمة التي تتغير ببطء. بالنسبة إلى القيم ذات 64 بت (double)، يكون FPC أسرع من Gorilla، أما القيم ذات 32 بت فقد تختلف النتائج. قيم `level` الممكنة هي: 1-28، والقيمة الافتراضية هي 12. قيم `float_size` الممكنة هي: 4 و8، والقيمة الافتراضية هي `sizeof(type)` إذا كان النوع Float. وفي جميع الحالات الأخرى، تكون 4. للاطلاع على وصف تفصيلي للخوارزمية، راجع [High Throughput Compression of Double-Precision Floating-Point Data](https://userweb.cs.txstate.edu/~burtscher/papers/dcc07a.pdf).

<div id="sz3">
  ### SZ3
</div>

<ExperimentalBadge />

`SZ3` أو `SZ3(algorithm, error_bound_mode, error_bound)` — برنامج ترميز مع فقدان للبيانات ومقيّد بحدّ للخطأ ([SZ3 Lossy Compressor](https://szcompressor.org/)) للأعمدة من النوع Float32 أو Float64 أو Array(Float32) أو Array(Float64). بالنسبة إلى أعمدة المصفوفات، يكون الضغط أكثر فعالية عندما تكون جميع المصفوفات بالطول نفسه (إذ تُضغط حينها كمتجهات ثابتة العرض)؛ كما تُدعم المصفوفات ذات الأطوال المختلفة وتُضغط كتسلسل مسطّح من القيم. لا ينطبق برنامج الترميز على أعمدة Map، لأن مفاتيحها ستتلف بسبب الضغط مع فقدان للبيانات. القيم المدعومة للمعامل 'algorithm' هي `ALGO_LORENZO_REG` و`ALGO_INTERP_LORENZO` و`ALGO_INTERP`. والقيم المدعومة للمعامل 'error\_bound\_mode' هي `ABS` و`REL` و`PSNR` و`ABS_AND_REL`. الوسيط 'error\_bound' هو الحد الأقصى للخطأ، ونوعه Float64.

<Note>
  برنامج الترميز هذا تجريبي، ويتطلب استخدام `SET allow_experimental_codecs = 1`.
</Note>

<div id="t64">
  ### T64
</div>

`T64` — أسلوب ضغط يقتطع البتات العليا غير المستخدمة من القيم في أنواع البيانات الصحيحة (بما في ذلك `Enum` و`Date` و`DateTime`). في كل خطوة من خوارزميته، يأخذ برنامج الترميز كتلة تضم 64 قيمة، ويضعها في مصفوفة بتات بحجم 64x64، ثم ينقلها ويقتطع البتات غير المستخدمة من القيم ويُرجع الباقي كتسلسل. والبتات غير المستخدمة هي البتات التي لا تختلف بين القيمتين الصغرى والكبرى ضمن جزء البيانات الكامل الذي يُستخدم فيه الضغط.

يُستخدم برنامجا الترميز `DoubleDelta` و`Gorilla` في Gorilla TSDB كمكوّنين من خوارزمية الضغط الخاصة به. ويكون أسلوب Gorilla فعالًا عندما توجد سلسلة من القيم التي تتغير ببطء مع طوابعها الزمنية. تُضغط الطوابع الزمنية بكفاءة باستخدام برنامج الترميز `DoubleDelta`، وتُضغط القيم بكفاءة باستخدام برنامج الترميز `Gorilla`. على سبيل المثال، لإنشاء جدول يُخزَّن بكفاءة، يمكنك إنشاؤه بالتكوين التالي:

```sql theme={null}
CREATE TABLE codec_example
(
    timestamp DateTime CODEC(DoubleDelta),
    slow_values Float32 CODEC(Gorilla)
)
ENGINE = MergeTree()
```

<div id="quantized">
  ### التكميم
</div>

<ExperimentalBadge />

`Quantized(method, dimensions[, ...])` — برنامج ترميز متخصص لدعم البحث التقريبي عن المتجهات في أعمدة من النوع `Array(Float32)` أو `Array(Float64)` أو `Array(BFloat16)`.
يخزّن المتجهات الأصلية كاملة الدقة، إلى جانب *شيفرة مكمّاة* مضغوطة لكل متجه.
في جداول عائلة `MergeTree`، تفحص استعلامات البحث عن المتجهات التي تستخدم الإعداد [`vector_search_use_quantized_codes`](/docs/ar/reference/settings/session-settings/vector-search#vector_search_use_quantized_codes) الشيفرات المكمّاة لإنشاء قائمة مختصرة، ثم تعيد احتساب النتائج باستخدام المتجهات كاملة الدقة.
يقرأ هذا البحث المؤلف من مرحلتين بايتات أقل من فحص عادي كامل الدقة، لكن على حساب انخفاض الاستدعاء.
تمثل `dimensions` طول المتجه؛ وقيم `method` المدعومة هي `rabitq` و`turboquant` و`int8` و`prefix` و`product`، ويقدم كل منها مفاضلة مختلفة بين الحجم والدقة ودالة المسافة.

لا يمكن تعيين برنامج الترميز إلا في `CREATE TABLE`، ولا يمكن إضافته أو إزالته أو تغييره عبر `ALTER TABLE`، بما في ذلك باستخدام `ADD COLUMN ... CODEC(Quantized(...))`.
ولا يمكن ربطه بأي برنامج ترميز آخر، حتى برنامج ترميز التشفير مثل `AES_128_GCM_SIV`.
لمزيد من التفاصيل، راجع [البحث عن المتجهات باستخدام برامج الترميز المكمّاة](/docs/ar/reference/engines/table-engines/mergetree-family/annindexes#vector-search-with-quantized-codecs).

```sql theme={null}
SET allow_experimental_codecs = 1;

CREATE TABLE vectors
(
    id UInt32,
    vec Array(BFloat16) CODEC(Quantized('rabitq', 1536))
)
ENGINE = MergeTree ORDER BY id;
```

<div id="encryption-codecs">
  ## برامج ترميز التشفير
</div>

لا تضغط برامج الترميز هذه البيانات فعليًا، بل تشفّر البيانات المخزنة على القرص. لا تتوفر إلا عند تحديد مفتاح تشفير من خلال إعدادات [encryption](/docs/ar/reference/settings/server-settings/settings/other#encryption). لاحظ أن التشفير لا يكون منطقيًا إلا في نهاية مسارات برامج الترميز، إذ لا يمكن عادةً ضغط البيانات المشفّرة بطريقة فعّالة.

برامج ترميز التشفير:

<div id="aes_128_gcm_siv">
  ### AES\_128\_GCM\_SIV
</div>

`CODEC('AES-128-GCM-SIV')` — يشفّر البيانات باستخدام AES-128 في وضع GCM-SIV وفقًا لـ [RFC 8452](https://tools.ietf.org/html/rfc8452).

<div id="aes-256-gcm-siv">
  ### AES-256-GCM-SIV
</div>

`CODEC('AES-256-GCM-SIV')` — يشفّر البيانات باستخدام AES-256 بوضع GCM-SIV.

تستخدم برامج الترميز هذه قيمة nonce ثابتة، لذا يكون التشفير حتميًا. وهذا يجعلها متوافقة مع محركات إزالة التكرار مثل [ReplicatedMergeTree](/docs/ar/reference/engines/table-engines/mergetree-family/replication)، لكنها تنطوي على نقطة ضعف: فعند تشفير كتلة البيانات نفسها مرتين، يكون النص المشفّر الناتج متطابقًا تمامًا، مما يتيح لمهاجم قادر على قراءة القرص ملاحظة هذا التطابق (دون أن يتمكن من معرفة المحتوى).

<Note>
  تنشئ معظم المحركات، بما في ذلك عائلة "\*MergeTree"، ملفات فهرسة على القرص دون تطبيق برامج الترميز. وهذا يعني أن النص الصريح سيظهر على القرص إذا كان العمود المشفّر مفهرسًا.
</Note>

<Note>
  إذا أجريت استعلام SELECT يتضمن قيمة محددة في عمود مشفّر (مثلًا في عبارة WHERE)، فقد تظهر القيمة في [system.query\_log](/docs/ar/reference/system-tables/query_log). قد ترغب في تعطيل التسجيل.
</Note>

**مثال**

```sql theme={null}
CREATE TABLE mytable
(
    x String CODEC(AES_128_GCM_SIV)
)
ENGINE = MergeTree ORDER BY x;
```

<Note>
  إذا كان ينبغي تطبيق الضغط، فيجب تحديده صراحةً. وإلا، فلن يُطبَّق على البيانات سوى التشفير.
</Note>

**مثال**

```sql theme={null}
CREATE TABLE mytable
(
    x String CODEC(Delta, LZ4, AES_128_GCM_SIV)
)
ENGINE = MergeTree ORDER BY x;
```

<div id="adaptive-codec-selection">
  ## الاختيار التكيفي لبرنامج الترميز
</div>

<ExperimentalBadge />

يمكن لبرامج الترميز المتخصصة المذكورة أعلاه تقليص حجم البيانات المناسبة لها بدرجة كبيرة، لكن اختيارها يتطلب خبرة، ولا يوجد خيار واحد يناسب عمودًا تتغير بياناته بمرور الوقت. عند تمكين إعداد MergeTree ‏[`allow_experimental_adaptive_codec_selection`](/docs/ar/reference/settings/merge-tree-settings)، يتولى ClickHouse الاختيار نيابةً عنك. بالنسبة إلى الأعمدة التي تستخدم برنامج الترميز الافتراضي (`CODEC(Default)` أو لا تستخدم `CODEC` مطلقًا)، تُكتب كل كتلة ببرنامج الترميز الذي يحقق أصغر حجم ممكن بعد الضغط، ويُختار من بين برنامج الترميز الافتراضي للجدول و`NONE` وبرامج الترميز المتخصصة الملائمة لنوع العمود.

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

```sql theme={null}
CREATE TABLE adaptive
(
    time DateTime,
    user_id UInt64
)
ENGINE = MergeTree
ORDER BY time
SETTINGS allow_experimental_adaptive_codec_selection = 1;

INSERT INTO adaptive SELECT toDateTime('2026-01-01') + number, cityHash64(number) FROM numbers(1000000);
OPTIMIZE TABLE adaptive FINAL;
```

يمكنك الاطّلاع على كيفية عمل ذلك باستخدام دالة الجدول [`mergeTreeCodecBlockCounts`](/docs/ar/reference/functions/table-functions/mergeTreeCodecBlockCounts). هنا، تزداد قيمة `time` باطراد، لذا تفوّق `T64`، الذي لا يخزّن سوى البتات المتغيرة داخل الكتلة، على برنامج الترميز الافتراضي في كل كتلة. يحتوي `user_id` على قيم hash لا يستطيع أي برنامج ترميز تقليصها، لذا خُزّنت كُتله بصيغتها الخام:

```sql theme={null}
SELECT column, codec_block_counts FROM mergeTreeCodecBlockCounts(currentDatabase(), 'adaptive');
```

```text theme={null}
   ┌─column──┬─codec_block_counts─┐
1. │ time    │ {'T64':62}         │
2. │ user_id │ {'NONE':123}       │
   └─────────┴────────────────────┘
```

يشمل الاختيار حاليًا الأعمدة ذات القيم الشبيهة بالأعداد الصحيحة: الأعداد الصحيحة، والتعدادات، والتواريخ والأوقات، و`Decimal32`/`Decimal64`، و`IPv4`.

<div id="related-content">
  ## محتوى ذو صلة
</div>

* مدونة: [تحسين ClickHouse باستخدام المخططات وبرامج الترميز](https://clickhouse.com/blog/optimize-clickhouse-codecs-compression-schema)
* مدونة: [العمل مع بيانات السلاسل الزمنية في ClickHouse](https://clickhouse.com/blog/working-with-time-series-data-and-functions-ClickHouse)
