740 likes | 935 Views
Dotazování nad proudy dat. NDBI001 10.12.2013, Jan Drozen. O čem bude řeč. Úvod Motivace Dotazování Algoritmy Shrnutí. Úvod. Systém řízení proudu dat. DBMS > DSMS DSMS je nadmnožina DBMS Dají se simulovat pomocí procedurálních prostředků v DBMS. Rozdíly DBMS oproti DSMS. DBMS. DSMS.
E N D
Dotazování nad proudy dat NDBI001 10.12.2013, Jan Drozen
O čem bude řeč • Úvod • Motivace • Dotazování • Algoritmy • Shrnutí
Systém řízení proudu dat • DBMS > DSMS • DSMS je nadmnožina DBMS • Dají se simulovat pomocí procedurálních prostředků v DBMS
Rozdíly DBMS oproti DSMS DBMS DSMS Proudy jsou dočasné Pouze sekvenční zpracování Dlouhotrvající dotazy Omezená primární paměť (GB) • Data trvale uložená • Možnost náhodného přístupu • Jednorázové dotazy • Velká sekundární paměť (TB)
Rozdíly DBMS oproti DSMS - pokračování DBMS DSMS Data závislá na pořadí na vstupu Velmi velmi častý zápis Rychlost velmi důležitá Mohou (musí) stačit pouze aproximované výsledky • Data v přesně definovaném známém stavu • Relativně statická povaha • Menší nároky na rychlost • Očekáváme přesné deterministické výsledky
Příklady • Tradebot – webový finanční vyhledávač, vyhodnocuje dotazy vůči aktuálním datům • Dnes už neaktivní • iPolicyNetworks – uplatňování různých pravidel ve velkých sítích • Také nedostupné • Synchronizace distribuovaných systémů – Yahoo • Monitorování senzorů
Sledování síťového provozu - příklad • Podrobnější motivační příklad • Mějme poskytovatele připojení k Internetu (ISP) • Disponuje rozsáhlou páteřní sítí • Požadavek na trasování paketů a monitorování provozu
Sledování síťového provozu – pokr. • Řešení • Specializovaný systém pouze pro danou úlohu • Vlastní řešení • Logování a zpětné offline vyhodnocování
Sledování síťového provozu – pokr. • Model sítě: • Linka C propojuje páteřní síť ISP se sítí koncového zákazníka • Linka B propojuje dva routery uvnitř páteřní sítě ISP • B a C označíme proudy trasovacích dat odpovídající provozu na těchto linkách
Sledování síťového provozu – pokr. • Trasovací data obsahují hlavičku formátu: • zdroj– IP adresa odesilatele • cil– IP adresa příjemce • id– identifikační číslo generované odesilatelem, aby příjemce mohl jednoznačně identifikovat paket • delka – délka daného paketu • cas – informace o tom, kdy byl daný paket zaznamenán
Sledování síťového provozu – pokr. • Chceme umět formulovat dotaz Q1 takový, že: • Spočítá vytížení linky B průměrovaný po minutových intervalech • Pokud vytížení překročí určitou míru t, tak informuje operátora
Sledování síťového provozu – pokr. • Q1: • SELECT upozorniOperatora(SUM(delka))FROM BGROUPBYminuta(cas)HAVINGSUM(delka) > t • Možno simulovat pomocí triggerů • Pokud by byl provoz velký (např. optická linka), mohlo by dojít k problémům
Sledování síťového provozu – pokr. • Chceme umět formulovat dotaz takový, že: • Filtruje provoz pouze v páteřní síti • Rozdělí provoz na jednotlivé proudy • Určí intenzitu provozu v každém proudu • Proud definujeme jako sekvence paketů mezi určitým zdrojem a cílem
Sledování síťového provozu – pokr. • Q2: • SELECT idProudu, zdroj, cil, SUM(delka) AS delkaProuduFROM (SELECTzdroj, cil, delka, casFROM BORDERBY cas)GROUPBYzdroj, cil, ziskejIdProudu(zdroj, cil, cas) ASidProudu • ziskejIdProudu vrací identifikátor proudu na základě zdroje, cíle a času • GROUP BY a ORDER BY klauzule
Sledování síťového provozu – pokr. • Chceme umět formulovat dotaz takový, že: • Zjistíme, jakou část provozu páteřní linky můžeme přiřadit síti zákazníka
Sledování síťového provozu – pokr. • Q4: • SELECT(SELECTCOUNT(*)FROM C,BWHERE C.zdroj = B.zdroj AND C.cil = B.cil ANDC.id = B.id)/(SELECTCOUNT(*)FROM B) • Operace spojení • Nad proudy dat nemusí stačit paměť
Sledování síťového provozu – pokr. • Chceme umět (naposledy) formulovat dotaz takový, že: • Bude monitorovat páry zdroj – cíl • V páteřní síti • Pouze pro 5 procent s nejvyšším vytížením
Sledování síťového provozu – pokr. • Q4: • WITH vytizeni AS(SELECT zdroj, cil, SUM(delka) AS provozFROM BGROUPBY zdroj, cil)SELECT zdroj, cil, provozFROM vytizeni AS L1WHERE (SELECTCOUNT(*)FROM vytizeni AS L2WHERE L2.provoz < L1.provoz) > (SELECT 0.95 * COUNT(*)FROM vytizeni) )ORDERBY provoz
Problémy při dotazování • Prvky proudu dat přicházejí online • Systém nemá kontrolu nad pořadím, v jakém data přicházejí • Potenciálně neomezená velikost • Jakmile je prvek proudu dat zpracován, je archivován nebo zahozen • Pokud chceme jinak, musíme to explicitně vyjádřit
Typy dotazů • V klasickém DBMS spustíme dotaz a ten po vykonání vrací výsledky, které zpracujeme • To lze v DSMS samozřejmě také • Jednorázové dotazy (one-time queries) • Zahrnují i zmiňované DBMS dotazy • Rozlišujeme, protože existují i jiné dotazy • Dlouhotrvající dotazy (continuous queries) • Přidaná hodnota DSMS
Dělení dotazů • Podle zpracování • Jednorázové • Dlouhotrvající • Podle pokládání • Předdefinované • Známé před začátkem proudu • Jednoúčelové (ad-hoc) • Vytvořené v průběhu
Problémy s pamětí • Proudy dat jsou potenciálně neomezené -> proto i dotazy pro zpracování mohou požadovat neomezeně velkou paměť • DBMS pracují s externí (sekundární) pamětí – optimalizované algoritmy • Pro DSMS nemusí být použitelné • Nejsou navržené na dlouhotrvající dotazy • Pro vyhodnocování v reálném čase velká latence • DSMS typicky pro takové aplikace
Problémy s rychlostí • V DBMS dotazování nad známými daty • V DSMS při vykonávání dotazu přicházejí nová data • Rychlost zpracování musí být dostatečně vysoká • Jinak velká latence • Hrozí, že budou data zahozena ještě před zpracováním • Dále se omezíme pouze na práci s primární pamětí
Řešení problémů - aproximace • Pokud upustíme od požadavku na exaktní odpověď, můžeme se zbavit problémů • Ale omezíme si i výrazovou sílu dotazovacího jazyka • Dotazy vykonávány v omezeně velké paměti • Odpovědi aproximované • Kvalitní aproximace může pro většinu aplikací bez problémů dostačovat
Aproximace - pokračování • Různé techniky pro aproximace: • Sketch • Náhodné vzorkování • Histogramy • Vlnky (wavelets) • Předmětem výzkumu
Klouzavá okna • Základní myšlenka aproximovaných odpovědí • Nebudeme se dotazovat nad kompletními daty (celá historie proudu), ale pouze nad nějakým aktuálním úsekem • Např. data za poslední hodinu, týden,... • Řada výhod: • Dobře definovaná • Jednoduchá sémantika
Klouzavá okna - pokračování • Deterministická • Upřednostňují aktuální data • Typické pro reálné nasazení • Použitelné nejen pro aproximaci, ale i explicitně pro sémantiku • Právě omezení na určitý časový úsek
Klouzavá okna - pokračování • Ale i zde přetrvávají problémy: • Co když se ani okno nevejde do paměti? • Náročná implementace • Rozšíření SQL a relační algebry o práci s okny • Předmětem výzkumu
Dávkové zpracování, vzorkování, synopse • (batch processing, sampling, synopses) • Další techniky pro aproximativní dotazování • Budeme uvažovat datovou strukturu, do které můžeme zapisovat (inkrementálně se zvětšuje) • Potřebujeme operace: • update(n-tice) • Aktualizuje strukturu, když přijdou nová data • computeAnswer() • Vrátí nové nebo aktualizované výsledky dotazu
Operace • Jaká je rychlost updateacomputeAnswer? • Pokud je jedna z nich pomalejší (obě), než je průměrná doba mezi příchozími daty, nastává problém • Zpracování „neudrží krok“ s proudem • Není možné vrátit přesnou odpověď (relativně k uvažované podmnožině proudu)
Dávkové zpracování • Update je rychlá, computeAnswer pomalá • Přirozeným řešením je zpracovávat data v dávkách • Data jsou ukládána do mezipaměti (buffering) • Odpovědi jsou spočteny jednou za určitou dobu • Aproximativní v tom ohledu, že odpovědi nejsou v reálném čase
Vzorkování • Update pomalá, computeAnswer rychlá • Není možné pro výpočet odpovědi použít všechna potřebná data – přicházejí rychleji, než jsou zpracovávána • Některé příchozí n-tice jsou přeskočeny • Pouze omezená kvalita výsledků • Pro některé aplikace nevyhovující
Synopse • Chceme update i computeAnswer rychlé • Aproximativní datová struktura • Synopse nebo sketch (skica) • Typicky malá • Menší než přesná reprezentace • Opět předmětem výzkumů
Blokující operace • Blokující operátor je pro dotaz takový operátor, který potřebuje pro svůj výpočet znát všechna data, dříve než vydá jakýkoli výstup. • Např. třídění, COUNT, SUM, MIN, MAX, AVG,... • Záleží na pozici ve stromě dotazu • List • Pro DSMS nepoužitelné • Vnitřní uzel • V DSMS možné
Blokující operace - pokračování • Jako kořen může vracet průběžné výsledky dalším operátorům • Pokud je odpovědí jedna hodnota nebo je dostatečně malá - odpovídá jako proud dat – pokud se agregovaná hodnota změní, vrátí ji jako další prvek proudu • Pokud je odpověď delší, je vhodné udržovat datovou strukturu s „aktuálním stavem odpovědi“
Blokující operátory - řešení • Namísto blokujících operátorů jako vnitřních uzlů použít neblokující alternativy, které fungují stejně (ale aproximativně) • Např. JUGGLE operátor • Neblokující verze třídění • Přerovnává lokálně data • Negarantuje správný výsledek
Blokující operace – řešení pokračování • Punctuation • Rozhodnutí, že s některými daty se již nebude pracovat a mohou být poslána na výstup • Např. den >= 10 • „všechny další atributy den budou mít hodnotu alespoň 10“ • Data s menší hodnotou mohou být zpracována a odeslána
Dotazování na starší data • Data nejsou persistentně ukládána • Problém pro jednoúčelové dotazy – některá data již mohla být zahozena – nemožné odpovědět na dotaz přesně • Omezení dotazů pouze do budoucnosti • Omezující, ale v praxi použitelné • Možné udržovat agregované informace o proudu ve specializované struktuře • Zdroj dalších problémů
DSMS Stanford STREAM • Stanford StREam DatAManager • Prototyp implementace DSMS • Dotazovacím jazykem je rozšíření SQL • Umožňuje FROMklauzulí referencovat relace i proudy dat • Podpora dotazů nad klouzavými okny
STREAM – klouzavá okna • Klouzavá okna potřebují definované uspořádání na elementech proudu • Často dostačují časové známky příchozích dat (implicitní časová známka) • V mnoha případech je třeba definovat explicitně jako součást proudu • Formálně: • Proud dat S sestává z množin dvojic (n-tice, časová známka):
STREAM – klouzavá okna - pokračování • Časovou známkou může být čas (nečekaně), ale i identifikátor pořadí • Požadavkem je totálně uspořádaná doména s metrikou • Rozšíření SQL o volitelnou specifikaci okna ve FROMklauzuli • Pomocí hranatých závorek • Klauzule rozdělující proud do skupin – okno pro každou skupinu • Velikost okna • Ve „fyzických“ jednotkách – např. počet prvků okna • V „logických“ jednotkách – např. počet dní • predikát pro filtrování
STREAM – klouzavá okna - pokračování • Fyzická okna • klíčové slovo ROWS(ROWS 50 PRECEDING) • Logická okna • klíčové slovo RANGE(RANGE 15 MINUTESPRECEDING)
STREAM - příklady • Pro následující příklady uvažujme schéma: • záznamy o telefonních hovorech • atributy: id_zakaznika, typ, minut, cas • atribut cas je časovou známkou určující pořadí
STREAM – příklad I • Chceme spočítat průměrnou délku hovoru, uvažujíc pouze 10 posledních meziměstských hovorů pro každého zákazníka • SELECTAVG(S.minut)FROM hovory AS S [PARTITIONBYS.id_zakaznikaROWS 10 PRECEDINGWHERE S.typ = ‘Mezimesto‘]
STREAM – příklad II • Chceme spočítat průměrnou délku hovoru, uvažujíc pouze meziměstské z deseti posledních hovorů pro každého zákazníka • SELECTAVG(S.minut)FROM hovory AS S [PARTITION BY S.id_zakaznikaROWS 10 PRECEDING]WHERE S.typ = ‘Mezimesto‘
STREAM – příklad III • Chceme zjistit průměrnou délku posledních 1000 hovorů, které uskutečnili zákazníci z kategorie „Gold“ • SELECTAVG(V.minut)FROM (SELECT S.minutFROM hovory AS S, zakaznici AS TWHERE S.id_zakaznika = T.id_zakaznikaAND T.kategorie = ‘Gold‘)AS V [ROWS 1000 PRECEDING]
Časové známky • Jsou velmi důležité • V předchozích příkladech jsme používali implcitní • Co se stane, když jsou n-tice původem z různých proudů? • Např. použití operátorů spojení – jakou známku má dostat výsledek? • Explicitní známky mají jiný problém • Data nemusejí přijít v pořadí podle známek (např. vlivem stavu sítě)