Tre kolumner kvar från Stats4U 2
Huvudtabellen för räknare här har 166 436 rader och ett antal kolumner som ser ut att vara viktiga. Tre av dem är lastdomain, firstdomain och userdomain. De innehåller data:
lastdomain | inte tom i 15 525 rader |
firstdomain | inte tom i 15 457 rader |
userdomain | inte tom i 2 982 rader |
Ingenting skriver till dem. Ingen sats någonstans i kodbasen sätter någon av de tre. Värdena kommer från tjänstens föregående generation, frysta vid vad de nu var när den slutade köras, och varje rad som skapats sedan dess är tom.
Varför en halvfylld kolumn är svårare att tolka än en tom
En helt tom kolumn är uppenbart död. Ingen bygger på den, ingen tar fram rapporter ur den, ingen ägnar en eftermiddag åt att undra vad den betyder.
En kolumn som är ifylld för 9 % av raderna är en fälla. Den ser ut som ett fält som ibland fylls i och ibland inte — vilket är något helt vanligt för en kolumn. Den som hittar den drar rimligen slutsatsen att det finns en regel som avgör när den sätts, och börjar leta efter regeln. Det finns ingen.
Och de inaktuella värdena är inte undanstoppade på vilande rader där de inte kan göra någon skada. Titta på raderna med ett värde i lastdomain: 1 613 av dem tillhör räknare som fortfarande uppdaterades i år. En aktiv räknare med en domän som registrerades för tio år sedan ser exakt likadan ut som en aktiv räknare med en aktuell domän.
Värre än så: uppgifterna är trovärdiga. Det är domäner, de ser ut som domäner för räknare, och en fråga som gör en join på dem returnerar rader. Den skulle besvara en fråga om en webb som har gått vidare.
Så avgör du det snabbt
Sök efter skrivningar, inte efter namnet. Ett kolumnnamn förekommer i kolumnlistor efter SELECT och i schemadumpar, i gamla migreringar, i kommentarer — och inget av det bevisar något. Det som avgör saken är om någon INSERT eller UPDATE nämner den. Den sökningen tar en minut, och den ger ett säkert svar på ett sätt som att läsa runt i koden inte gör.
Den andra kontrollen är själva uppgifterna: om den nyaste raden med ett värde är flera år gammal är kolumnen ett fossil, oavsett vad koden verkar säga.
Varför de fortfarande finns kvar
Att ta bort en kolumn är billigt, men inte gratis. Varenda en av de här raderna tillhör någons räknare, en del av dem i drift utan avbrott sedan 2006, och det säkra steget före en schemaändring i en sådan tabell är en dump som faktiskt har återställts en gång i stället för att bara ha tagits fram. Den övningen har sedan dess genomförts. Tills det är värt att ta bort dem för sin egen skull kostar tre oanvända kolumner ingenting utom ett ögonblicks förvirring, och anteckningen som beskrivs nedan tar bort även det.
Därför är de dokumenterade i stället. Det finns ingen självklar plats för den anteckningen — databasens schema finns bara i den körande databasen, inte i någon fil i kodförrådet — så den hamnade där någon faktiskt skulle snubbla över den: i klassen som läser en räknarrad, precis där kolumnerna passerar förbi. En anteckning i en fil som ingen öppnar är ingen dokumentation. Den förvandlar en fälla till en fotnot bara om den ligger i vägen.