Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha

Podobné dokumenty
6. Fyzická (interní) úroveň databázového systému

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

6. Fyzická (interní) úroveň databázového systému

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

NPRG030 Programování I, 2018/19 1 / :03:07

Optimalizace dotazů slajdy k přednášce NDBI001

Algoritmizace prostorových úloh

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Optimalizace dotazů slajdy k přednášce DBI006

Stromy, haldy, prioritní fronty

Časová a prostorová složitost algoritmů

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Kapitola 11: Indexování a hešování. Základní představa

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

KMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d

Operátory ROLLUP a CUBE

Technické informace. PA152,Implementace databázových systémů 4 / 25. Projekty. pary/pa152/ Pavel Rychlý

Základní datové struktury III: Stromy, haldy

Úvod do programování

TÉMATICKÝ OKRUH Počítače, sítě a operační systémy

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Prioritní fronta, halda

1. Databázové systémy (MP leden 2010)

TGH07 - Chytré stromové datové struktury

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Dynamické datové typy a struktury

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Kapitola 10: Diskové a souborové struktury. Klasifikace fyzických médií. Fyzická média

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Digitální učební materiál

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Binární soubory (datové, typované)

04 - Databázové systémy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

TGH07 - Chytré stromové datové struktury

Složitosti základních operací B + stromu

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Databázové systémy Tomáš Skopal

Algoritmy výpočetní geometrie

Dynamické programování

Stromové struktury v relační databázi

NORMALIZACE Část 2 1

Datové struktury 2: Rozptylovací tabulky

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

NPRG030 Programování I, 2018/19 1 / :25:37

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Implementace LL(1) překladů

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Standardní algoritmy vyhledávací.

Algoritmy na ohodnoceném grafu

Binární vyhledávací stromy pokročilé partie

Databázové systémy BIK-DBS

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Základní pojmy teorie množin Vektorové prostory


B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Organizace a zpracování dat I

Algoritmy I, složitost

Algoritmy a datové struktury

Profilová část maturitní zkoušky 2013/2014

Základy algoritmizace. Hašování

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

LabView jako programovací jazyk II

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Úvod do teorie grafů

IB111 Úvod do programování skrze Python

Digitální učební materiál

Ukládání a vyhledávání XML dat

Databáze I. 5. přednáška. Helena Palovská

Třídění a vyhledávání Searching and sorting

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

NPRG030 Programování I, 2017/18 1 / :22:16

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Kapitola 3: Relační model. Základní struktura. Relační schéma. Instance relace

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Poslední aktualizace: 14. října 2011

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Kapitola 6: Omezení integrity. Omezení domény

Dotazovací jazyk pro řazená data

Téma 10 Přístup k datům

Spojová implementace lineárních datových struktur

Rekurzivní algoritmy

Transkript:

Vyhodnocování dotazů slajdy k přednášce NDBI001 Jaroslav Pokorný MFF UK, Praha pokorny@ksi.mff.cuni.cz

