Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Столбцы, в которые никто не пишет

Главная таблица счётчиков имеет здесь 166 436 строк и несколько столбцов, которые выглядят важными. Три из них — lastdomain, firstdomain и userdomain. В них есть данные:

lastdomainнепуст в 15 525 строках
firstdomainнепуст в 15 457 строках
userdomainнепуст в 2 982 строках

Никто в них не пишет. Ни одна инструкция во всём дереве кода не задаёт ни один из трёх. Значения родом из прошлого поколения этой службы, замороженные на том, чем были, когда оно перестало работать, и каждая созданная с тех пор строка пуста.

Почему это хуже пустого столбца

Совсем пустой столбец очевидно мёртв. На нём никто не строит, из него никто не отчитывается, никто не тратит вечер на догадки, что он значит.

Столбец, заполненный у 9 % строк, — ловушка. Он выглядит как поле, которое иногда заполняется, а иногда нет, что для столбца совершенно обычно. Кто его найдёт, разумно заключит, что есть правило, решающее, когда оно ставится, и пойдёт искать правило. Его нет.

И устаревшие значения лежат не в стороне, на спящих строках, где не могли бы навредить. Из строк с lastdomain 1 613 принадлежат счётчикам, которые обновлялись в этом году. Живой счётчик с доменом, записанным десятилетие назад, выглядит ровно как живой счётчик с нынешним.

Хуже того, данные правдоподобны. Это домены, они выглядят как домены счётчиков, и запрос, соединяющий по ним, возвращает строки. Он ответил бы на вопрос о вебе, который ушёл вперёд.

Как выяснить быстро

Ищите записи, а не имя. Имя столбца встречается в списках SELECT, в выгрузках схемы, в старых миграциях, в комментариях — и всё это не доказывает ничего. Решает то, упоминает ли его хоть один INSERT или UPDATE. Такой поиск занимает минуту и окончателен так, как чтение вокруг кода быть не может.

Вторая проверка — сами данные: если самая свежая строка со значением давностью в годы, столбец — окаменелость, что бы код ни выглядел говорящим.

Почему они всё ещё там

Убрать столбец дёшево и не бесплатно. Каждая из этих строк принадлежит чьему-то счётчику, часть работает непрерывно с 2006 года, а безопасное действие перед изменением схемы такой таблицы — резервная копия, которую вы действительно однажды восстановили, а не просто сделали. Пока это не окупается само по себе, три неиспользуемых столбца не стоят ничего, кроме путаницы.

Поэтому их вместо этого задокументировали. Очевидного места для такой пометки нет — схема этой базы существует только в работающей базе, ни в одном файле репозитория — поэтому она попала туда, где о неё действительно споткнутся: в класс, читающий строку счётчика, ровно там, где эти столбцы проходят мимо. Пометка в файле, который никто не открывает, — не документация. Она превращает ловушку в сноску, только если лежит на пути.

Реклама