Tiga kolom sisa dari Stats4U 2
Tabel penghitung utama di sini memiliki 166.436 baris dan sejumlah kolom yang tampak penting. Tiga di antaranya adalah lastdomain, firstdomain dan userdomain. Ketiganya berisi data:
lastdomain | tidak kosong di 15.525 baris |
firstdomain | tidak kosong di 15.457 baris |
userdomain | tidak kosong di 2.982 baris |
Tidak ada yang menulisnya. Tidak ada satu pun perintah di seluruh basis kode yang mengisi salah satu dari ketiganya. Nilai-nilainya berasal dari generasi sebelumnya layanan ini, membeku pada keadaan saat generasi itu berhenti berjalan, dan setiap baris yang dibuat sejak itu kosong.
Mengapa kolom yang terisi sebagian lebih menyesatkan daripada kolom kosong
Kolom yang sepenuhnya kosong jelas mati. Tidak ada yang membangun di atasnya, tidak ada yang membuat laporan darinya, tidak ada yang menghabiskan satu sore untuk bertanya-tanya apa artinya.
Kolom yang terisi pada 9 % baris adalah jebakan. Kolom itu tampak seperti bidang yang kadang diisi dan kadang tidak — hal yang sepenuhnya biasa bagi sebuah kolom. Siapa pun yang menemukannya wajar menyimpulkan bahwa ada aturan yang menentukan kapan kolom itu diisi, lalu mulai mencari aturan tersebut. Aturan itu tidak ada.
Dan nilai-nilai usang itu tidak tersimpan rapi di baris-baris tidur yang tidak bisa menimbulkan kerugian. Dari baris-baris yang memuat nilai lastdomain, 1.613 milik penghitung yang masih diperbarui tahun ini. Penghitung aktif dengan domain yang tercatat sepuluh tahun lalu tampak persis seperti penghitung aktif dengan domain terkini.
Lebih buruk lagi, datanya masuk akal. Isinya domain, tampak seperti domain milik penghitung, dan kueri yang melakukan join pada kolom itu mengembalikan baris. Kueri itu akan menjawab pertanyaan tentang web yang sudah lama berubah.
Cara mengetahuinya dengan cepat
Cari penulisannya dengan grep, bukan namanya. Nama kolom muncul di daftar SELECT mana pun, di dump skema, di migrasi lama, di komentar — semuanya tidak membuktikan apa pun. Yang menentukan adalah apakah ada perintah INSERT atau UPDATE yang menyebutnya. Pencarian itu hanya butuh satu menit dan hasilnya pasti, sesuatu yang tidak bisa diberikan dengan sekadar membaca-baca kode.
Pemeriksaan kedua adalah datanya sendiri: jika baris terbaru yang berisi nilai sudah berumur bertahun-tahun, kolom itu adalah fosil, apa pun yang tampaknya dikatakan kode.
Mengapa kolom-kolom itu masih ada
Menghapus kolom itu murah, tetapi tidak gratis. Setiap baris ini milik penghitung seseorang, sebagian di antaranya berjalan tanpa henti sejak 2006, dan langkah aman sebelum mengubah skema tabel seperti itu adalah dump yang benar-benar pernah dipulihkan sekali, bukan sekadar dibuat. Latihan itu kini sudah dilakukan. Selama menghapusnya belum layak dilakukan demi manfaatnya sendiri, tiga kolom yang tidak terpakai tidak menimbulkan biaya apa pun selain kebingungan sesaat, dan catatan yang dijelaskan di bawah bahkan menghilangkan kebingungan itu.
Karena itu kolom-kolom tersebut didokumentasikan saja. Tidak ada tempat yang jelas untuk catatan itu — skema basis data ini hanya ada di basis data yang sedang berjalan, tidak di berkas mana pun dalam repositori — jadi catatan itu diletakkan di tempat yang pasti akan ditemui orang: di kelas yang membaca baris penghitung, tepat di tempat kolom-kolom itu lewat. Catatan dalam berkas yang tidak pernah dibuka siapa pun bukanlah dokumentasi. Catatan hanya mengubah jebakan menjadi catatan kaki jika letaknya berada di jalur yang dilalui.