لمعرفة سبب كفاءة ClickHouse العالية في ضغط البيانات، نوصي بقراءة هذه المقالة. باختصار، تكتب قاعدة البيانات العمودية لدينا القيم بحسب الأعمدة. وعندما تكون هذه القيم مرتبة، تتموضع القيم المتطابقة بجوار بعضها، فتستفيد خوارزميات الضغط من الأنماط المتجاورة في البيانات. وإضافةً إلى ذلك، يوفّر ClickHouse مرمّزات وأنواع بيانات دقيقة تتيح لك تحسين الضغط بسهولة وبدرجة أكبر.يتأثر الضغط في ClickHouse بثلاثة عوامل أساسية:
- مفتاح الترتيب
- أنواع البيانات
- المرمّزات المستخدمة
اختر نوع البيانات المناسب لتحسين الضغط
posts:
posts- مخطط غير مُحسَّن من حيث أنواع البيانات، ولا يحتوي على مفتاح ترتيب.posts_v3- مخطط مُحسَّن من حيث أنواع البيانات، مع النوع المناسب وحجم البت المناسب لكل عمود، وبمفتاح ترتيب(PostTypeId, toDate(CreationDate), CommentCount).
posts من دون مفتاح ترتيب.
ملاحظة حول الأجزاء compact مقابل wide
ملاحظة حول الأجزاء compact مقابل wide
إذا كنت ترى أن قيم
compressed_size أو uncompressed_size تساوي 0، فقد يرجع ذلك إلى أن نوع
الأجزاء هو compact وليس wide (راجع الوصف الخاص بـ part_type في system.parts).
يتحكم الإعدادان min_bytes_for_wide_part
وmin_rows_for_wide_part في تنسيق الجزء؛
وهذا يعني أنه إذا نتج عن البيانات المُدرجة جزء لا يتجاوز قيم الإعدادات المذكورة أعلاه، فسيكون الجزء compact بدلًا
من wide، ولن تظهر لك قيم compressed_size أو uncompressed_size.للتوضيح:استعلام
الاستجابة
يعتمد الاستعلام أعلاه على table columns في system database. تُدار هذه database بواسطة ClickHouse، وهي كنز من المعلومات المفيدة، بدءًا من metrics الخاصة بـ query performance وصولًا إلى logs الخلفية الخاصة بـ cluster. نوصي بقراءة “System Tables and a Window into the Internals of ClickHouse” والمقالات المصاحبة[1][2] للقارئ المهتم.
لتلخيص الحجم الإجمالي للـ table، يمكننا تبسيط الاستعلام أعلاه:
posts_v3، وهو الجدول الذي يستخدم نوع بيانات ومفتاح ترتيب مُحسَّنين، يمكننا ملاحظة انخفاض كبير في الأحجام غير المضغوطة والمضغوطة.
Body وTitle وTags وCreationDate، وقد تحققت هذه الوفورات من خلال ترتيب البيانات قبل الضغط واستخدام الأنواع المناسبة.
اختيار مرمّز ضغط الأعمدة المناسب
اطّلع على هذا الرابط لمزيد من الخيارات.
فيما يلي نحدّد مرمّز
Delta لكل من Id وViewCount وAnswerCount، على افتراض أن هذه الحقول ستكون مترابطة خطيًا مع مفتاح الترتيب، وبالتالي ينبغي أن تستفيد من ترميز Delta.
الضغط في ClickHouse Cloud
ZSTD (بقيمة افتراضية تبلغ 1) بشكل افتراضي. ورغم أن سرعات الضغط قد تختلف لهذه الخوارزمية بحسب مستوى الضغط (كلما ارتفع المستوى زادت البطء)، فإن ميزتها أنها تظل سريعة باستمرار عند فك الضغط (بتفاوت يقارب 20%)، كما أنها تستفيد أيضًا من إمكانية تنفيذها بالتوازي. وتشير اختباراتنا السابقة أيضًا إلى أن هذه الخوارزمية تكون فعّالة بما يكفي في كثير من الحالات، بل وقد تتفوّق حتى على LZ4 عند استخدامه مع مرمّز. وهي فعّالة مع معظم أنواع البيانات وتوزيعات المعلومات، لذا تُعد خيارًا افتراضيًا مناسبًا للأغراض العامة، وهذا يفسّر لماذا يكون الضغط الأولي لدينا ممتازًا بالفعل حتى من دون تحسين.