Časová a prostorová složitost Jako dlouho trvá dotaz? CPU (cena je malá; snižuje se; těžko odhadnutelná) Disk (hlavní složka ceny, # I/O operací) Kolik n-tic je třeba přenést? Jaké statistiky je třeba udržovat? Dotazovací jazyky 2

Statistiky Statistiky pro každou relaci: n R V(A,R) p R b R M l(a,r) Značení: buffer R počet n-tic relace R počet prvků R[A] počet stránek k uložení R blokovací faktor počet stránek volného prostoru v RAM počet úrovní indexového souboru pro A v R celistvý počet stránek pro R v RAM (neuvažujeme caching) #1 #2 #3 b R #n R Dotazovací jazyky 3

Indexace B + -stromy: Pro atribut A relace R: f A,R : průměrný počet následníků ve vnitřním uzlu (~50-100) I(A,R): # úrovní indexu (~2-3) ~ log(v(a,r))/log(f A,R ) p R,A : # listových stránek l(a,r) Značení: A místo R.A p R,A Dotazovací jazyky 4

Metody pro výpočet selekce select * from R where A = a Případy: A je primární klíč, A je sekundární (alternativní) klíč k A existuje index - obyčejný nebo typu CLUSTER A je hašovaný klíč Předpoklady: rovnoměrné rozložení hodnot A v R[A] n R(A=a) = n R /V(A,R) Dotazovací jazyky 5

Metody pro výpočet selekce Sekvenční vyhledávání p R /*nejhorší případ*/ p R /2 /* průměrně, je-li A primární klíč*/ #1 #2 #3 b R #n R Dotazovací jazyky 6

Metody pro výpočet selekce Binární vyhledávání, je-li R uspořádaná podle A log 2 (p R ) /*je-li A primární klíč */ log 2 (p R ) + n R(A=a) /b R /*je-li A libovolný atribut */ #1 #2 #3 b R #n R Dotazovací jazyky 7

Metody pro výpočet selekce Vyhledávání, existuje-li pro A index l(a) + 1 /*je-li A primární klíč*/ l(a) + n R(A=a) /b R /*je-li index pro A typu CLUSTER*/ l(a) + n R(A=a) /*není-li index pro A typu CLUSTER*/ Vyhledávání, je-li A hašovaný atribut 1 přístup... #1 #2 #3 b R #n R Dotazovací jazyky 8

Metody pro výpočet selekce select * from R where A < a Sekvenční vyhledávání p R /* nejhorší případ*/ p R (a min A )/(max A min A ) /*je-li R setříděná dle A*/ Vyhledávání, existuje-li index l(a) + p R /2 /*je-li R setříděná dle A*/ l(a) + p R,A /2 + n R /2 /* je-li index pro A, A je sekundární klíč*/ Dotazovací jazyky 9

Příklad Rezervace(č_zák, č_letu, datum, pozn) n Rezervace = 10 000 b Rezervace = 20 V(č_zák, Rezervace) = 500 V(č_letu, Rezervace) = 50 f č_letu,r = 20 Dotaz: Najdi zákazníky s číslem letu = 77 Dotazovací jazyky 10

Příklad Sekvenční hledání: cena dotazu: 500 diskových přístupů Klastrovaný index pro č_letu: cena dotazu = l(č_letu) + n R(č_letu=a) /b R l(a): 50 hodnot f A = 20 l(a)=2 Zdůvodnění: (log(50)/log(20) 2 n R(A=a) = n R /V(A,r) = 10,000/50 = 200 n-tic n R(A=a) /b R = 200/20 = 10 stránek cena dotazu = 2+10= 12 Dotazovací jazyky 11

Metody pro výpočet spojení R(K,A,...) N:1 Dva typy implementace: nezávislé relace S(A,...) s ukazateli (Starbrust, Winbase, ) Základní metody: hnízděné cykly (varianty s indexováním, vyhledáváním) setřídění-slévání hašované spojení Předpoklady: spojovací atribut A, p R p S, u varianty s ukazateli R S Pz.: speciální případ - kartézský součin Dotazovací jazyky 12

Hnízděné cykly - binárně naivní algoritmus for each r R for each s S if (r,s) then begin u:= r [ ] s; WRITE(u) end po stránkách menší relaci jako vnější! M=3 p R + p R p S čtení (n R n S /V(A,S))/b RS zápisů (zdůvodni!) Vylepšení: - vnitřní relace se čte ušetří se 1 čtení na začátku (konci) Dotazovací jazyky 13

Hnízděné cykly - binárně Varianty: M velké, pak rozdělení: M-2, 1, 1 vnější vnitřní výsledek p R + p S p R /(M-2) čtení R ve vnitřní paměti p R + p S čtení s ukazateli, M=3 p R + n R čtení Dotazovací jazyky 14

Hnízděné cykly - binárně index na S.A (B + -strom) Předpoklady: R setříděná v R.A, S.A primární p R + l(a,s) + p S,A + V(A,R) S hašovaná dle S.A Předpoklady: R setříděná v R.A, S.A primární čtení p R + V(A,R) čtení se selekcí (pomocí vyhledávání), Př.: SELECT * FROM R,S WHERE R.A=S.A AND R.B=12 Předpoklady: R.B primární klíč (indexovaný), S.A sekundární klíč (klastr. Index, n-tice s S.A=a v jedné stránce) l(a,s) + l(b,r) + 2 čtení Dotazovací jazyky 15

Hnízděné cykly - binárně spojovací index SI(A R,A S ) 1 2 3 S(A,...) 1 2 3 R(A,...) Dotazovací jazyky 16

Hnízděné cykly - více relací M = M 1 + M 2 + + M n < M R i rozděleny na l i podrelací velikostí M i, tj. l i = p i /M i, (1 i n) cenová funkce [Kim84] C = p 1 + [M 2 +(p 2 -M 2 ) p 1 /M 1 ]+...+[M n +(p n -M n ) p 1 /M 1... p n-1 /M n-1 ] problém hledání celočíselných M i, aby C minimální heuristika: (1) Srovnej n relací do cyklů algoritmu tak, že p 1 p 2... p n ; (2) Pro R n alokuj 1 stránku, M - 1 rozděl rovnoměrně; (3) (M - 1)/(n-1) necelé then přiděl větší M i menším relacím; Dotazovací jazyky 17

Hnízděné cykly - více relací Struktura základního algoritmu (zde pro tři relace): for j:=1 to L 1 do begin přečti R 1j do buffer M1 ; for k:=1 to L 2 do begin přečti R 2k do buffer M2 ; for s:=1 to L 3 do begin přečti R 3s do buffer M3 ; vytvoř spojení buffer Mi, 1 i 3; zapiš výsledek end end end Dotazovací jazyky 18

Hnízděné cykly - více relací Př.: a) p 1 = 7, p 2 = 14, p 3 = 21, M = 11 dělení M = <5, 5, 1> b) p 1... p 5, M = 16 dělení M = <4, 4, 4, 3, 1> Dotazovací jazyky 19

