Kontaktovat podporu

Odpovíme e-mailem, obvykle do dvou dnů.

Google reCAPTCHA kontroluje toto odeslání kvůli ochraně před zneužitím; data se přitom předávají společnosti Google. Skript se načte až při otevření tohoto formuláře.

← Všechny články

Když mezipaměť škáluje opačným směrem

Ve složce mezipaměti této služby leží čtyři malé soubory. Největší má 35 bajtů. Dohromady obsahují tři čísla počítadel a čtou se při každém jednotlivém požadavku na počítadlo.

Existují proto, aby se cesta počítání nemusela ptát databáze na čtyři otázky, na které téměř vždy odpoví „ne“. Vylučuje toto počítadlo vlastní návštěvy majitele? Sleduje odchozí kliknutí? Sleduje cesty webem? Obnovuje se samo? U více než 99 % počítadel je každá odpověď ne a soubor s hrstkou čísel, u nichž je odpověď ano, je levnější prohlédnout než položit čtyři dotazy přes index.

Je levnější. Je to ale ten druh levnosti, který se obrací.

2 10 100 1 000 10 000 100 000 všech 2 218 aktivních počítadel: 0,43 ms soubor: 0,02 ms při 3 číslech, 21,4 ms při 100 000 jeden dotaz přes index: 0,16 ms při každé velikosti

Co se měřilo

Stejná otázka — „je toto počítadlo v seznamu?“ — položená dvěma způsoby při šesti velikostech seznamu. Cesta přes soubor: přečíst ho, dekódovat JSON, hledat číslo. Cesta přes databázi: jeden připravený příkaz nad indexovaným sloupcem. Každá dva tisíce opakování, pět kol, bere se medián.

Při dnešní velikosti soubor vítězí osmkrát: 0,0202 milisekundy proti 0,1630. Při tisíci číslech jsou vyrovnané. Při deseti tisících stojí soubor dvanáctkrát víc a při sto tisících 135krát víc, protože to už je 578 kilobajtů, které se musí přečíst a zpracovat při každém přístupu.

Čára databáze se nehne. 0,16 milisekundy při dvou řádcích a 0,16 milisekundy při sto tisících: k tomu index slouží a snadno se zapomene, kolik práce se skrývá za tím, jak nudně ta čára vypadá.

Nepříjemná část

Bod zlomu leží někde mezi 100 a 1 000 čísly. Tato služba má 2 218 počítadel, která byla aktivní za posledních třicet dní.

Kdyby tedy funkce vyloučení byla úspěšná — kdyby si každý, kdo má počítadlo, zapnul „nepočítat moje vlastní návštěvy“ — soubor by obsahoval 2 218 čísel, vážil 11 kilobajtů a stál 0,43 milisekundy na přístup místo 0,02. Při včerejších 18 423 přístupech to je osm sekund práce denně, jen aby se ušetřil dotaz, který by zabral tři.

Optimalizace je nejrychlejší, když se funkce používá nejméně. Nezhoršuje se postupně se zátěží, jako pomalý dotaz. Zhoršuje se s rozšířením funkce, což je jediná osa, kterou nikdo nesleduje, protože rostoucí používání má být přece dobrá zpráva.

Proč tu pořád je

Protože dnes je správná, a „dnes správná“ smí být důvodem pro něco, pokud někdo zapsal, kdy to přestane platit.

Tři čísla ve třech souborech. Osmkrát levnější než alternativa, na stroji, kde je cesta počítání jediná věc, která musí být rychlá. Nahradit ji teď dotazem, který poráží, by znamenalo horší systém zdůvodněný hypotézou.

Potřebuje pojistku, ne přepsání. Soubor se stejně zapisuje z databáze, kódem, který mění nastavení — to je přirozené místo, kde si všimnout, že seznam přerostl pár stovek položek, a ohlásit to. Mezipaměť se zdokumentovaným stropem je rozhodnutí. Mezipaměť bez něj je sázka, se kterou nikdo nesouhlasil.

Obecný vzorec

Není to argument proti ukládání mezipaměti do souboru. Je to argument pro to vědět, kterým směrem mezipaměť škáluje.

Většina mezipamětí se pod zátěží zlepšuje: víc požadavků, víc zásahů, lepší poměr. Tahle patří k tomu druhému druhu. Její cena za požadavek závisí na tom, kolik dat drží, a to, co drží, roste s tím, co se služba snaží podporovat. Každé čtení platí za každou položku, včetně 2 215, které nemají nic společného s návštěvníkem, jenž se právě počítá.

U každé vyhledávací tabulky držené v paměti nebo v souboru se nemáme ptát „jak je rychlá“, ale „co ji nechá růst a co se stane, když se tomu bude dařit“. Pokud zní odpověď „zpomalí se“, patří limit velikosti do kódu, vedle toho, co soubor zapisuje, a to hned v den, kdy vzniká.

Reklama