← Analytics / analytics / analytics-engine
Vzorkování s WAE
Workers Analytics Engine umožňuje zapisovat rozsáhlé objemy dat a rychle je načítat, a to za minimální nebo nulové náklady. Aby bylo možné zapisovat velké objemy dat za rozumnou cenu, využívá Workers Analytics Engine vážené adaptivní vzorkování ↗.
Při využívání vzorkování nepotřebujete pro zodpovězení otázek o datové sadě úplně každý datový bod. U dostatečně velké datové sady potřebná velikost vzorku ↗ nezávisí na velikosti původní populace. Potřebná velikost vzorku závisí na rozptylu vaší veličiny, velikosti analyzovaných podskupin a na tom, jak přesný musí být váš odhad.
Pro Analytics Engine to znamená, že dokážeme velmi rozsáhlé datové sady zkomprimovat do mnohem menšího počtu pozorování, a přesto zodpovědět většinu dotazů s velmi vysokou přesností. Díky tomu můžeme nabídnout analytickou službu, která dokáže měřit velmi vysoké míry využití s neomezenou kardinalitou za nízkou a předvídatelnou cenu.
Na obecné úrovni funguje vzorkování takto:
- Při zápisu vzorkujeme, pokud jsou datové body do jednoho indexu zapisovány příliš rychle.
- Pokud je dotaz příliš složitý, provedeme při jeho zpracování další vzorkování.
V následujících částech se dozvíte:
- Jak funguje vzorkování.
- Jak číst vzorkovaná data.
- Jak se data vzorkují.
- Jak funguje vzorkování Adaptive Bit Rate.
- Jak zvolit index tak, aby byla vaše data vzorkována použitelným způsobem.
Jak funguje vzorkování
Vzorkování dat Cloudflare funguje podobně jako u online mapových služeb, jako je Google Maps, které vykreslují mapy v různých úrovních přiblížení. Při zobrazení satelitního snímku celého kontinentu poskytne mapová služba obrázky v odpovídající velikosti podle rozlišení obrazovky uživatele a rychlosti jeho internetového připojení.
Každý pixel na mapě představuje rozsáhlou oblast, například několik čtverečních kilometrů. Kdyby se uživatel pokusil přiblížit obraz pomocí snímku obrazovky, výsledek by byl rozmazaný. Mapová služba proto při přiblížení na konkrétní město místo toho načte snímky ve vyšším rozlišení. Celkový počet pixelů zůstává přibližně stejný, ale každý pixel nyní představuje menší oblast, řádově jednotky metrů čtverečních.
Klíčové je, že kvalita mapy nezávisí pouze na rozlišení nebo ploše, kterou představuje jeden pixel. Určuje ji celkový počet pixelů použitých k vykreslení výsledného zobrazení.
Existují podobnosti mezi tím, jak mapová služba řeší rozlišení, a tím, jak Cloudflare Analytics poskytuje analytická data pomocí adaptivních vzorků:
- Jak se data ukládají:
- Mapová služba: Snímky uložené v různých rozlišeních.
- Cloudflare Analytics: Události uložené s různou rychlostí vzorkování.
- Jak se data zobrazují uživateli:
- Mapová služba: Celkový počet pixelů je pro danou velikost obrazovky přibližně konstantní bez ohledu na zvolenou oblast.
- Cloudflare Analytics: Pro každý dotaz se čte podobný počet událostí bez ohledu na velikost datové sady nebo zvolenou délku období.
- Jak se vybírá rozlišení:
- Mapová služba: Plocha reprezentovaná jedním pixelem závisí na velikosti vykreslované mapy. U více oddáleného náhledu mapy představuje každý pixel větší plochu.
- Cloudflare Analytics: Interval vzorkování jednotlivých událostí ve výsledku závisí na velikosti podkladové datové sady a zvolené délce období. U dotazu nad rozsáhlou datovou sadou nebo dlouhým časovým úsekem může jedna vzorkovaná událost zastupovat mnoho podobných událostí.
Jak číst vzorkovaná data
Než začnete efektivně psát dotazy a analyzovat data, je užitečné nejprve pochopit, jak se v Workers Analytics Engine čtou vzorkovaná data.
Ve Workers Analytics Engine se každá událost zaznamenává s polem _sample_interval pole. Interval vzorkování je převrácenou hodnotou rychlosti vzorkování. Pokud je například použita rychlost vzorkování jedno procento (1%), sample_interval bude nastaveno na 100.
Zjednodušeně řečeno, v analogii s mapou interval vzorkování představuje „počet nevzorkovaných datových bodů“ (kilometry nebo metry), které reprezentuje daný vzorkovaný datový bod (pixel).
Interval vzorkování je vlastnost přiřazená ke každému jednotlivému řádku uloženému ve Workers Analytics Engine. Vzhledem k implementaci rovnoměrného vzorkování se může interval vzorkování u jednotlivých řádků lišit. Při dotazování dat je proto třeba brát v úvahu pole intervalu vzorkování. Pouhé vynásobení výsledku dotazu konstantním faktorem vzorkování nestačí.
Následuje několik příkladů, jak zapsat běžné dotazy nad vzorkovanými daty.
| Případ použití | Příklad bez vzorkování | Příklad se vzorkováním |
|---|---|---|
| Počítání událostí v datové sadě | count() |
sum(_sample_interval) |
| Sečtěte množství, například počet bajtů | sum(bytes) |
sum(bytes * _sample_interval) |
| Vypočítat průměr hodnoty | avg(bytes) |
sum(bytes * _sample_interval) / sum(_sample_interval) |
| Výpočet kvantilů | quantile(0.50)(bytes) |
quantileExactWeighted(0.50)(bytes, _sample_interval) |
Přesnost výsledků neurčuje interval vzorkování, podobně jako v dříve zmíněné analogii s mapou. I vysoký interval vzorkování může poskytnout přesné výsledky. Přesnost totiž závisí na celkovém počtu dotazovaných datových bodů a na jejich rozložení.
Jak se data vzorkují
Chcete-li určit interval vzorkování pro jednotlivé události, mějte na paměti, že většina analytických dat obsahuje důležitou podskupinu, kterou je třeba analyzovat s přesnými výsledky. Můžete například chtít analyzovat využití uživateli nebo provoz na konkrétní názvy hostitelů. Uživatelé Analytics Engine mohou tyto skupiny definovat vyplněním index pole při zápisu události. To umožňuje cílenější a přesnější analýzu v rámci zadaných skupin.
Další pozorování je, že tyto hodnoty indexu mají pravděpodobně velmi rozdílný počet zapsaných událostí. Využití většiny webových služeb ve skutečnosti sleduje Paretovo rozdělení ↗, což znamená, že několik málo nejaktivnějších uživatelů bude odpovídat za naprostou většinu využití. Paretova rozdělení jsou běžná a vypadají takto:
Kdybychom vzali jednoduchý náhodný výběr ↗ z jednoho procenta (1%) těchto dat a tento vzorek jsme aplikovali na celou populaci, mohli byste sice přesně sledovat své největší zákazníky, ale ztratili byste přehled o tom, co dělají vaši menší zákazníci:
Všimněte si, že větší sloupce vypadají víceméně beze změny, a přesto jsou stále poměrně přesné. Při analýze menších zákazníků se ale výsledky stávají kvantizovaný ↗ a mohou být dokonce zaokrouhleny na 0.
To ukazuje, že zatímco pro velkou populaci může stačit vzorek jednoho procenta (1 %) nebo i menší, u malé populace může být pro dosažení přesných výsledků potřeba uložit větší podíl událostí.
Děláme to pomocí techniky nazvané rovnoměrné vzorkování. Znamená to, že vyrovnáváme počet uložených událostí pro každou jedinečnou hodnotu indexu. U relativně neobvyklých hodnot indexu proto můžeme zapisovat všechny datové body, které získáme přes writeDataPoint(). Pokud ale do jedné hodnoty indexu zapíšete velké množství datových bodů, začneme vzorkovat.
Stejné rozložení, tentokrát ale s (simulací) rovnoměrného vzorkování:
Možná si všimnete, že tento graf je velmi podobný prvnímu grafu. Vyžaduje ale pouze <10% z celkových uložených dat. Míra vzorkování je ve skutečnosti mnohem nižší než 10% pro větší řady (to znamená, že ukládáme delší vzorkovací intervaly), avšak u menších řad je vzorkovací frekvence vyšší.
Vraťme se k analogii s mapou z předchozí části. Ať je zobrazená oblast mapy jakkoli velká, celkový počet pixelů v mapě zůstává stejný. Stejně tak chceme pro každou hodnotu indexu ukládat podobný počet datových bodů. Rozlišení mapy, tedy kolik plochy představuje jeden pixel, se ale mění podle toho, jak velká oblast se zobrazuje. Podobně se i zde bude množství dat reprezentovaných jedním uloženým datovým bodem lišit podle celkového počtu datových bodů v indexu.
Vzorkování Adaptive Bit Rate při čtení
Rovnoměrné vzorkování zajišťuje, že se v daném časovém úseku pro každý index uchovává stejné množství dat. Doba, kterou dotazy pokrývají, se ale může výrazně lišit: některé vyžadují jen desetiminutový snímek dat, zatímco jiné potřebují analyzovat data za 10 týdnů, tedy o 10 000krát delší období.
K řešení tohoto problému používáme metodu zvanou adaptivní bitová rychlost ↗ (ABR). Díky ABR dotazy pokrývající delší časové rozsahy načítají data s vyšším intervalem vzorkování, což jim umožňuje dokončit se v rámci pevně stanoveného časového limitu. Zjednodušeně řečeno: stejně jako je v naší mapové analogii pevně daným zdrojem velikost obrazovky nebo šířka pásma, je pevně daná i doba potřebná k dokončení dotazu. Bez ohledu na objem zahrnutých dat proto musíme omezit celkový počet prohledaných řádků, abychom na dotaz dokázali odpovědět. To zajišťuje spravedlnost: bez ohledu na velikost dotazované datové sady zajišťujeme, aby všechny dotazy dostaly stejný podíl dostupného výpočetního času.
Toho dosahujeme tak, že data ukládáme ve více rozlišeních (tedy s různou úrovní detailu, například 100 %, 10 %, 1 %) odvozených z rovnoměrně vzorkovaných dat. V okamžiku dotazu vybereme nejvhodnější rozlišení dat ke čtení podle složitosti dotazu. Složitost dotazu se určuje podle počtu řádků, které je třeba načíst, a pravděpodobnosti, že se dotaz dokončí v rámci zadaného časového limitu N sekund. Díky dynamickému výběru vhodného rozlišení optimalizujeme výkon dotazu a zajišťujeme, že zůstane v rámci vyhrazeného časového rozpočtu.
Hlavní výhodou ABR je, že umožňuje trvale poskytovat výsledky dotazů v rámci pevně stanoveného rozpočtu dotazu, bez ohledu na velikost dat nebo délku sledovaného období. Tím se ABR liší od systémů, které si při práci s rozsáhlými datovými sadami neporadí s časovými limity, chybami nebo vysokými náklady.
Jak vybrat index
Chcete-li u vzorkovaných dat získat přesné výsledky, zvolte jako index vhodnou hodnotu. Index by měl odpovídat tomu, jak budou uživatelé data dotazovat a zobrazovat. Pokud uživatelé například často zobrazují data podle konkrétního zařízení nebo názvu hostitele, doporučujeme tyto atributy do indexu zahrnout.
Index má následující vlastnosti, které je důležité zvážit při jeho výběru:
- Získejte přesné souhrnné statistiky o celé datové sadě napříč všemi hodnotami indexu.
- Získejte přesný počet jedinečných hodnot svého indexu.
- Získejte přesné souhrnné statistiky (například počet, součet) v rámci konkrétní hodnoty indexu.
- Viz
Top Nhodnoty konkrétních polí, která nejsou ve vašem indexu. - Filtrovat lze podle většiny polí.
- Proveďte i další agregace, například kvantily.
Je třeba zvážit následující omezení a kompromisy:
- U polí, která nejsou ve vašem indexu, nemusíte získat přesné počty jedinečných hodnot.
- Pokud například indexujete podle
hostname, nemusí být možné spočítat počet jedinečných URL adres.
- Pokud například indexujete podle
- U polí, která nejsou v indexu, se vám nemusí podařit zaznamenat velmi vzácné hodnoty.
- Může jít například o konkrétní URL adresu pro daný hostitel, pokud indexujete podle hostitele a máte miliony jedinečných URL adres.
- Nemusíte být schopni spustit přesné dotazy najednou napříč více indexy.
- Přesné výsledky tak můžete například očekávat jen při dotazu na jednoho hostitele najednou (nebo na všechny).
- Není zaručeno, že se vám podaří načíst jakýkoli jednotlivý záznam.
- Přesné pořadí událostí nemusíte být schopni vždy zpětně zrekonstruovat.
Ve většině případů se nedoporučuje zapisovat na každý řádek jedinečnou hodnotu indexu (například UUID). I když díky tomu půjde jednotlivé datové body načítat velmi rychle, zpomalí to většinu dotazů pro agregace a časové řady.
Viz časté otázky k Workers Analytics Engine, konkrétně k tématu Vzorkování.