Kui vahemälu skaleerub valesse suunda
Sisust ja selle ülevaatamisest
Selles artiklis
Selle teenuse vahemälukaustas on neli väikest faili. Suurim on 35 baiti. Kokku sisaldavad need kolme loenduri numbrit ja neid loetakse igal ainsal loenduripäringul.
Need on olemas, et loendamise tee ei peaks andmebaasilt küsima nelja küsimust, millele vastus on peaaegu alati „ei“. Kas see loendur välistab omaniku enda külastused? Jälgib väljuvaid klõpse? Jälgib teid saidi sees? Laeb ennast uuesti? Enam kui 99% loendurite puhul on iga vastus ei ja fail, mis hoiab käputäit numbreid, kus vastus on jah, on odavam kui neli indekseeritud päringut.
See on odavam. See on ka selline odav, mis pöördub.
Mida mõõdeti
Sama küsimust — „kas see loendur on loendis?“ — küsiti kahel viisil, kuue loendisuuruse juures. Faili viis: lugeda, dekodeerida JSON, otsida numbrit. Andmebaasi viis: üks ettevalmistatud lause indekseeritud veeru vastu. Kaks tuhat kordust kumbki, viis vooru, võeti mediaan.
Tänase suuruse juures võidab fail kaheksa korda: 0,0202 millisekundit versus 0,1630. Tuhande numbri juures on nad võrdsed. Kümne tuhande juures maksab fail kaksteist korda rohkem ja saja tuhande juures 135 korda rohkem, sest siis on igal vaatamisel vaja lugeda ja parsida 578 kilobaiti.
Andmebaasi joon ei liigu. 0,16 millisekundit kahe rea juures ja 0,16 millisekundit saja tuhande juures: just selleks indeks ongi ja seda on lihtne unustada, kui palju tööd peitub selle joone igavuse taga.
Ebamugav osa
Ristumine on kuskil 100 ja 1000 numbri vahel. Sellel teenusel on 2 218 loendurit, mis olid viimase kolmekümne päeva jooksul aktiivsed.
Seega, kui välistusfunktsioon oleks edukas — kui kõik, kellel on loendur, lülitaksid sisse „ära loe minu enda külastusi“ — sisaldaks fail 2 218 numbrit, kaaluks 11 kilobaiti ja maksaks 0,43 millisekundit vaatamise kohta 0,02 asemel. Eilse 18 423 vaatamise juures on see kaheksa sekundit tööd päevas, et vältida päringut, mis oleks võtnud kolm.
Optimeering on kõige kiirem siis, kui funktsiooni kasutatakse kõige vähem. See ei halvene järk-järgult koormusega, nagu aeglane päring. See halveneb kasutuselevõtuga, mis on ainus telg, mida keegi ei vaata, sest kasutuselevõtu kasv peaks olema hea uudis.
Miks see ikka veel seal on
Sest see on täna õige ja „täna õige“ võib olla millegi põhjus, kui keegi on üles kirjutanud, millal see lakkab tõene olemast.
Kolm numbrit kolmes failis. Kaheksa korda odavam kui alternatiiv, masinal, kus ainult loendamise tee peab olema kiire. Selle asendamine praegu päringuga, mida see võidab, oleks halvem süsteem, mida õigustab hüpotees.
Vaja on häirepunkti, mitte ümberkirjutamist. Fail kirjutatakse andmebaasist niikuinii, koodiga, mis seadistust muudab — see on loomulik koht, kus märgata, et loend on kasvanud üle mõnesaja kirje, ja sellest teatada. Dokumenteeritud ülempiiriga vahemälu on otsus. Ülempiirita vahemälu on kihlvedu, millega keegi pole nõustunud.
Üldine kuju
See ei ole argument faili vahemällu panemise vastu. See on argument selle teadmise poolt, mis suunas vahemälu skaleerub.
Enamik vahemälusid paraneb koormuse all: rohkem päringuid, rohkem tabamusi, parem suhe. See siin on teist sorti. Selle hind päringu kohta sõltub sellest, kui palju andmeid see hoiab, ja see, mida see hoiab, kasvab koos sellega, mida teenus püüab soodustada. Iga lugemine maksab iga kirje eest, kaasa arvatud 2 215 jaoks, millel pole mingit pistmist külastajaga, keda just praegu loetakse.
Küsimus, mida esitada mis tahes mälus või failis hoitavale otsingutabelile, ei ole „kui kiire see on“, vaid „mis paneb selle kasvama ja mis juhtub, kui see läheb hästi“. Kui vastus on „see läheb aeglasemaks“, kuulub suuruspiirang koodi, selle kõrvale, mis faili kirjutab, ehitamise päeval.