TTL في ClickStack
${TABLES_TTL} بفترة الاحتفاظ المُعدّة (3 أيام ما لم يتم تغييرها) عندما ينشئ الـ collector الجدول:
PARTITION BY. ويمكن أن تحتوي هذه العبارة على تعبير SQL يستند إلى أي عمود أو أعمدة، وتحدد نتيجته partition الذي سيُرسل إليه كل row. ويؤدي ذلك إلى ربط البيانات منطقيًا (عبر بادئة اسم مجلد مشتركة) بكل partition على القرص، بحيث يمكن بعد ذلك الاستعلام عنه بشكل مستقل. وفي المثال أعلاه، يستخدم المخطط الافتراضي لـ otel_logs التقسيم حسب اليوم باستخدام التعبير toDate(Timestamp). وعند insert rows في ClickHouse، يُقيَّم هذا التعبير على كل row ويُوجَّه إلى partition الناتج إذا كان موجودًا (وإذا كان هذا row هو الأول لذلك اليوم، فسيتم إنشاء partition). لمزيد من التفاصيل حول التقسيم وتطبيقاته الأخرى، راجع “Table Partitions”.
يتضمن مخطط الجدول أيضًا TTL toDateTime(Timestamp) + ${TABLES_TTL} والإعداد ttl_only_drop_parts = 1. تضمن العبارة الأولى حذف البيانات بمجرد أن تصبح أقدم من TTL المُعدّة (3 أيام افتراضيًا). أما الإعداد ttl_only_drop_parts = 1 فيفرض انتهاء صلاحية أجزاء البيانات فقط عندما تكون كل البيانات فيها قد انتهت صلاحيتها (بدلًا من محاولة حذف rows جزئيًا). ومع ضمان التقسيم عدم “دمج” البيانات من أيام مختلفة مطلقًا، يمكن بالتالي حذف البيانات بكفاءة.
بشكل افتراضي، تُزال البيانات ذات TTL المنتهية عندما يقوم ClickHouse بدمج أجزاء البيانات. وعندما يكتشف ClickHouse أن البيانات منتهية الصلاحية، فإنه ينفّذ عملية دمج خارج الجدول الزمني.
جدولة TTLلا تُطبّق قيم TTL فورًا، بل وفق جدول زمني كما ذُكر أعلاه. يحدد إعداد جدول MergeTree
merge_with_ttl_timeout الحد الأدنى للتأخير بالثواني قبل تكرار عملية دمج مع delete TTL. والقيمة الافتراضية هي 14400 ثانية (4 ساعات). لكن هذا ليس سوى الحد الأدنى للتأخير؛ فقد يستغرق الأمر وقتًا أطول قبل تشغيل عملية TTL merge. وإذا كانت القيمة منخفضة جدًا، فسينفّذ العديد من عمليات الدمج خارج الجدول الزمني التي قد تستهلك قدرًا كبيرًا من الموارد. ويمكن فرض انتهاء صلاحية TTL باستخدام الأمر ALTER TABLE my_table MATERIALIZE TTL.تعديل TTL
- تعديل مخططات الجداول (موصى به). يتطلب ذلك الاتصال بمثيل ClickHouse، على سبيل المثال باستخدام clickhouse-client أو Cloud SQL Console. على سبيل المثال، يمكن تعديل TTL للجدول
otel_logsباستخدام عبارة DDL التالية:
- عدّل OTel collector. ينشئ ClickStack OpenTelemetry collector جداول في ClickHouse إذا لم تكن موجودة. ويتم ذلك عبر ClickHouse exporter، الذي يوفّر بدوره المعلَمة
ttlالمستخدمة للتحكم في تعبير TTL الافتراضي، مثل:
TTL على مستوى العمود
Body تحسبًا لإضافة بيانات وصفية ديناميكية جديدة لم تُستخرج عند وقت الإدراج، مثل label جديد في Kubernetes. وبعد فترة، مثل شهر واحد، قد يتضح أن هذه البيانات الوصفية الإضافية غير مفيدة، وبالتالي تقل جدوى الاحتفاظ بالعمود Body.
فيما يلي، نوضح كيف يمكن حذف العمود Body بعد 30 يومًا.
يتطلب تحديد TTL على مستوى العمود من المستخدمين تحديد المخطط الخاص بهم. ولا يمكن تحديد ذلك في OTel collector.