Skip to main content

القواميس في ClickHouse

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

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

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