طبقة التخزين: عمليات الإدراج المتزامنة معزولة عن بعضها بعضًا
طبقة التخزين: عمليات الإدراج وعمليات SELECT المتزامنة معزولة عن بعضها
طبقة التخزين: الحوسبة أثناء الدمج
- عمليات الدمج الاستبدالية التي تحتفظ فقط بأحدث إصدار من الصف ضمن أجزاء الإدخال، وتتخلص من جميع إصدارات الصف الأخرى. ويمكن اعتبار عمليات الدمج الاستبدالية عملية تنظيف تُنفَّذ وقت الدمج.
- عمليات الدمج التجميعية التي تدمج حالات التجميع الوسيطة في جزء الإدخال لتكوين حالة تجميع جديدة. ورغم أن ذلك قد يبدو معقدًا، فهو في الواقع ليس سوى تجميع تزايدي.
- عمليات دمج TTL (time-to-live) التي تضغط الصفوف أو تنقلها أو تحذفها استنادًا إلى قواعد زمنية محددة.
طبقة التخزين: استبعاد البيانات
- فهارس المفتاح الأساسي التي تحدد ترتيب فرز بيانات الجدول. ويتيح اختيار مفتاح أساسي مناسب تقييم عوامل التصفية (مثل عبارات WHERE في الاستعلام أعلاه) باستخدام عمليات بحث ثنائي سريعة بدلًا من إجراء مسح كامل للأعمدة. وبصياغة أكثر تقنية، يصبح زمن تنفيذ عمليات المسح لوغاريتميًا بدلًا من أن يكون خطيًا مع حجم البيانات.
- إسقاطات الجدول بوصفها نُسخًا داخلية بديلة من الجدول، تخزّن البيانات نفسها ولكن مرتبة وفق مفتاح أساسي مختلف. ويمكن أن تكون الإسقاطات مفيدة عندما يوجد أكثر من شرط تصفية متكرر.
- فهارس التخطي التي تُضمّن إحصاءات إضافية عن البيانات داخل الأعمدة، مثل الحد الأدنى والحد الأقصى لقيمة العمود، ومجموعة القيم الفريدة، وما إلى ذلك. وتُعد فهارس التخطي مستقلة عن المفاتيح الأساسية وإسقاطات الجداول، ويمكنها، بحسب توزيع البيانات في العمود، أن تسرّع تقييم عوامل التصفية بدرجة كبيرة.
طبقة التخزين: ضغط البيانات
طبقة معالجة الاستعلامات الأحدث
عناية فائقة بالتفاصيل
“ClickHouse نظام فريد بحق — لديكم 20 نسخة من جدول تجزئة. لديكم كل هذه الأشياء المذهلة، بينما تكتفي معظم الأنظمة بجدول تجزئة واحد … ويحقق ClickHouse هذا الأداء المذهل لأنه يضم كل هذه المكوّنات المتخصصة” Andy Pavlo, Database Professor at CMUما يميّز ClickHouse عن غيره هو عنايته الفائقة بالتحسينات منخفضة المستوى. فبناء قاعدة بيانات تعمل فحسب شيء، لكن تصميمها هندسيًا لتقدّم السرعة عبر أنواع الاستعلامات المختلفة، وبُنى البيانات، والتوزيعات، وتهيئات الفهارس المتنوعة، هو المجال الذي تتجلّى فيه براعة “النظام الفريد”. جداول التجزئة. لنأخذ جدول التجزئة مثالًا. فجداول التجزئة من بُنى البيانات الأساسية التي تُستخدم في عمليات الربط والتجميع. وبصفتك مبرمجًا، عليك مراعاة قرارات التصميم التالية:
- دالة التجزئة التي ستختارها،
- معالجة التصادم: العنونة المفتوحة أم السلاسل المنفصلة،
- تخطيط الذاكرة: هل تُستخدم مصفوفة واحدة للمفاتيح والقيم أم مصفوفات منفصلة؟
- عامل الامتلاء: متى وكيف تتم إعادة التحجيم؟ وكيف تُنقل القيم أثناء ذلك؟
- الحذف: هل ينبغي أن يسمح جدول التجزئة بإزالة الإدخالات؟
- ما الذي سيُفرز: أرقام أم tuples أم strings أم بُنى؟
- هل البيانات موجودة في RAM؟
- هل يجب أن يكون الفرز مستقراً؟
- هل ينبغي فرز جميع البيانات أم يكفي فرز جزئي؟