الانتقال إلى المحتوى الرئيسي

القواميس في ClickHouse

قد تشهد القواميس التي أُنشئت في ClickHouse Cloud بعض عدم الاتساق خلال المرحلة الأولية من الإنشاء. وهذا يعني أنك قد لا ترى أي بيانات في القاموس فور إنشائه. لكن بعد عدة إعادات للمحاولة، قد يصل استعلام الإنشاء إلى نُسخ متماثلة مختلفة، وعندها ستصبح البيانات مرئية. يحدث هذا أحيانًا لأن القاموس أُنشئ قبل وصول الجزء إلى الخادم. على سبيل المثال:
كما ترى، لم يصل هذا الجزء إلا بعد إنشاء القاموس. وقد تصبح هذه المشكلة أكبر إذا كنت تستخدم LIFETIME(MIN 0 MAX 0)، لأن هذا يعني أن القاموس لن يُحدَّث تلقائيًا أبدًا. لذلك، سيظل القاموس فارغًا إلى أن يُنفَّذ الأمر RELOAD DICTIONARIES. يكمن حل هذه المشكلة في استخدام استعلام SELECT بدلًا من تحديد جدول مصدر عند إنشاء القاموس، مع تفعيل الإعداد select_sequential_consistency=1. بدلًا من تحديد جدول مصدر:
استخدم استعلام SELECT مع select_sequential_consistency=1:

لماذا تحدث هذه المشكلة؟

عندما تُدرِج بيانات ثم تُنشئ قاموسًا أو تعيد تحميله، قد تصل عبارة DDL إلى نسخة متماثلة قبل أن تصلها البيانات (أو البيانات الجديدة). ويؤدي ذلك إلى عدم اتساق القواميس بين النسخ المتماثلة. بعد ذلك، وبحسب النسخة المتماثلة التي تستقبل الاستعلام، قد تحصل على نتائج مختلفة. لاحظ أن الأمر نفسه يحدث عندما تُدرِج بيانات ثم تقرأ مباشرةً من table. فإذا قرأت من نسخة متماثلة لم تُكرِّر البيانات بعد، فلن ترى البيانات المُدرَجة حديثًا. وعندما تحتاج إلى sequential consistency، مقابل تكلفة على الأداء (ولهذا لا يُنصح عمومًا باستخدامها)، يمكنك تفعيل select_sequential_consistency. أما في حالة القواميس، فالأمر أكثر تعقيدًا قليلًا، لأن القواميس لا تستخدم إعدادات الاستعلام، بل إعدادات server. ونتيجةً لذلك، عند تحميل البيانات إلى القاموس، حتى إذا استخدمت SET select_sequential_consistency=1 فقد تُحمَّل البيانات بشكل غير متسق عبر النسخ المتماثلة. ويتيح تحديد select_sequential_consistency=1 في استعلام مصدر القاموس أن يلتزم القاموس بهذا الإعداد حتى إن لم يكن مفعّلًا على مستوى server setting بشكل عام.
آخر تعديل في ٢ يوليو ٢٠٢٦