في ClickHouse، تشير التعديلات إلى العمليات التي تُعدّل البيانات الموجودة في جدول أو تحذفها—وعادةً ما يتم ذلك باستخدام ALTER TABLE ... DELETE أو ALTER TABLE ... UPDATE. وبينما قد تبدو هذه العبارات مشابهة لعمليات SQL القياسية، فإنها تختلف عنها جذريًا على المستوى الداخلي.
فبدلًا من تعديل الصفوف في موضعها، تكون التعديلات في ClickHouse عمليات غير متزامنة تُنفَّذ في الخلفية وتُعيد كتابة أجزاء البيانات المتأثرة بالتغيير بالكامل. وهذا النهج ضروري بسبب نموذج التخزين غير القابل للتغيير والموجَّه بالأعمدة في ClickHouse، وقد يؤدي إلى استهلاك كبير لـ I/O والموارد.
عند إصدار تعديل، يقوم ClickHouse بجدولة إنشاء أجزاء معدَّلة جديدة، مع ترك الأجزاء الأصلية دون مساس إلى أن تصبح الأجزاء الجديدة جاهزة. وما إن تصبح جاهزة، تحل الأجزاء المعدَّلة محل الأجزاء الأصلية استبدالًا ذريًا. لكن بما أن العملية تعيد كتابة الأجزاء كاملة، فقد يؤدي حتى تغيير طفيف (مثل تحديث صف واحد) إلى عمليات إعادة كتابة واسعة النطاق وتضخيم مفرط في عمليات الكتابة.
وبالنسبة إلى مجموعات البيانات الكبيرة، قد يتسبب ذلك في ارتفاع كبير في I/O على القرص ويؤدي إلى تراجع الأداء العام للعنقود. وعلى خلاف عمليات الدمج، لا يمكن التراجع عن التعديلات بعد إرسالها، وستستمر في التنفيذ حتى بعد إعادة تشغيل الخادوم ما لم تُلغَ صراحةً—راجع KILL MUTATION.
مراقبة عدد التعديلات النشطة أو الموضوعة في قائمة الانتظار في ClickHouseللاطلاع على كيفية مراقبة عدد التعديلات النشطة أو الموضوعة في قائمة الانتظار، ارجع إلى مقالة قاعدة المعرفة التالية.
التعديلات مرتبة ترتيبًا كليًا: فهي تُطبَّق على البيانات التي أُدرجت قبل إصدار التعديل، بينما تظل البيانات الأحدث غير متأثرة. وهي لا تحظر عمليات الإدراج، لكنها قد تتداخل مع الاستعلامات الأخرى الجارية. وقد يقرأ استعلام SELECT يعمل أثناء التعديل مزيجًا من الأجزاء المعدَّلة وغير المعدَّلة، مما قد يؤدي إلى رؤية غير متسقة للبيانات أثناء التنفيذ. وينفّذ ClickHouse التعديلات بالتوازي لكل جزء، ما قد يزيد استهلاك الذاكرة ووحدة المعالجة المركزية أكثر، خاصةً عند وجود استعلامات فرعية معقدة (مثل x IN (SELECT …)).
وكقاعدة عامة، تجنّب التعديلات المتكررة أو واسعة النطاق، خاصةً على الجداول كبيرة الحجم. وبدلًا من ذلك، استخدم محركات الجداول البديلة مثل ReplacingMergeTree أو CollapsingMergeTree، فهي مصممة للتعامل مع تصحيحات البيانات بكفاءة أعلى أثناء تنفيذ الاستعلام أو خلال عمليات الدمج. وإذا كانت التعديلات ضرورية تمامًا، فراقبها بعناية باستخدام جدول system.mutations واستخدم KILL MUTATION إذا علقت عملية ما أو بدأت تتصرف بشكل غير سليم. إن إساءة استخدام التعديلات قد تؤدي إلى تراجع الأداء، واستهلاك تخزين مفرط، واحتمال عدم استقرار الخدمة—لذا استخدمها بحذر وعلى نطاق محدود.
ولحذف البيانات، يمكنك أيضًا النظر في عمليات الحذف الخفيف أو إدارة البيانات من خلال الأقسام، مما يتيح حذف الأجزاء بالكامل بكفاءة. آخر تعديل في ٢٩ يونيو ٢٠٢٦