ينتمي هذا المحّرك إلى عائلة محرّكات Log. اطّلع على الخصائص المشتركة لمحرّكات Log والفروق بينها في مقال عائلة محركات Log.
يختلف Log عن TinyLog في وجود ملف صغير من “العلامات” إلى جانب ملفات الأعمدة. وتُكتب هذه العلامات مع كل كتلة بيانات، وتحتوي على إزاحات تشير إلى موضع بدء قراءة الملف لتخطي العدد المحدد من الصفوف. وهذا يتيح قراءة بيانات الجدول باستخدام عدة خيوط تنفيذ.
وعند الوصول المتزامن إلى البيانات، يمكن تنفيذ عمليات القراءة في الوقت نفسه، بينما تحجب عمليات الكتابة عمليات القراءة وتحجب بعضها بعضًا.
لا يدعم المحرّك Log الفهارس. كذلك، إذا فشلت الكتابة إلى جدول، يصبح الجدول تالفًا، وتؤدي القراءة منه إلى إرجاع خطأ. ويُعد المحرّك Log مناسبًا للبيانات المؤقتة، والجداول التي تُكتب مرة واحدة، وأغراض الاختبار أو العرض التوضيحي.
راجع الوصف التفصيلي لاستعلام CREATE TABLE.
يخزّن محرك Log البيانات بكفاءة عبر كتابة كل عمود في ملفه الخاص. ولكل جدول، يكتب محرك Log الملفات التالية إلى مسار التخزين المحدد:
<column>.bin: ملف بيانات لكل عمود، ويحتوي على البيانات المُسلسلة والمضغوطة.
__marks.mrk: ملف علامات يخزّن الإزاحات وأعداد الصفوف لكل كتلة بيانات مُدرجة. وتُستخدم هذه العلامات لتسهيل تنفيذ الاستعلامات بكفاءة، إذ تُمكّن المحرك من تخطي كتل البيانات غير ذات الصلة أثناء القراءة.
عند كتابة البيانات إلى جدول Log:
- تُسلسَل البيانات وتُضغط على شكل كتل.
- لكل عمود، تُلحَق البيانات المضغوطة بملف
<column>.bin المقابل له.
- تُضاف الإدخالات المقابلة إلى ملف
__marks.mrk لتسجيل الإزاحة وعدد صفوف البيانات المُضافة حديثًا.
يتيح ملف العلامات لـ ClickHouse قراءة البيانات على التوازي. وهذا يعني أن استعلام SELECT يعيد الصفوف بترتيب غير متوقع. استخدم الجملة ORDER BY لفرز الصفوف.
إنشاء جدول:
إدراج البيانات:
استخدمنا استعلامَي INSERT لإنشاء كتلتَي بيانات داخل ملفات <column>.bin.
يستخدم ClickHouse عدة خيوط تنفيذ عند تنفيذ عمليات SELECT على البيانات. يقرأ كل خيط تنفيذ كتلة بيانات منفصلة ويُرجع الصفوف الناتجة بشكل مستقل فور انتهائه. لذلك، قد لا يتطابق ترتيب كتل الصفوف في الناتج مع ترتيب الكتل نفسها في الإدخال. على سبيل المثال:
فرز النتائج (تصاعديًا افتراضيًا):
آخر تعديل في ٣ يوليو ٢٠٢٦