Contatta l'assistenza

Rispondiamo per e-mail, di solito entro due giorni.

Per prevenire abusi, Google reCAPTCHA verifica questo invio; alcuni dati vengono trasmessi a Google. Lo script viene caricato solo quando apri questo modulo.

← Tutti gli articoli

Le colonne che nessuno scrive

La tabella principale dei contatori ha qui 166.436 righe e alcune colonne che sembrano contare. Tre di esse sono lastdomain, firstdomain e userdomain. Contengono dati:

lastdomainnon vuota in 15.525 righe
firstdomainnon vuota in 15.457 righe
userdomainnon vuota in 2.982 righe

Nulla le scrive. Nessuna istruzione in tutto il codice imposta una delle tre. I valori vengono dalla generazione precedente di questo servizio, congelati a com'erano quando ha smesso di girare, e ogni riga creata da allora è vuota.

Perché è peggio di una colonna vuota

Una colonna del tutto vuota è ovviamente morta. Nessuno ci costruisce sopra, nessuno ne ricava rapporti, nessuno passa un pomeriggio a chiedersi cosa significhi.

Una colonna popolata per il 9 % delle righe è una trappola. Sembra un campo che a volte è riempito e a volte no — cosa del tutto ordinaria per una colonna. Chi la trova conclude ragionevolmente che esista una regola che decide quando viene impostata, e si mette a cercare la regola. Non c'è.

E i valori superati non stanno in disparte su righe dormienti, dove non potrebbero fare danno. Fra le righe che portano un lastdomain, 1.613 appartengono a contatori ancora aggiornati quest'anno. Un contatore vivo con un dominio annotato dieci anni fa è identico a un contatore vivo con uno attuale.

Peggio, i dati sono plausibili. Sono domini, sembrano domini di contatori, e un'interrogazione che ci si collega restituisce righe. Risponderebbe a una domanda su un web che è andato avanti.

Come accertarlo in fretta

Cerca le scritture, non il nome. Il nome di una colonna compare in elenchi SELECT, in esportazioni di schema, in vecchie migrazioni, nei commenti — e nulla di ciò dimostra alcunché. A dirimere è se un qualsiasi INSERT o UPDATE la nomina. Quella ricerca dura un minuto ed è conclusiva in un modo in cui leggiucchiare attorno al codice non lo è.

La seconda verifica sono i dati stessi: se la riga più recente con un valore ha anni, la colonna è un fossile, qualunque cosa sembri dire il codice.

Perché sono ancora lì

Rimuovere una colonna costa poco e non è gratis. Ognuna di queste righe appartiene al contatore di qualcuno, alcuni in funzione ininterrotta dal 2006, e l'operazione sicura prima di un cambio di schema su una tabella così è una copia che hai davvero ripristinato una volta, non una che hai soltanto prodotto. Finché non ne vale la pena di per sé, tre colonne inutilizzate non costano altro che confusione.

Sono quindi documentate. Non c'è un posto ovvio per quella nota — lo schema di questo database esiste solo nel database in funzione, in nessun file del repository — così è finita dove qualcuno ci inciamperà davvero: nella classe che legge una riga di contatore, proprio dove quelle colonne passano. Una nota in un file che nessuno apre non è documentazione. Trasforma una trappola in una nota a piè di pagina solo se sta sul percorso.

Pubblicità