الانتقال إلى المحتوى الرئيسي

أنواع تخطيط القاموس

توجد عدة طرق لتخزين القواميس في الذاكرة، ولكل منها مفاضلات بين استخدام CPU وRAM.
التخطيطالوصف
flatيخزّن البيانات في مصفوفات مسطّحة مفهرسة حسب المفتاح. وهو أسرع تخطيط، لكن يجب أن تكون المفاتيح من النوع UInt64 وأن تكون محدودة بالقيمة max_array_size.
hashedيخزّن البيانات في جدول hash. لا يوجد حد لحجم المفتاح، ويدعم أي عدد من العناصر.
sparse_hashedيشبه hashed، لكنه يضحّي ببعض CPU مقابل تقليل استخدام الذاكرة.
complex_key_hashedيشبه hashed، للمفاتيح المركبة.
complex_key_sparse_hashedيشبه sparse_hashed، للمفاتيح المركبة.
hashed_arrayتُخزَّن السمات في مصفوفات مع جدول hash يربط المفاتيح بفهارس المصفوفات. وهو فعّال من حيث الذاكرة عند وجود عدد كبير من السمات.
complex_key_hashed_arrayيشبه hashed_array، للمفاتيح المركبة.
range_hashedجدول hash مع ranges مرتبة. يدعم عمليات lookup حسب المفتاح + نطاق التاريخ/الوقت.
complex_key_range_hashedيشبه range_hashed، للمفاتيح المركبة.
cachecache ثابتة الحجم داخل الذاكرة. لا تُخزَّن إلا المفاتيح التي يكثر الوصول إليها.
complex_key_cacheيشبه cache، للمفاتيح المركبة.
ssd_cacheيشبه cache، لكنه يخزّن البيانات على SSD مع index داخل الذاكرة.
complex_key_ssd_cacheيشبه ssd_cache، للمفاتيح المركبة.
directلا يستخدم تخزينًا داخل الذاكرة — بل يستعلم المصدر مباشرةً لكل طلب.
complex_key_directيشبه direct، للمفاتيح المركبة.
ip_trieبنية trie لإجراء عمليات lookup سريعة على بادئات IP (المعتمدة على CIDR).
التخطيطات الموصى بهايوفّر flat وhashed وcomplex_key_hashed أفضل أداء للاستعلامات. لا يُنصح بتخطيطات التخزين المؤقت بسبب احتمال ضعف الأداء وصعوبة ضبط المَعلمات — راجع cache للتفاصيل.

تحديد تخطيط القاموس

إذا كنت تستخدم قاموسًا مع ClickHouse Cloud، فيُرجى استخدام خيار DDL query لإنشاء قواميسك، وإنشاء قاموسك كمستخدم default. تحقّق أيضًا من قائمة مصادر القواميس المدعومة في دليل التوافق مع Cloud.
يمكنك ضبط تخطيط القاموس باستخدام العبارة LAYOUT ‏(في DDL) أو الإعداد layout في تعريفات ملف التهيئة.
CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- إعدادات التخطيط
...

انظر أيضًا إلى CREATE DICTIONARY للاطّلاع على بنية DDL الكاملة. القواميس التي لا يتضمن تخطيطها الكلمة complex-key* يكون مفتاحها من النوع UInt64، أما قواميس complex-key* فلها مفتاح مركب (معقّد، وبأنواع مختلفة). مثال على مفتاح رقمي (العمود key_column من النوع UInt64):
CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

مثال على مفتاح مركب (يحتوي المفتاح على عنصر واحد من النوع String):
CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

تحسين أداء القاموس

هناك عدة طرق لتحسين أداء القاموس:
  • استدعِ الدالة المستخدمة للعمل مع القاموس بعد GROUP BY.
  • علِّم السمات المراد استخراجها بأنها injective. تُعدّ السمة injective إذا كانت المفاتيح المختلفة تقابلها قيم سمات مختلفة. لذلك، عندما يستخدم GROUP BY دالةً تجلب قيمة سمة باستخدام المفتاح، تُستبعد هذه الدالة تلقائيًا من GROUP BY.
ينشئ ClickHouse استثناءً عند حدوث أخطاء في القواميس. ومن أمثلة هذه الأخطاء:
  • تعذّر تحميل القاموس الجاري الوصول إليه.
  • حدث خطأ أثناء تنفيذ استعلام على قاموس cached.
يمكنك عرض قائمة القواميس وحالاتها في جدول system.dictionaries.
آخر تعديل في ٢٥ يونيو ٢٠٢٦