LIFETIME (المُحدَّد بالثواني).
يمثّل LIFETIME فترة التحديث للقواميس التي جرى تنزيلها بالكامل، وفترة الإبطال للقواميس المخزَّنة مؤقتًا.
أثناء التحديث، يظل بالإمكان الاستعلام عن الإصدار القديم من القاموس.
لا تحجب تحديثات القاموس الاستعلامات، إلا عند تحميله لأول مرة.
إذا حدث خطأ أثناء التحديث، فسيُسجَّل الخطأ في سجل الخادم، ويمكن أن تواصل الاستعلامات استخدام الإصدار القديم من القاموس.
إذا نجح تحديث القاموس، فسيُستبدل الإصدار القديم من القاموس بصورة ذرّية.
مثال على الإعدادات:
<lifetime>0</lifetime> (LIFETIME(0)) إلى منع القواميس من التحديث.
يمكنك تعيين فاصل زمني للتحديثات، وسيختار ClickHouse وقتًا عشوائيًا بتوزيع منتظم ضمن هذا النطاق. وهذا ضروري لتوزيع الحمل على مصدر القاموس عند التحديث عبر عدد كبير من الخوادم.
مثال على الإعدادات:
<min>0</min> و<max>0</max>، فلن يعيد ClickHouse تحميل القاموس بناءً على المهلة الزمنية.
في هذه الحالة، يمكن لـ ClickHouse إعادة تحميل القاموس في وقت أبكر إذا تغيّر ملف إعدادات القاموس أو إذا نُفِّذ الأمر SYSTEM RELOAD DICTIONARY.
عند تحديث القواميس، يطبّق خادم ClickHouse منطقًا مختلفًا بحسب نوع المصدر:
- بالنسبة إلى ملف نصي، يتحقق من وقت التعديل. وإذا كان الوقت مختلفًا عن الوقت المسجّل سابقًا، يُحدَّث القاموس.
- تُحدَّث القواميس من المصادر الأخرى افتراضيًا في كل مرة.
- يجب أن يحتوي جدول القاموس على حقل يتغيّر دائمًا عند تحديث بيانات المصدر.
- يجب أن تتضمن إعدادات المصدر استعلامًا يسترجع الحقل المتغيّر. يفسّر خادم ClickHouse نتيجة الاستعلام على أنها صف، وإذا كان هذا الصف قد تغيّر مقارنةً بحالته السابقة، يُحدَّث القاموس. حدّد الاستعلام في الحقل
<invalidate_query>ضمن إعدادات المصدر.
Cache وComplexKeyCache وSSDCache وSSDComplexKeyCache، فإن التحديثات المتزامنة وغير المتزامنة كلتيهما مدعومتان.
ومن الممكن أيضًا أن تقتصر قواميس Flat وHashed وHashedArray وComplexKeyHashed على طلب البيانات التي تغيّرت بعد التحديث السابق فقط. إذا جرى تحديد update_field كجزء من إعداد مصدر القاموس، فستُضاف إلى طلب البيانات قيمة وقت التحديث السابق بالثواني. واستنادًا إلى نوع المصدر (Executable أو HTTP أو MySQL أو PostgreSQL أو ClickHouse أو ODBC)، سيُطبَّق منطق مختلف على update_field قبل طلب البيانات من مصدر خارجي.
- إذا كان المصدر هو HTTP، فستُضاف
update_fieldكـ query parameter، وتكون قيمة المعلمة هي وقت آخر تحديث. - إذا كان المصدر هو Executable، فستُضاف
update_fieldكوسيطة لبرنامج نصي تنفيذي، وتكون قيمة الوسيطة هي وقت آخر تحديث. - إذا كان المصدر هو ClickHouse أو MySQL أو PostgreSQL أو ODBC، فسيُضاف جزء إضافي إلى
WHERE، بحيث تُقارَنupdate_fieldبوقت آخر تحديث على أنها أكبر منه أو مساوية له.- افتراضيًا، يُفحَص شرط
WHEREهذا عند أعلى مستوى في SQL-Query. وبدلًا من ذلك، يمكن فحص الشرط داخل أيWHERE-clause أخرى في الاستعلام باستخدام{condition}-keyword. مثال:
- افتراضيًا، يُفحَص شرط
update_field، فيمكن أيضًا تعيين الخيار الإضافي update_lag. وتُطرَح قيمة الخيار update_lag من وقت التحديث السابق قبل طلب البيانات المُحدَّثة.
مثال على الإعدادات: