نظرة عامة على TTL
- إزالة البيانات القديمة: لا مفاجأة هنا، إذ يمكنك حذف الصفوف أو الأعمدة بعد مدة زمنية محددة
- نقل البيانات بين الأقراص: بعد مرور فترة معيّنة، يمكنك نقل البيانات بين وحدات التخزين، وهو ما يفيد في نشر معمارية hot/warm/cold
- تلخيص البيانات: يمكنك تلخيص بياناتك الأقدم في تجميعات وعمليات احتساب مفيدة متنوعة قبل حذفها
يمكن تطبيق TTL على جداول كاملة أو على أعمدة محددة.
بنية TTL
TTL بعد تعريف عمود و/أو في نهاية تعريف الجدول. استخدم عبارة INTERVAL لتحديد فترة زمنية (ويجب أن تكون من نوع البيانات Date أو DateTime). على سبيل المثال، يحتوي الجدول التالي على عمودين
مع عبارتي TTL:
- يحتوي العمود x على مدة بقاء قدرها شهر واحد بدءًا من عمود الطابع الزمني
- يحتوي العمود y على مدة بقاء قدرها يوم واحد بدءًا من عمود الطابع الزمني
- عند انقضاء الفاصل الزمني، تنتهي صلاحية العمود. يستبدل ClickHouse قيمة العمود بالقيمة الافتراضية لنوع بياناته. وإذا انتهت صلاحية جميع قيم العمود في جزء البيانات، يحذف ClickHouse هذا العمود من جزء البيانات في نظام الملفات.
يمكن تعديل قواعد TTL أو حذفها. راجع صفحة إجراءات TTL للجدول لمزيد من التفاصيل.
تشغيل أحداث TTL
merge_with_ttl_timeout: الحد الأدنى للتأخير بالثواني قبل تكرار عملية دمج مع TTL للحذف. القيمة الافتراضية هي 14400 ثانية (4 ساعات).merge_with_recompression_ttl_timeout: الحد الأدنى للتأخير بالثواني قبل تكرار عملية دمج مع TTL لإعادة الضغط (القواعد التي تُجمّع البيانات قبل حذفها). القيمة الافتراضية: 14400 ثانية (4 ساعات).
ليس هذا حلًا مثاليًا (ولا نوصي باستخدامه كثيرًا)، ولكن يمكنك أيضًا فرض عملية دمج باستخدام يبدأ
OPTIMIZE:OPTIMIZE عملية دمج غير مجدولة لأجزاء جدولك، بينما يفرض FINAL إعادة التحسين إذا كان جدولك يتكوّن بالفعل من جزء واحد.إزالة الصفوف
إزالة الأعمدة
customers ونضيف قيمة TTL لكلا العمودين لمدة ساعتين:
تنفيذ عملية تلخيص
GROUP BY إلى تعبير TTL، إلى جانب بعض الأعمدة في جدولك لتخزين النتائج المجمّعة.
لنفترض أننا نريد، في جدول hits التالي، حذف الصفوف القديمة مع الاحتفاظ بمجموع القيم والقيمة العظمى لأعمدة hits قبل إزالة الصفوف. سنحتاج إلى حقل لتخزين هذه القيم، كما سنحتاج إلى إضافة عبارة GROUP BY إلى عبارة TTL لتنفيذ تلخيص للمجموع والقيمة العظمى:
hits:
- يجب أن تكون الأعمدة في عبارة
GROUP BYضمن عبارةTTLبادئة لـPRIMARY KEY، ونريد تجميع نتائجنا حسب بداية اليوم. لذلك أُضيفتtoStartOfDay(timestamp)إلى المفتاح الأساسي - أضفنا حقلين لتخزين النتائج المجمّعة:
max_hitsوsum_hits - إن تعيين القيمة الافتراضية لـ
max_hitsوsum_hitsإلىhitsضروري لعمل هذا المنطق، استنادًا إلى كيفية تعريف عبارةSET
تنفيذ معمارية hot/warm/cold
إذا كنت تستخدم ClickHouse Cloud، فلن تنطبق الخطوات الواردة في هذا الدرس. ولا داعي للقلق بشأن نقل البيانات القديمة داخل ClickHouse Cloud.
TO DISK وTO VOLUME في الأمر TTL. (وبالمناسبة، لا يقتصر الأمر على hot وcold فقط — إذ يمكنك استخدام TTL لنقل البيانات وفقًا لأي حالة استخدام لديك.)
- يشير الخياران
TO DISKوTO VOLUMEإلى أسماء الأقراص أو وحدات التخزين المعرّفة في ملفات تكوين ClickHouse. أنشئ ملفًا جديدًا باسمmy_system.xml(أو بأي اسم ملف آخر) لتعريف الأقراص، ثم عرّف وحدات تخزين تستخدم هذه الأقراص. ضع ملف XML في/etc/clickhouse-server/config.d/لتطبيق الإعدادات على نظامك:
- يشير التكوين أعلاه إلى ثلاثة أقراص تشير إلى مجلدات يمكن لـ ClickHouse القراءة منها والكتابة إليها. ويمكن أن تحتوي وحدات التخزين على قرص واحد أو أكثر - وقد عرّفنا وحدة تخزين لكل قرص من الأقراص الثلاثة. لنستعرض الأقراص:
- والآن… لنتأكد من وحدات التخزين:
- سنضيف الآن قاعدة
TTLتنقل البيانات بين وحدات التخزين الساخنة والدافئة والباردة:
- يجب أن تدخل قاعدة
TTLالجديدة حيّز التنفيذ، ولكن يمكنك فرض ذلك للتأكد:
- تحقّق من انتقال بياناتك إلى الأقراص المتوقعة باستخدام الجدول
system.parts: