ملاحظات
-
المصفوفات: في Elasticsearch، تدعم جميع الحقول المصفوفات دعمًا أصيلًا. أما في ClickHouse، فيجب تعريف المصفوفات صراحةً (مثل
Array(String))، مع ميزة إمكانية الوصول إلى مواضع محددة فيها والاستعلام عنها، مثلan_array[1]. -
الحقول المتعددة: يتيح Elasticsearch فهرسة الحقل نفسه بطرائق متعددة (مثل
textوkeywordمعًا). أما في ClickHouse، فيجب تمثيل هذا النمط باستخدام أعمدة أو views منفصلة. -
نوعا Map وJSON - في ClickHouse، يُستخدم النوع
Mapعادةً لتمثيل بنى key-value الديناميكية مثلresourceAttributesوlogAttributes. ويتيح هذا النوع إدخال البيانات بمرونة ومن دون مخطط ثابت، إذ يسمح بإضافة مفاتيح عشوائية في وقت التشغيل — وهو ما يشبه من حيث الفكرة JSON objects في Elasticsearch. ومع ذلك، هناك قيود مهمة ينبغي مراعاتها:- أنواع قيم موحّدة: يجب أن تحتوي أعمدة
Mapفي ClickHouse على نوع قيم متّسق (مثلMap(String, String)). ولا تُدعَم القيم ذات الأنواع المختلطة من دون تحويل قسري. - تكلفة على الأداء: يتطلب الوصول إلى أي مفتاح في
Mapتحميل الخريطة بالكامل إلى الذاكرة، وهو ما قد يكون غير مثالي من ناحية الأداء. - عدم وجود subcolumns: بخلاف JSON، لا تُمثَّل المفاتيح في
Mapبوصفها subcolumns فعلية، مما يحدّ من قدرة ClickHouse على الفهرسة والضغط والاستعلام بكفاءة.
Mapلصالح النوعJSONالمحسّن في ClickHouse. ويعالج النوعJSONالعديد من أوجه القصور فيMap:- تخزين عمودي حقيقي: يُخزَّن كل JSON path بوصفه subcolumn، مما يتيح ضغطًا وترشيحًا وتنفيذًا متجهيًا للاستعلامات بكفاءة.
- دعم الأنواع المختلطة: يمكن لأنواع البيانات المختلفة (مثل الأعداد الصحيحة والسلاسل النصية والمصفوفات) أن تتعايش تحت المسار نفسه من دون تحويل قسري أو توحيد للنوع.
-
قابلية التوسع على مستوى نظام الملفات: تمنع الحدود الداخلية للمفاتيح الديناميكية (
max_dynamic_paths) والأنواع (max_dynamic_types) حدوث تضخم في عدد column files على القرص، حتى مع مجموعات المفاتيح ذات high cardinality. -
تخزين كثيف: تُخزَّن nulls والقيم المفقودة بشكل sparse لتجنّب overhead غير الضروري.
يُعد النوع
JSONمناسبًا بشكل خاص لأعباء observability، إذ يوفّر مرونة الإدخال من دون مخطط ثابت، إلى جانب أداء أنواع ClickHouse الأصلية وقابليتها للتوسع — مما يجعله بديلًا مثاليًا لـMapفي حقول attributes الديناميكية. ولمزيد من التفاصيل حول نوع JSON، نوصي بالاطلاع على JSON guide و”How we built a new powerful JSON data type for ClickHouse”.
- أنواع قيم موحّدة: يجب أن تحتوي أعمدة