ثلاثة أعمدة متبقية من Stats4U 2
عدد صفوف جدول العدادات الرئيسي هنا 166,436، وفيه عدد من الأعمدة التي تبدو مهمة. ثلاثة منها هي lastdomain، firstdomain و userdomain. وهي تحتوي على بيانات:
lastdomain | غير فارغ في صفوف عددها 15,525 |
firstdomain | غير فارغ في صفوف عددها 15,457 |
userdomain | غير فارغ في صفوف عددها 2,982 |
لا شيء يكتب فيها. لا توجد في أي مكان من قاعدة الكود عبارة تضبط أيًّا من الثلاثة. القيم من الجيل السابق لهذه الخدمة، متجمدة على ما كانت عليه حين توقف عن العمل، وكل صف أُنشئ منذ ذلك الحين فارغ.
لماذا يصعب فهم عمود نصف ممتلئ أكثر من عمود فارغ
العمود الفارغ تمامًا ميت بوضوح. لا أحد يبني عليه، ولا أحد يستخرج منه تقارير، ولا أحد يقضي عصرًا كاملًا يتساءل عن معناه.
أما العمود المملوء في 9 % من الصفوف فهو فخ. يبدو كحقل يُملأ أحيانًا ولا يُملأ أحيانًا أخرى — وهذا أمر عادي تمامًا بالنسبة إلى عمود. ومن يجده يستنتج عن حق أن هناك قاعدة تحدد متى يُضبط، فيبدأ بالبحث عن القاعدة. لكن لا توجد قاعدة.
والقيم القديمة ليست مخبأة في صفوف خاملة حيث لا تضر. فمن بين الصفوف التي تحمل قيمة في lastdomain، يعود 1,613 منها إلى عدادات كانت لا تزال تُحدَّث هذا العام. والعداد النشط الذي سُجّل له نطاق قبل عقد يبدو تمامًا مثل عداد نشط يحمل نطاقًا حاليًا.
والأسوأ أن البيانات معقولة المظهر. إنها نطاقات، وتبدو كنطاقات العدادات، والاستعلام الذي يربط الجداول عليها يعيد صفوفًا. لكنه سيجيب عن سؤال يخص ويبًا تغيّر منذ زمن.
كيف تعرف ذلك بسرعة
ابحث بـ grep عن عمليات الكتابة، لا عن الاسم. فاسم العمود يظهر في قوائم SELECT وفي تفريغات المخطط، وفي عمليات الترحيل القديمة، وفي التعليقات — وكل ذلك لا يثبت شيئًا. ما يحسم الأمر هو هل هناك عبارة INSERT أو UPDATE تذكره. يستغرق هذا البحث دقيقة، وهو حاسم على نحو لا تبلغه قراءة ما حول الكود.
والفحص الثاني هو البيانات نفسها: إذا كان أحدث صف يحمل قيمة عمره سنوات، فالعمود أحفورة بصرف النظر عما يبدو أن الكود يقوله.
لماذا لا تزال موجودة
حذف عمود رخيص لكنه ليس مجانيًا. فكل صف من هذه الصفوف يخص عداد شخص ما، وبعضها يعمل دون انقطاع منذ 2006، والخطوة الآمنة قبل تغيير مخطط جدول كهذا هي نسخة تفريغ جرت استعادتها فعلًا مرة واحدة على الأقل، لا مجرد إنتاجها. وقد أُجري هذا التمرين منذ ذلك الحين. وإلى أن يصبح حذفها مجديًا لذاته، لا تكلف ثلاثة أعمدة غير مستخدمة شيئًا سوى لحظة ارتباك، والملاحظة الموصوفة أدناه تزيل حتى ذلك.
لذلك وُثّقت بدلًا من ذلك. لا يوجد مكان واضح لوضع تلك الملاحظة — فمخطط قاعدة البيانات هذه موجود في قاعدة البيانات العاملة فقط، لا في أي ملف في المستودع — لذا وُضعت حيث سيتعثر بها أحد فعلًا: في الصنف (class) الذي يقرأ صف العداد، في الموضع الذي تمر فيه الأعمدة بالضبط. الملاحظة في ملف لا يفتحه أحد ليست توثيقًا. ولا تحوّل الفخ إلى حاشية إلا إذا كانت على الطريق.