عند استخدام محرك جدول Memory على ClickHouse Cloud، لا تُنسخ البيانات عبر جميع العقد (بحكم التصميم). ولضمان توجيه جميع الاستعلامات إلى العقدة نفسها وأن يعمل محرك جدول Memory كما هو متوقع، يمكنك القيام بأحد الإجراءات التالية:
- تنفيذ جميع العمليات ضمن الجلسة نفسها
- استخدام عميل يعتمد TCP أو الواجهة الأصلية (مما يوفّر دعم الاتصالات الثابتة)، مثل clickhouse-client
PREWHERE، بما في ذلك النقل التلقائي لشروط WHERE الذي يتحكم فيه الإعداد optimize_move_to_prewhere: إذ تُقرأ أعمدة الشروط وحدها في البداية، ثم لا تُقرأ الأعمدة المتبقية إلا للكتل التي تجتاز فيها بعض الصفوف الشرط، وللصفوف المجتازة وحدها. ويُقيَّم اقتران الشروط على مراحل، كما هو الحال في MergeTree مع الإعداد enable_multiple_prewhere_read_steps: إذ لا تُقرأ أعمدة كل شرط تالٍ إلا للصفوف التي اجتازت الشروط السابقة. ويكون ذلك مفيدًا بشكل خاص مع compress = true، إذ لا يُفك ضغط معظم الأعمدة أبدًا عند استخدام شرط انتقائي. أما الاستعلام SELECT count() FROM table الخالي من عامل تصفية، فتُستخرج نتيجته مباشرةً من البيانات الوصفية دون قراءة البيانات.
تتحقق أعلى إنتاجية (أكثر من 10 GB/sec) في الاستعلامات البسيطة، لأنه لا توجد قراءة من القرص، ولا فك ضغط، ولا إلغاء تسلسل للبيانات. (ويجدر بالذكر أن إنتاجية محرك MergeTree تكون في كثير من الحالات مرتفعة بالقدر نفسه تقريبًا.)
عند إعادة تشغيل الخادم، تختفي البيانات من الجدول ويصبح الجدول فارغًا.
وعادةً لا يكون استخدام محرك الجدول هذا مبررًا. ومع ذلك، يمكن استخدامه للاختبارات، وللمهام التي تتطلب أقصى سرعة مع عدد صغير نسبيًا من الصفوف (حتى نحو 100,000,000 تقريبًا).
يستخدم النظام محرك Memory للجداول المؤقتة التي تحتوي على بيانات استعلام خارجية (انظر قسم “البيانات الخارجية لمعالجة استعلام”)، وكذلك لتنفيذ GLOBAL IN (انظر قسم “معاملات IN”).
يمكن تحديد حدود دنيا وعليا لتقييد حجم جدول محرك Memory، مما يتيح له فعليًا أن يعمل كمخزن مؤقت دائري (انظر معلمات المحرك).
معلمات المحرك
min_bytes_to_keep— الحد الأدنى من البايتات التي يجب الاحتفاظ بها عندما يكون جدول الذاكرة محدود الحجم.- القيمة الافتراضية:
0 - يتطلب
max_bytes_to_keep
- القيمة الافتراضية:
max_bytes_to_keep— الحد الأقصى من البايتات التي يجب الاحتفاظ بها في جدول الذاكرة، حيث تُحذف أقدم الصفوف عند كل إدراج (أي مخزن مؤقت دائري). قد يتجاوز الحد الأقصى للبايتات الحد المحدد إذا كانت أقدم دفعة من الصفوف المطلوب حذفها ستنخفض عن حدmin_bytes_to_keepعند إضافة كتلة كبيرة.- القيمة الافتراضية:
0
- القيمة الافتراضية:
min_rows_to_keep— الحد الأدنى من الصفوف التي يجب الاحتفاظ بها عندما يكون جدول الذاكرة محدود الحجم.- القيمة الافتراضية:
0 - يتطلب
max_rows_to_keep
- القيمة الافتراضية:
max_rows_to_keep— الحد الأقصى من الصفوف التي يجب الاحتفاظ بها في جدول الذاكرة، حيث تُحذف أقدم الصفوف عند كل إدراج (أي مخزن مؤقت دائري). قد يتجاوز الحد الأقصى للصفوف الحد المحدد إذا كانت أقدم دفعة من الصفوف المطلوب حذفها ستنخفض عن حدmin_rows_to_keepعند إضافة كتلة كبيرة.- القيمة الافتراضية:
0
- القيمة الافتراضية:
compress- ما إذا كانت البيانات تُضغط في الذاكرة.- القيمة الافتراضية:
false
- القيمة الافتراضية:
الاستخدام
ضبط الإعداداتbytes وrows في الوقت نفسه، ومع ذلك سيُلتزم بالحدود الدنيا لـ max وmin.