Destekle iletişim

E-postayla, genellikle iki gün içinde yanıt veririz.

Google reCAPTCHA, kötüye kullanıma karşı bu gönderimi denetler; bu sırada veriler Google'a aktarılır. Komut dosyası yalnızca bu form açıldığında yüklenir.

← Tüm yazılar

Stats4U 2'den kalma üç sütun

Buradaki ana sayaç tablosunda 166.436 satır ve önemliymiş gibi görünen birkaç sütun var. Bunlardan üçü şunlar: lastdomain, firstdomain ve userdomain. İçlerinde veri var:

lastdomain15.525 satırda dolu
firstdomain15.457 satırda dolu
userdomain2.982 satırda dolu
sayaç satırları: 166.436lastdomain15.525firstdomain15.457userdomain2.982166.436

Bunlara hiçbir şey yazmıyor. Kod tabanının hiçbir yerinde bu üçünden herhangi birini ayarlayan bir komut yok. Değerler bu hizmetin önceki kuşağından kalma; o kuşak çalışmayı bıraktığında neyse orada donup kalmışlar ve o zamandan beri oluşturulan her satırda bu sütunlar boş.

Yarı dolu bir sütun neden boş olandan daha zor okunur

Tamamen boş bir sütunun ölü olduğu apaçıktır. Kimse onun üzerine bir şey kurmaz, kimse ondan rapor çıkarmaz, kimse ne anlama geldiğini düşünerek bir öğleden sonrasını harcamaz.

Satırların %9'unda dolu olan bir sütun ise bir tuzaktır. Bazen dolu bazen boş olan bir alan gibi görünür — bu da bir sütun için tamamen sıradan bir durumdur. Onu bulan herkes makul olarak, ne zaman doldurulacağına karar veren bir kural olduğu sonucuna varır ve o kuralı aramaya başlar. Öyle bir kural yok.

Üstelik bu eskimiş değerler, zarar veremeyecekleri uykudaki satırlarda gizlenmiş de değil. Bu yıl hâlâ güncellenen sayaçlara ait 1.613 satırda şu sütun dolu: lastdomain. On yıl önce kaydedilmiş bir alan adı taşıyan canlı bir sayaç, güncel bir alan adı taşıyan canlı bir sayaçla tıpatıp aynı görünür.

Daha kötüsü, veri akla yatkın. Bunlar alan adları, sayaçların alan adlarına benziyorlar ve bunlar üzerinden birleştirme yapan bir sorgu satır döndürüyor. Böyle bir sorgu, çoktan değişmiş bir web hakkındaki bir soruyu yanıtlardı.

Hızlıca nasıl anlaşılır

Grep ile adı değil, yazma işlemlerini arayın. Bir sütun adı SELECT listelerinde, şema dökümlerinde, eski geçiş betiklerinde, yorumlarda geçer — bunların hiçbiri bir şey kanıtlamaz. Meseleyi çözen, herhangi bir INSERT ya da UPDATE komutunun onu anıp anmadığıdır. Bu arama bir dakika sürer ve kodun içinde dolaşarak okumanın veremeyeceği kesinlikte bir sonuç verir.

İkinci kontrol verinin kendisidir: değer taşıyan en yeni satır yıllar öncesine aitse, kod ne söylüyor gibi görünürse görünsün, o sütun bir fosildir.

Neden hâlâ oradalar

Bir sütunu kaldırmak ucuzdur, ama bedava değildir. Bu satırların her biri birinin sayacına ait; bazıları 2006'dan beri kesintisiz çalışıyor ve böyle bir tabloda şema değişikliğinden önceki güvenli adım, yalnızca üretilmiş değil, gerçekten bir kez geri yüklenmiş bir dökümdür. Bu tatbikat o zamandan beri yapıldı. Kaldırmak kendi başına değer kazanana kadar, kullanılmayan üç sütunun tek bedeli bir anlık kafa karışıklığıdır ve aşağıda anlatılan not bunu bile ortadan kaldırır.

Bu yüzden onun yerine belgelendiler. Bu notu koymak için bariz bir yer yok — bu veritabanının şeması yalnızca çalışan veritabanında var, depodaki hiçbir dosyada değil — bu yüzden not, birinin gerçekten takılacağı yere kondu: bir sayaç satırını okuyan sınıfa, tam da sütunların geçtiği yere. Kimsenin açmadığı bir dosyadaki not, belgeleme değildir. Bir not, bir tuzağı ancak yolun üzerinde duruyorsa dipnota dönüştürür.

Reklam