Setřídění-slévání Idea: třídění, slévání (dvoufázový algoritmus) Vhodnost: jsou-li R a S setříděné R(...,A,...) 0001 0002 0002 0002 0004 0005 0005 min. M = 3, 2.fáze vyžaduje p R + p S čtení potřebuje pomocný prostor pro třídění výsledek je setříděný S(,A,...) 0002 0002 0002 0003 0005 0005 Dotazovací jazyky 20

Setřídění-slévání M = 3 (s použitím externího třídění) ~ 2p R log(p R ) + 2p S log(p S ) + p R + p S bez zápisu výsledku M p S (dvoufázový algoritmus) (1) Vytvářejí se setříděné běhy velikosti 2M stránek (pomocí prioritní fronty) a ukládají na disk; velikost běhu je 2 p S pro S jich je nejvýše p S /2 p S,pro R také ne více než p S /2 p S celkem nejvýše p S (2) Pro každý běh se alokuje v paměti stránka a souběžně se slévá; 3(p R + p S ) bez zápisu výsledku Dotazovací jazyky 21

Princip prioritní fronty 12 4 2 8 11 3 5 buffer I KONTEJNER buffer O 1. Naplní se K a buffer I n-ticemi z R. 2. Z K se vybírají n-tice u takové, že u.a v.a, v ve bufferu O (1) a řadí se ve vzestupném pořadí podle hodnoty A. 3. Uvolněné místo v K se zaplní novou n-ticí ze bufferu I. Je-li bufferu I =, načte se nová stránka R. Je-li buffer O plný, na vnější paměti se prodlouží daný běh. Jestliže žádná n-tice z kontejneru nevyhovuje (1), je současný stav bufferu O poslední stránkou vytvářeného běhu. Tímto způsobem lze vytvořit běhy dlouhé v průměru 2M stránek. Dotazovací jazyky 22

Setřídění-slévání varianta s ukazateli R se setřídí podle ukazatelů S se čte pouze jednou, nemusí být setříděna 3p R + p S bez zápisu výsledku Porovnání: p R - p S velké lepší jsou hnízděné cykly p R - p S malé lepší je setřídění-slévání omezující selekce lepší pomocí vyhledávání Dotazovací jazyky 23

Hašovaná spojení Vhodnost: nejsou-li dostupné indexy pro R.A a S.A nemusí-li být výsledek setříděn dle A klasické hašování GRACE algoritmus jednoduché hašování rekurzivní rozdělení relací hybridní hašování Dotazovací jazyky 24

Spojení klasickým hašováním Předpoklad: R se vejde do M stránek M = p R *F + 1 + 1, kde F je koeficient větší než 1 (1) Zahašuj R do vnitřní paměti; (2) Čti S sekvenčně; Hašuj s.a a přímým přístupem najdi r R; (3) if s.a = r.a then begin u:= r * s; WRITE(u) end p R + p S čtení Dotazovací jazyky 25

Spojení s rozdělováním relací Předpoklad: R se nevejde do M stránek Idea: R a S se rozdělí na disjunktní podmnožiny tak, že se spojují JEN ty korespondující. Dvoufázový algoritmus: (1) Rozděl R a S; (2) Zahašuj část R (části R) do M-2 stránek; Čti odpovídající část S; Hašuj s.a a přímým přístupem najdi n-tice r R; Generuj výsledek; Dotazovací jazyky 26

Příklad: S(A) 4 6 1 9 19 14 17 11 18 R(A) 6 10 15 7 13 18 16 17 K mod 3 R 0 S 0 6 6 15 9 18 18 R 1 S 1 10 4 7 1 13 19 16 R 2 S 2 17 14 17 11 R*S 6 18 17 Dotazovací jazyky 27

GRACE algoritmus školní verze Datové struktury: n-tice R a S, kapsy ukazatelů HR i, HS i, i {0,1,,m-1} hašovací funkce h: dom(a) <0,m-1> Algoritmus: for k:=1 to n R do begin i :=h(r[k].a); HR i := HR i {k} end for k:=1 to n S do begin i :=h(s[k].a); HS i := HS i {k} end for i:=0 to m-1 do begin POM R := ; POM S := ; foreach j HR i do begin r:=r[j]; POM R :=POM R {r} end; foreach j HS i do begin s:=s[j]; POM S :=POM S {s} end; Dotazovací jazyky 28

