Obrati se podršci

Odgovaramo e-poštom, obično u roku od dva dana.

Google reCAPTCHA provjerava ovu prijavu radi zaštite od zlouporabe; podaci se šalju tvrtki Google. Skripta se učitava tek kada se otvori ovaj obrazac.

← Sve objave

Kada predmemorija raste u pogrešnom smjeru

O sadržaju i njegovoj provjeri

U ovom članku

U mapi predmemorije ove usluge nalaze se četiri male datoteke. Najveća ima 35 bajtova. Zajedno čuvaju tri broja brojača i čitaju se pri svakom pojedinom zahtjevu za brojač.

Postoje kako postupak brojanja ne bi morao postavljati bazi četiri pitanja na koja ona gotovo uvijek odgovara s „ne“. Izuzima li ovaj brojač vlastite posjete vlasnika? Prati li odlazne klikove? Prati li putanje kroz web-mjesto? Ponovno se učitava? Za više od 99 % brojača svaki je odgovor ne, a datoteku sa šačicom brojeva za koje je odgovor da jeftinije je provjeriti od četiri indeksirana upita.

Jeftinije je. Ujedno je to vrsta jeftinog koja se preokrene.

2 10 100 1,000 10,000 100,000 svih 2.218 aktivnih brojača: 0,43 ms datoteka: 0,02 ms za 3 broja, 21,4 ms za 100.000 jedan indeksirani upit: 0,16 ms pri svakoj veličini

Što je izmjereno

Isto pitanje — „je li ovaj brojač na popisu?“ — postavljeno na dva načina, pri šest veličina popisa. Putem datoteke: pročitati je, dekodirati JSON, potražiti broj. Putem baze podataka: jedna pripremljena naredba nad indeksiranim stupcem. Po dvije tisuće ponavljanja, pet krugova, uzet medijan.

Pri današnjoj veličini datoteka pobjeđuje osam puta: 0,0202 milisekunde nasuprot 0,1630. Pri tisuću brojeva troškovi su jednaki. Pri deset tisuća datoteka košta dvanaest puta više, a pri stotinu tisuća 135 puta više jer je tada riječ o 578 kilobajta koje treba pročitati i raščlaniti pri svakom pregledu.

Linija baze podataka ne pomiče se. 0,16 milisekundi za dva retka i 0,16 milisekundi za stotinu tisuća: tome služi indeks i lako je zaboraviti koliko se posla skriva iza dosadnog izgleda te linije.

Neugodan dio

Točka presijecanja negdje je između 100 i 1.000 brojeva. Ova usluga ima 2.218 brojača koji su bili aktivni u posljednjih trideset dana.

Kada bi, dakle, izuzimanje bilo uspješno — kada bi svatko tko ima brojač uključio „ne broji moje posjete“ — datoteka bi čuvala 2.218 brojeva, imala 11 kilobajta i koštala 0,43 milisekunde po pregledu umjesto 0,02. Uz jučerašnjih 18.423 pregleda to je osam sekundi rada dnevno kako bi se izbjegao upit koji bi trajao tri.

Optimizacija je najbrža kada se funkcija najmanje koristi. Ne pogoršava se postupno s opterećenjem, kao spor upit. Pogoršava se s prihvaćanjem funkcije, a to je jedina os koju nitko ne prati jer bi rast prihvaćanja trebao biti dobra vijest.

Zašto je još ondje

Jer je danas ispravna, a „danas ispravno“ smije biti razlog za nešto, dok god je netko zapisao kada prestaje vrijediti.

Tri broja u trima datotekama. Osam puta jeftinije od druge mogućnosti, na stroju gdje je postupak brojanja jedino što mora biti brzo. Zamijeniti je sada upitom koji je sporiji značilo bi lošiji sustav opravdan hipotezom.

Treba joj okidač upozorenja, a ne ponovno pisanje. Datoteka se ionako zapisuje iz baze podataka, kodom koji mijenja postavku — to je prirodno mjesto za uočavanje da je popis prešao nekoliko stotina unosa i za obavijest o tome. Predmemorija s dokumentiranom gornjom granicom odluka je. Predmemorija bez nje oklada je na koju nitko nije pristao.

Opći oblik

Ovo nije argument protiv predmemoriranja u datoteci. Argument je za razumijevanje smjera u kojem predmemorija raste.

Većina predmemorija postaje bolja pod opterećenjem: više zahtjeva, više pogodaka, bolji omjer. Ova je druge vrste. Trošak po zahtjevu funkcija je količine podataka koje čuva, a oni rastu s onim što usluga pokušava poticati. Svako čitanje plaća svaki unos, uključujući 2.215 koji nemaju nikakve veze s posjetiteljem koji se upravo broji.

Pitanje za svaku tablicu pretraživanja u memoriji ili datoteci nije „koliko je brza“, nego „zbog čega raste i što se događa kada to ide dobro“. Ako je odgovor „postaje sporija“, ograničenje veličine pripada u kod, pokraj onoga što zapisuje datoteku, na dan izrade.

Oglas