Support kontaktieren

Wir melden uns per E-Mail. Meist innerhalb von zwei Tagen.

Zum Schutz vor Missbrauch prüft Google reCAPTCHA diese Einsendung. Dabei werden Daten an Google übertragen. Das Skript wird erst geladen, wenn Sie dieses Formular öffnen.

← Alle Beiträge

Die Spalten, die niemand beschreibt

Die Haupttabelle der Zähler hat hier 166.436 Zeilen und einige Spalten, die aussehen, als wären sie wichtig. Drei davon sind lastdomain, firstdomain und userdomain. Sie enthalten Daten:

lastdomainnicht leer in 15.525 Zeilen
firstdomainnicht leer in 15.457 Zeilen
userdomainnicht leer in 2.982 Zeilen

Nichts beschreibt sie. Keine Anweisung irgendwo im Quellbaum setzt eine der drei. Die Werte stammen aus der vorigen Fassung dieses Dienstes, eingefroren auf dem Stand, als sie zu laufen aufhörte, und jede seither angelegte Zeile ist leer.

Warum das schlimmer ist als eine leere Spalte

Eine durchweg leere Spalte ist offensichtlich tot. Niemand baut darauf, niemand wertet daraus aus, niemand verbringt einen Nachmittag damit, sich zu fragen, was sie bedeutet.

Eine Spalte, die für 9 % der Zeilen gefüllt ist, ist eine Falle. Sie sieht aus wie ein Feld, das mal gefüllt wird und mal nicht — was für eine Spalte völlig gewöhnlich ist. Wer sie findet, schließt vernünftigerweise, dass es eine Regel gibt, die entscheidet, wann sie gesetzt wird, und sucht nach der Regel. Es gibt keine.

Und die veralteten Werte liegen nicht abseits auf schlafenden Zeilen, wo sie nichts anrichten könnten. Von den Zeilen mit einer lastdomain gehören 1.613 zu Zählern, die in diesem Jahr noch aktualisiert wurden. Ein lebender Zähler mit einer vor einem Jahrzehnt festgehaltenen Domain sieht genau aus wie ein lebender Zähler mit einer aktuellen.

Schlimmer noch: die Daten sind plausibel. Es sind Domains, sie sehen aus wie Domains von Zählern, und eine Abfrage, die darüber verknüpft, liefert Zeilen. Sie beantwortete eine Frage über ein Netz, das weitergezogen ist.

Wie man es schnell feststellt

Nach Schreibvorgängen suchen, nicht nach dem Namen. Ein Spaltenname taucht in SELECT-Listen auf, in Schema-Auszügen, in alten Migrationen, in Kommentaren — und das beweist alles nichts. Entschieden wird es davon, ob irgendein INSERT oder UPDATE ihn nennt. Diese Suche dauert eine Minute und ist auf eine Weise abschließend, wie das Herumlesen im Code es nicht ist.

Die zweite Prüfung sind die Daten selbst: wenn die neueste Zeile mit einem Wert Jahre alt ist, ist die Spalte ein Fossil, egal was der Code zu sagen scheint.

Warum sie noch da sind

Eine Spalte zu entfernen ist billig und nicht umsonst. Jede dieser Zeilen gehört zu jemandes Zähler, manche laufen seit 2006 durchgehend, und die sichere Handlung vor einer Schemaänderung an so einer Tabelle ist eine Sicherung, die man wirklich einmal zurückgespielt hat, nicht bloß eine, die man erzeugt hat. Bis sich das für sich lohnt, kosten drei ungenutzte Spalten nichts als Verwirrung.

Also werden sie stattdessen dokumentiert. Es gibt keinen naheliegenden Ort für diesen Hinweis — das Schema dieser Datenbank existiert nur in der laufenden Datenbank, in keiner Datei im Repository — also kam er dorthin, wo jemand tatsächlich darüber stolpert: in die Klasse, die eine Zählerzeile liest, genau da, wo die Spalten vorbeikommen. Ein Hinweis in einer Datei, die niemand öffnet, ist keine Dokumentation. Er macht aus einer Falle nur dann eine Fußnote, wenn er auf dem Weg liegt.

Anzeige