Hemen çıkma oranına izleyici değil, tek bir bit yeter
28 Ağustos'a kadar bu site hemen çıkma oranı göstermiyordu ve Hakkında sayfası bunun bilinçli olduğunu söylüyordu: bunun için bir oturumu birkaç sayfa görüntüleme boyunca izlemek gerekirdi, bu da bir onay katmanı gerektirirdi.
İlk yarısı doğruydu. İkinci yarısı, çıkış sayfalarını kaydetmeye başladığımız anda doğru olmaktan çıktı ve cümleyi kimse güncellemedi.
Neden doğrudan hesaplanamıyordu
Sayfadan sayfaya geçişleri tutan bir tablo var. Hemen çıkma oranının ihtiyaç duyduğu her şeye sahip gibi görünüyor: bir sayfadan diğerine geçen ziyaret hemen çıkma değildir, o hâlde geçişi olmayan ziyaretleri saymak yeter.
Bu işe yaramıyor ve nedeni kayıt kodunun üç satırında. Bir geçiş şu durumlarda kaydedilmez: iki sayfa aynıysa, aralarında otuz dakikadan fazla geçmişse ve bir sayaçta aynı gün içinde üç yüz yeni çift oluştuktan sonra. Her kural tablonun amacı için doğru — hangi sayfanın hangisine götürdüğünü göstermek — ve her biri gerçek bir ikinci sayfayı görünmez kılıyor.
Öte yandan bir ziyaret, sayım açısından bir saat sürer: canlı tablodaki satır o kadar yaşar. Yani pay bir ziyaret tanımını, payda ise başka bir tanımı kullanırdı. Sayı biraz yanlış olmazdı; hiçbir şeye dayanmazdı.
Verilerin gerçekten söylediği
27 ve 28 Ağustos'ta 8.669 ziyaret ve 2.817 geçiş vardı; yani ziyaret başına ortalama 1,32 sayfa. 572 sayaçtan yalnızca 99'u herhangi bir geçiş kaydetti.
Bunun nedeni kapalı bir ayar değil — gezinme yolu kaydı varsayılan olarak açık ve 166.453 sayacın hepsinde etkin. Bu siteler gerçekten tek sayfa: profil sayfaları, tek sayfalık siteler, başkasının platformundaki bir resim galerisi. Çoğu için hemen çıkma oranı yüzde yüze yakın görünecek ve bu doğru olacak.
Tek bit, yeni veri toplama yok
Bir ziyaretin zaten bir saatlik bir satırı var. Bu satır artık bir şey daha taşıyor: bu ziyaretin hiç ikinci, farklı bir sayfa görüp görmediği. Değer, zaten çalışan ifadenin içinde, ek bir sorgu olmadan atanıyor:
ON DUPLICATE KEY UPDATE mehr = mehr | (url <> VALUES(url)),
last_seen = UNIX_TIMESTAMP(), url = VALUES(url)
İşin bütün püf noktası bu atamaların sırası. Veritabanı onları soldan sağa değerlendirir, bu yüzden url karşılaştırma yapılırken hâlâ önceki adresi tutar. url atamasını başa koyarsanız satır yeni adresi kendisiyle karşılaştırır, bit sonsuza dek sıfır kalır ve hemen çıkma oranı herkes için yüzde yüz görünür. Bu, makul bir sonuca tıpatıp benzeyen bir hata; bu yüzden ona güvenmeden önce, atılacak bir deneme satırında kanıtlamaya değerdi.
Bir saatlik süre dolunca gece çalışan temizlik, süresi dolan satırları sayar — kaç ziyaret, bunların kaçı çok sayfalı — her sayaç ve gün için bir satır yazar ve satırları siler. Bit bir saat yaşar. Çerez yok; ondan uzun yaşayan hiçbir şey de yok.
Buradan çıkan ders
İlginç soru hiçbir zaman bir oturumun nasıl izleneceği değildi. Asıl soru, zaten kaydettiğimiz şeylerden hangisinin bu soruyu yanıtladığı ve verdiği yanıtın soruyla aynı tanıma dayanıp dayanmadığıydı.
İkisi de ziyaret ölçüyormuş gibi görünen, biri otuz dakika, diğeri altmış dakika kuralıyla çalışan iki kaynak, bir sayı olan ama hiçbir anlam taşımayan bir oran üretir. Zaten var olan bir satıra tek bir bit eklemek, sonradan oranın neden öyle olduğunu açıklamaktan daha kolaydır.