Trei coloane rămase din Stats4U 2
Tabelul principal de contoare de aici are 166.436 de rânduri și o serie de coloane care par importante. Trei dintre ele sunt lastdomain, firstdomain și userdomain. Conțin date:
lastdomain | nevidă în 15.525 de rânduri |
firstdomain | nevidă în 15.457 de rânduri |
userdomain | nevidă în 2.982 de rânduri |
Nimic nu scrie în ele. Nicio instrucțiune din tot codul nu setează vreuna dintre cele trei. Valorile provin din generația anterioară a acestui serviciu, înghețate la ce erau când aceasta a încetat să ruleze, iar fiecare rând creat de atunci este gol.
De ce o coloană pe jumătate completată derutează mai mult decât una goală
O coloană complet goală este evident moartă. Nimeni nu construiește pe ea, nimeni nu face rapoarte din ea, nimeni nu petrece o după-amiază întrebându-se ce înseamnă.
O coloană completată pentru 9 % din rânduri este o capcană. Arată ca un câmp care uneori este completat și alteori nu — ceea ce este cât se poate de obișnuit pentru o coloană. Oricine o găsește conchide, pe bună dreptate, că există o regulă care decide când este setată și începe să caute regula. Nu există niciuna.
Iar valorile învechite nu stau ascunse pe rânduri inactive, unde nu ar putea face rău. Dintre rândurile care au o valoare în lastdomain, 1.613 aparțin unor contoare care au fost încă actualizate anul acesta. Un contor activ cu un domeniu înregistrat acum un deceniu arată exact ca un contor activ cu unul actual.
Mai rău, datele sunt plauzibile. Sunt domenii, arată ca domeniile contoarelor, iar o interogare care face join pe ele returnează rânduri. Ar răspunde la o întrebare despre un web care a mers mai departe.
Cum vă dați seama, rapid
Căutați cu grep scrierile, nu numele. Numele unei coloane apare în SELECT ca parte a listei de coloane, în dumpuri de schemă, în migrări vechi, în comentarii — și nimic din toate acestea nu dovedește ceva. Ce lămurește lucrurile este dacă vreun INSERT sau UPDATE o menționează. Căutarea durează un minut și este concludentă într-un fel în care citirea prin cod nu este.
A doua verificare sunt datele înseși: dacă cel mai nou rând care conține o valoare are ani de zile, coloana este o fosilă, indiferent ce pare să spună codul.
De ce sunt încă acolo
Eliminarea unei coloane este ieftină, dar nu gratuită. Fiecare dintre aceste rânduri aparține contorului cuiva, unele funcționând neîntrerupt din 2006, iar pasul sigur înaintea unei modificări de schemă pe un astfel de tabel este un dump care a fost efectiv restaurat o dată, nu doar generat. Acest exercițiu a fost între timp efectuat. Până când eliminarea lor merită făcută pentru ea însăși, trei coloane nefolosite nu costă nimic în afară de un moment de confuzie, iar nota descrisă mai jos elimină chiar și asta.
Așa că, în schimb, sunt documentate. Nu există un loc evident pentru această notă — schema acestei baze de date există doar în baza de date care rulează, nu în vreun fișier din repository — așa că a ajuns acolo unde cineva chiar s-ar împiedica de ea: în clasa care citește un rând de contor, exact acolo unde trec coloanele. O notă într-un fișier pe care nu îl deschide nimeni nu este documentație. Ea transformă o capcană într-o notă de subsol doar dacă se află în cale.