Stopa napuštanja treba jedan bit, a ne alat za praćenje
O sadržaju i njegovoj provjeri
U ovom članku
Do 28. kolovoza ovo web-mjesto nije prikazivalo stopu napuštanja, a stranica O usluzi govorila je da je to namjerno: trebala bi sesija praćena kroz više pregleda stranica, a za to bi trebala traka za privolu.
Prva je polovica bila istinita. Druga je prestala biti istinita čim smo počeli bilježiti izlazne stranice, a nitko nije ažurirao rečenicu.
Zašto se nije moglo jednostavno izračunati
Postoji tablica prijelaza između stranica. Izgleda kao sve što stopa napuštanja treba: posjet koji ide s jedne stranice na drugu nije napuštanje, pa izbrojite posjete bez prijelaza.
To ne radi, a razlog je u tri retka koda za bilježenje. Prijelaz se odbacuje kada su dvije stranice iste, kada je između njih prošlo više od trideset minuta i nakon tristo novih parova na jednom brojaču u jednom danu. Svako je pravilo ispravno za svrhu tablice — prikazivati koja stranica vodi na koju — i svako čini stvarnu drugu stranicu nevidljivom.
Istodobno posjet za potrebe brojanja traje sat vremena: toliko redak u tablici uživo opstaje. Zato bi brojnik koristio jednu definiciju posjeta, a nazivnik drugu. Brojka ne bi bila malo pogrešna, nego bez uporišta.
Što su podaci govorili
Tijekom 27. i 28. kolovoza bilo je 8.669 posjeta i 2.817 prijelaza, dakle prosječno 1,32 stranice po posjetu. Od 572 brojača 99 ih je uopće zabilježilo prijelaz.
Nije riječ o isključenom prekidaču — bilježenje putanja zadano je uključeno i svih 166.453 brojača ima ga uključeno. Ta web-mjesta doista jesu pojedinačne stranice: stranice profila, jednostranična web-mjesta, galerija slika na tuđoj platformi. Stopa napuštanja za većinu njih bit će blizu sto posto i to će biti točno.
Jedan bit i bez novog prikupljanja
Posjet već ima redak sat vremena. Sada nosi još jednu stvar: je li taj posjet ikada vidio drugu, različitu stranicu. Vrijednost 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)
Redoslijed tih pridruživanja cijeli je trik. Baza podataka procjenjuje ih slijeva nadesno, pa url još čuva prethodnu adresu kada se izvršava usporedba. Stavite url na prvo mjesto i redak uspoređuje novu adresu sa samom sobom, bit zauvijek ostaje nula i stopa napuštanja svima pokazuje sto posto. To je neuspjeh koji izgleda upravo kao uvjerljiv rezultat, pa ga je vrijedilo dokazati na privremenom retku prije povjerenja u njega.
Kad sat istekne, noćno čišćenje broji retke koji istječu — koliko posjeta, koliko višestraničnih — zapisuje jedan redak po brojaču i danu te briše retke. Bit živi sat vremena. Bez kolačića i bez ičega što ga nadživi.
Što vrijedi općenito
Zanimljivo pitanje nikad nije bilo kako pratiti sesiju. Nego što od onoga što već zapisujemo slučajno odgovara na pitanje i je li odgovor vezan uz istu definiciju kao pitanje.
Dva izvora koja oba izgledaju kao da mjere posjete, jedan s pravilom od trideset minuta, a drugi sa šezdeset, proizvest će omjer koji je broj i ne znači ništa. Lakše je dodati jedan bit postojećem retku nego kasnije objašnjavati zašto je stopa takva kakva jest.