Kolumny, do których nic nie pisze
Główna tabela liczników ma tu 166 436 wierszy i kilka kolumn, które wyglądają, jakby miały znaczenie. Trzy z nich to lastdomain, firstdomain i userdomain. Zawierają dane:
lastdomain | niepuste w 15 525 wierszach |
firstdomain | niepuste w 15 457 wierszach |
userdomain | niepuste w 2 982 wierszach |
Nic do nich nie pisze. Żadna instrukcja w całym drzewie kodu nie ustawia żadnej z trzech. Wartości pochodzą z poprzedniej odsłony tego serwisu, zamrożone na tym, czym były, gdy przestała działać, a każdy wiersz utworzony od tamtej pory jest pusty.
Dlaczego to gorsze niż pusta kolumna
Kolumna zupełnie pusta jest oczywiście martwa. Nikt na niej nie buduje, nikt z niej nie raportuje, nikt nie spędza popołudnia, zastanawiając się, co znaczy.
Kolumna wypełniona dla 9 % wierszy to pułapka. Wygląda jak pole, które czasem jest wypełniane, a czasem nie — co dla kolumny jest rzeczą zupełnie zwyczajną. Kto ją znajdzie, rozsądnie wnioskuje, że istnieje reguła decydująca, kiedy się je ustawia, i zaczyna szukać reguły. Nie ma jej.
A przestarzałe wartości nie leżą na uboczu, na uśpionych wierszach, gdzie nie mogłyby nic zepsuć. Spośród wierszy niosących lastdomain 1 613 należy do liczników, które w tym roku były jeszcze aktualizowane. Żywy licznik z domeną zapisaną dekadę temu wygląda dokładnie jak żywy licznik z aktualną.
Gorzej: dane są wiarygodne. To domeny, wyglądają jak domeny liczników, a zapytanie łączące po nich zwraca wiersze. Odpowiadałoby na pytanie o sieć, która poszła dalej.
Jak to szybko stwierdzić
Szukaj zapisów, a nie nazwy. Nazwa kolumny pojawia się na listach SELECT, w zrzutach schematu, w starych migracjach, w komentarzach — a to wszystko niczego nie dowodzi. Rozstrzyga to, czy jakikolwiek INSERT albo UPDATE ją wymienia. To szukanie trwa minutę i jest ostateczne w sposób, w jaki czytanie wokół kodu nie jest.
Druga kontrola to same dane: jeśli najnowszy wiersz z wartością ma lata, kolumna jest skamieliną, cokolwiek zdaje się mówić kod.
Dlaczego wciąż tam są
Usunięcie kolumny jest tanie i nie jest darmowe. Każdy z tych wierszy należy do czyjegoś licznika, część z nich chodzi nieprzerwanie od 2006 roku, a bezpieczną czynnością przed zmianą schematu na takiej tabeli jest kopia, którą naprawdę raz odtworzyłeś, a nie tylko wytworzyłeś. Dopóki to się nie opłaca samo w sobie, trzy nieużywane kolumny nie kosztują nic poza zamętem.
Są więc zamiast tego udokumentowane. Nie ma oczywistego miejsca na tę notatkę — schemat tej bazy istnieje wyłącznie w działającej bazie, w żadnym pliku w repozytorium — więc trafiła tam, gdzie ktoś faktycznie się o nią potknie: do klasy czytającej wiersz licznika, dokładnie tam, gdzie te kolumny przechodzą obok. Notatka w pliku, którego nikt nie otwiera, nie jest dokumentacją. Zamienia pułapkę w przypis tylko wtedy, gdy leży na drodze.