Stopi odbijanja treba jedan bit, a ne alat za praćenje
U ovom članku
Do 28. avgusta ovaj sajt nije prikazivao stopu odbijanja, a stranica „O nama“ je govorila da je to namerno: trebalo bi pratiti sesiju kroz više pregleda stranica, a to bi zahtevalo baner za saglasnost.
Prva polovina je bila tačna. Druga je prestala da bude tačna čim smo počeli da beležimo izlazne stranice, a niko nije ažurirao rečenicu.
Zašto se nije moglo prosto izračunati
Postoji tabela prelaza sa stranice na stranicu. Izgleda kao sve što je potrebno za stopu odbijanja: poseta koja ide sa jedne stranice na drugu nije odbijanje, pa treba izbrojati posete bez prelaza.
To ne funkcioniše, a razlog je u tri reda koda za beleženje. Prelaz se odbacuje kada su dve stranice iste, kada je između njih prošlo više od trideset minuta i posle tri stotine novih parova na jednom brojaču u jednom danu. Svako pravilo je ispravno za ono čemu tabela služi — da pokaže koja stranica vodi do koje — a svako od njih čini stvarnu drugu stranicu nevidljivom.
U međuvremenu, poseta, za potrebe brojanja, traje sat vremena: toliko preživljava red u tabeli uživo. Tako bi brojilac koristio jednu definiciju posete, a imenilac drugu. Broj ne bi bio malo pogrešan, bio bi bez uporišta.
Šta su podaci zaista rekli
Tokom 27. i 28. avgusta bilo je 8.669 poseta i 2.817 prelaza, dakle u proseku 1,32 stranice po poseti. Samo 99 od 572 brojača zabeležilo je ijedan prelaz.
To nije isključen prekidač — beleženje putanje je podrazumevano uključeno i svih 166.453 brojača ga ima omogućeno. Ti sajtovi zaista su pojedinačne stranice: stranice profila, sajtovi od jedne stranice, galerija slika na tuđoj platformi. Stopa odbijanja za većinu njih biće blizu stotinu procenata, i to će biti tačno.
Jedan bit i nikakvo novo prikupljanje
Poseta već ima red na sat vremena. Sada nosi još jednu stvar: da li je ta poseta ikada videla drugu, različitu stranicu. Vrednost se postavlja unutar naredbe koja se ionako izvršava, bez dodatnog upita:
ON DUPLICATE KEY UPDATE mehr = mehr | (url <> VALUES(url)),
last_seen = UNIX_TIMESTAMP(), url = VALUES(url)
Redosled tih dodela je ceo trik. Baza podataka ih izračunava s leva na desno, pa url još uvek drži prethodnu adresu kada se poređenje izvrši. Ako se url stavi prvo, red poredi novu adresu sa samom sobom, bit zauvek ostaje nula, a stopa odbijanja za sve izgleda sto posto. To je greška koja izgleda baš kao verodostojan rezultat, zbog čega je vredelo dokazati je na probnom redu pre nego što joj se poveruje.
Kada sat istekne, noćno čišćenje broji redove koji ističu — koliko poseta, koliko njih sa više stranica — upisuje jedan red po brojaču i danu i briše redove. Bit živi sat vremena. Bez kolačića i bez ičega što ga nadživljava.
Šta se može uopštiti
Zanimljivo pitanje nikad nije bilo kako pratiti sesiju. Bilo je koja od stvari koje već beležimo slučajno odgovara na pitanje i da li je odgovor koji daje vezan za istu definiciju kao pitanje.
Dva izvora koja oba izgledaju kao da mere posete, jedan sa pravilom od trideset minuta, a drugi sa pravilom od šezdeset, daće odnos koji jeste broj, a ne znači ništa. Lakše je dodati jedan bit u red koji već postoji nego kasnije objašnjavati zašto je stopa takva kakva jeste.