GRACE algoritmus foreach s POM S do /* ve vnitřní paměti */ end begin foreach r POM R do end begin if s.a = r.a then begin u:= r * s; WRITE(u) end end p R + p S + n R + n S vhodnost: když p R /m + p S /m < M čtení Dotazovací jazyky 29

GRACE s ukládáním rozdělených relací M (p R *F) (1) Zvol h tak, že R lze rozdělit do m = (p R *F) částí; (2) Čti R a hašuj do (výstupních) buffer i, (0 i m-1); if buffer i je plný then WRITE(buffer i ); (3) Proveď (2) pro S; (4) for i :=0 to m-1 do begin (4.1) Čti R i a hašuj do paměti velikosti (p R *F); (4.2) Čti s S i a hašuj s.a. Existuje-li r R i a s.a = r.a, generuj výsledek. end Dotazovací jazyky 30

GRACE s ukládáním rozdělených relací Zdůvodnění 4.1: předpoklad - R i stejné velké p R /m = p R / (p R *F) = (p R /F) R i vyžaduje prostor F (p R /F) = (p R *F) 3(p R + p S ) I/O operací vhodnost: když p R /m + p S /m < M poznámky: S i mohou být libovolně velké. Vyžadují 1 stránku paměti; problém, když V(A,R) je malý; vhodné v situacích, když R(K, ), S(K 1,K, ); nevejde-li se R i resp. S i do M-2 stránek rekurze tj. R i se rozdělí na R i0, R i1,...,r i(k-1) stránek; Dotazovací jazyky 31

Jednoduché hašování Předpoklad: p R *F > M-2, A je UNIQUE Idea: speciální případ GRACE, kdy R R 1, R 2 Algoritmus: repeat begin zvol h; Čti R a hašuj r.a; M-2 bufferů tvoří R 1, ostatní n-tice do R 2 na disk; until R 2 ; Čti S a hašuj s.a; if h(s.a) padne do prostoru R 1 then begin if s.a = r.a then generuj výsledek end else ulož s do S 2 na disk; R:=R 2 ; S:= S 2 end Dotazovací jazyky 32

Hybridní hašování Idea: kombinace GRACE a jednoduchého hašování, R se dělí na části R 1, R 2,, R k, R 0 tak, že R 0 se vejde do vnitřní paměti. Rozdělení M-2 stránek: buffer i =1 (1 i k), buffer 0 =p R0 Algoritmus: (1) Zvol h; (2) Čti R a hašuj r.a; tvoř R i (0 i k); /*R 0 je v buffer 0 */ (3) Čti S a hašuj s.a; tvoř S i (1 i k); if h(s.a) padne do prostoru S 0 then realizuj spojení; (4) for i:=1 to k do realizuj spojení podle GRACE; Dotazovací jazyky 33

Porovnání algoritmů Předpoklady: M > p S pro setřídění-slévání M > p R pro hašování Značení: alg1 >> alg2 alg1 je lepší než alg2 Setříděníslévání GRACE jednoduché hašování GRACE >> >> (pro menší M) jednoduché hašování hybridní hašování >> >> (pro vetší M) >> >> >> hybridní hašování Dotazovací jazyky 34

Dělení Df.: R a S se schématy 1 resp. 2 1 T = R -. S = R[ 1-2 ] - ((R[ 1-2 ] S) - R)[ 1-2 ] Př.: R A B 3 6 3 2 8 2 1 2 1 3 3 4 3 3 S B 2 4 3 po setřídění A B 1 2 1 3 3 4 3 3 3 6 3 2 8 2 Dotazovací jazyky 35 R T A 3

Dělení-hašováním Idea: vytvoří se kapsy HS i pro hodnoty z S.B a do nich se ukládají hodnoty z R.A. Hodnoty z HS i přispívají do výsledku. Algoritmus: (prvky hašovací tabulky jsou např. typu array nebo set, reprezentují kapsy) (1) Čti S, spočti h(s.b) a označ prostor (kapsu) HS s.b foreach s.b do HS s.b := ; (2) for j:=1 to n R do begin r:=r[j]; if existuje kapsa pro h(r.b) then HS r.b := HS r.b {r.a} end (3) foreach HS s.b do sort(hs s.b ); /*není nutné*/ (4) Vytvoř HS i a generuj T; Dotazovací jazyky 36

Další operace GROUP BY index pro A - přes index se získají skupiny setřídění podle R.A hašováním (jako u dělení) foreach a R[A] do vytvoř kapsu + proměnná pro výpočet agregační funkce; DISTINCT také pomocí hašování Dotazovací jazyky 37