Atmetimo rodikliui reikia vieno bito, o ne sekiklio
Šiame straipsnyje
Iki rugpjūčio 28 d. ši svetainė nerodė atmetimo rodiklio, o puslapis apie paslaugą sakė, kad sąmoningai: reikėtų seanso, sekamo per kelias puslapio peržiūras, o tam reikėtų sutikimo juostos.
Pirmoji pusė buvo teisinga. Antroji nustojo būti teisinga pradėjus registruoti išėjimo puslapius, bet niekas neatnaujino sakinio.
Kodėl negalima tiesiog apskaičiuoti
Yra perėjimų iš puslapio į puslapį lentelė. Atrodo, joje viskas, ko reikia atmetimo rodikliui: apsilankymas, pereinantis iš vieno puslapio į kitą, nėra atmetimas, tad reikia skaičiuoti apsilankymus be perėjimų.
Tai neveikia, o priežastis – trys registravimo kodo eilutės. Perėjimas atmetamas, kai abu puslapiai vienodi, kai tarp jų praėjo daugiau nei trisdešimt minučių ir po trijų šimtų naujų porų viename skaitiklyje per vieną dieną. Kiekviena taisyklė teisinga pagal lentelės paskirtį — parodyti, kuris puslapis veda į kurį, — ir kiekviena padaro tikrą antrą puslapį nematomą.
Tuo tarpu apsilankymas skaičiavimo tikslu trunka valandą: tiek išlieka tiesioginės lentelės eilutė. Taigi skaitiklis naudotų vieną apsilankymo apibrėžimą, o vardiklis – kitą. Skaičius būtų ne truputį neteisingas – neturėtų pagrindo.
Ką duomenys iš tiesų pasakė
Rugpjūčio 27 ir 28 d. buvo 8 669 apsilankymai ir 2 817 perėjimų, taigi vidutiniškai 1,32 puslapio vienam apsilankymui. Bent vieną perėjimą užregistravo 99 iš 572 skaitiklių.
Tai ne išjungtas jungiklis — kelių registravimas pagal numatytąsias nuostatas įjungtas, ir visi 166 453 skaitikliai jį turi įjungę. Tos svetainės iš tiesų vieno puslapio: profiliai, vieno puslapio svetainės, paveikslėlių galerija svetimoje platformoje. Daugumos atmetimo rodiklis bus arti šimto procentų, ir tai bus teisinga.
Vienas bitas be naujo rinkimo
Apsilankymas jau turi eilutę vienai valandai. Dabar ji turi dar vieną dalyką: ar šis apsilankymas kada nors matė antrą, kitokį puslapį. Reikšmė nustatoma ir taip vykdomame sakinyje, be papildomos užklausos:
ON DUPLICATE KEY UPDATE mehr = mehr | (url <> VALUES(url)),
last_seen = UNIX_TIMESTAMP(), url = VALUES(url)
Šių priskyrimų tvarka yra visas triukas. Duomenų bazė juos vertina iš kairės į dešinę, todėl url palyginimo metu vis dar turi ankstesnį adresą. Pirmiausia įrašykite url ir eilutė palygins naują adresą su juo pačiu, bitas liks nulis amžinai, o atmetimo rodiklis visiems rodys šimtą procentų. Tai nesėkmė, atrodanti lygiai kaip įtikinamas rezultatas, todėl prieš pasitikint verta buvo įrodyti su vienkartine eilute.
Valandai pasibaigus, naktinis valymas suskaičiuoja baigiančias galioti eilutes — kiek apsilankymų, kiek iš jų kelių puslapių, — įrašo po eilutę kiekvienam skaitikliui ir dienai, tada eilutes ištrina. Bitas gyvena valandą. Jokio slapuko ir nieko, kas išliktų ilgiau.
Bendroji mintis
Įdomus klausimas niekada nebuvo, kaip sekti seansą. Įdomus klausimas buvo, kuris iš jau užrašomų dalykų atsako į klausimą ir ar jo atsakymas remiasi tuo pačiu apibrėžimu kaip klausimas.
Du šaltiniai, abu atrodantys matuojantys apsilankymus, vienas su trisdešimties, kitas su šešiasdešimties minučių taisykle, sukurs santykį, kuris yra skaičius ir nieko nereiškia. Lengviau pridėti vieną bitą jau esančiai eilutei, nei vėliau aiškinti, kodėl rodiklis toks.