Michal Hampl Lenka Kreibichová RankSQL Michal Hampl Lenka Kreibichová
Co je RankSQL? ucelený framework pro podporu efektivního vyhodnocování top-k (řadících) dotazů v relačních databázích zabudování potřebných záležitostí přímo do jádra na stejné úrovni jako je filtrování (členství)
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Využití řadících dotazů dotazy na podobnost v multimediálních databázích vyhledávání ve webových databázích middleware dobývaní znalostí
Co jsou řadící (top-k) dotazy Dotazy, u kterých nás zajímá pouze několik (k) prvních záznamů Třídící funkce je specifikovaná uživatelem Může být složením několika různých funkcí
Podpora řadících dotazů dnes Většina dnešních RDBMS podporuje řadící dotazy ale spíše jako doplněk, nikoliv plnohodnotně Postup vyhodnocení: 1) získání záznamů ze všech vstupů 2) spojení záznamů ze vstupů 3) vyhodnocení predikátů 4) seřazení podle predikátů 5) vrácení prvních k záznamů
Příklad SELECT * FROM Hotel h, Restaurant r, Museum m WHERE c1 AND c2 AND c3 ORDER BY p1 + p2 + p3 LIMIT K c1: r.cuisine=Italian c2: h.price+r.price<100 c3: r.area=m.area p1: cheap(h.price) p2: close(h.addr,r.addr) p3: related(m.what, X)
Problémy současného přístupu 1) vstupy mohou být velké, jejich spojení drahé, navíc nemusí být lokální 2) uživatele nezajímá pořadí všech záznamů (kombinací) 3) predikát pro řazení může být náročné spočítat, měl by se vyhodnocovat až je potřeba
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Dotazy s řazením (1) Dotaz v relační algebře v kanonické formě: Q = * k F(p1,...pn) B(c1,...cm) (R1 x ... x Rh) ... filtrování ... B(c1, ... cm) boolean funkce ... řazení ... F(p1,... pn) monotonní ohodnocovací funkce pi[u] je skore pro predikat pi F(p1,...pn)[u] = F(p1[u],...pn[u]) ... celkové skóre
Dotazy s řazením(2) Q vrací seřazený seznam k prvních n-tic, takových, že: u K a v K F[u] F[v] F je monotónní ( F(x1, ...xn) F(y1, ...yn) ) právě když i: xi yi
Vyhodnocování relačních dotazů Při vyhodnocování „standardních“ relačních dotazů se aplikuje: splitting / rozpojování (c1 – selekce, c2 – spojení) c1c2(RxS) c1c2(RxS) c1(R joinc1 S) Interleaving / prokládání c2(R joinc1 S) c2(R) joinc1 S
Vyhodnocování dotazů s řazením operátor (pro řazení) je ale „monolitický“ ohodnocovací funkce F je vyhodnocena naráz a pro všechny záznamy to s sebou nese zbytečnou režii nemusí být nutné získat všechny záznamy a vyhodnocovat pro ně všechny predikáty splitting a interleaving chceme podporovat i pro operátory
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Rozšíření relační algebry Pro podporu top-k dotazů musíme rozšířit stávající algebru Definujeme pojem relace s řazením Je to relace rozšířená a tříděná podle nějakého ohodnocení Ohodnocení je dáno vybranou ohodnocovací funkcí F(p1,...pn) pro daný dotaz
N-tice během procesu Na začátku, žádný predikát není vyhodnocen, n-tice nejsou řazeny Postupně při vyhodnocování jednotlivých predikátu získávají určité skore podle již vyhodnocených predikátů Potřebujeme definovat částečné skore n-tice ve chvíli, kdy jsou vyhodnoceny predikáty P = (p1,...pj) j<n
Maximální možné skore n-tice maximální možné skore n-tice pro predikáty P ... F’P[t] F’P(p1,...pn)[t] = pi = pi[t] pro pi P pi = 1 jinak předpokládáme, že 1 je maximální hodnota pi
Ranking Principle mějme F’P[t1] > F’P[t2] potom pokud musíme zpracovat t2, musíme zpracovat i t1 Když následující operace zpracuje t2, pak F’P[t2] je maximální hodnota, kterou může nabývat F[t2] t1 ale může získat vyšší ododhocení, musíme proto tuto n-tici také zpracovat -> proto musí být t1 zpracováno dříve než t2
Relace s řazením RP relace R, ohodnocovací funkce F(...) P {p1, ... pn} skóre n-tice t je F’P[t] pořadí <RP n-tic RP t1,t2 RP definujeme t1 <RP t2 iff F’P[t1] < F’P[t2] u shodných skóre řadíme třeba podle ID
Nový operátor Definice: t p(RP) iff t RP t1 <p(RP) t2 iff F’P{p}[t1] < F’P{p}[t2] p(RP) = RP{p}
Rozšíření operátorů Ostatní operátory , , , , -, join vlastnost členství zůstává selekce (): t1 <c(RP) t2 právě když t1 <RP t2 sjednocení (), průnik (), spojení t! <RP1SP2 t2 právě když F’P1P2[t1] < F’P1P2[t2]
Algebraické zákony (1) abychom mohli dotazy optimalizovat aplikovat metody splitting & interleaving 1) splitting pro R{p1, ...pn} p1(...p2(R) ... ) 2) komutativita pro binární operátory RP1 SP2 SP2 RP1 3) asociativita (RP1 SP2) TP3 RP1 (SP2 TP3)
Algebraické zákony (2) 4) komutativita pro P1(P2(RP)) P2(P1(RP)) c(P(RP)) P(c(RP)) 5) distributivita p(RP1 SP2) p(RP1) p(SP2)
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Standardní plán vyhodnocení plán vyhodnocení je strom operátorů (iterátorů) během vykonávání jsou n-tice získávány z kořenového operátoru, ten je získává z podřazených operátorů postupně až ke scan operátorům pipelining (proudové zpracování) – v každém kroku je získána 1 n-tice průchodem celého stromu proudové zpracování může být zastaveno blokujícím operátorem (například třídění)
Plán vyhodnocení pro top-k dotazy Dříve je řazení a top-k blokující – nejdříve musíme získat všechny n-tice seřadit a vrátit prvních k Pomocí limitu počtu záznamů chceme snížit adekvátně množství práce a množství záznamů, se kterými se pracuje během procesu vyhodnocování
Upravený plán vyhodnocení (1) 1) plán vyhodnocení vrací relace s řazením a to v pořadí podle maximálního možného skore n-tice (F’P[t]) 2) proces se zastaví po vrácení k-té n-tice nebo když již další n-tice k dispozici nejsou
Upravený plán vyhodnocení (2) Mějme p operátor nad RP Nemůže vydat t jako výsledek hned jak jej dostane od předchozího operátoru, může existovat nějaké t’, že: F’P{p}[t] < F’P{p}[t’] i když F’P[t] > F’P[t’] Místo toho vyhodnotit F’P{p}[t] a t do bufferu
Upravený plán vyhodnocení (3) t můžeme z bufferu dát na výstup, pokud ze vstupu přečteme t’: F’P{p}[t] F’P[t’] protože pak pro každé další přečtené t’’ F’P{p}[t] F’P[t’] F’P[t’’] a protože F’P[t’’] F’P{p}[t’’] F’P{p}[t] F’P{p}[t’’]
===================== Příklad TID p3 p4 p5 s1 0.7 0.8 0.9 s2 0.85 s3 0.5 0.45 0.75 s4 0.4 0.95 s5 0.3 0.6 s6 0.25 idxScan p3 p4 p5 ===================== F’P{p}[t] F’P[t’]
Selektivita operátory podporou řadících dotazů jsou selektivní -> redukují počet zpracovávaných n-tic Selektivita je závislá na kontextu stejný operátor může mít v různém místě plánu různou selektivitu To dává prostor pro optimalizaci – různé poskládání operátorů v plánu znamená různou cenu ekvivalentních plánů
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Optimalizace dotazů Jeden SQL dotaz je možné vyhodnotit mnoha způsoby Účelem optimalizátoru je transformovat SQL dotaz na co nejefektivnější plán výpočtu
Transformace dotazu Optimalizátor zpravidla prozkoumává velký prostor možných plánů využívá algoritmus výčtu plánů dokáže efektivně procházet prostor plánů odřezávat nevhodné plány vzhledem k „ceně“ plánu
Transformace dotazu Rozšíření relační algebry má přímý dopad na optimalizaci dotazů -> nutnost rozšířít standardní prostor plánů
Příklad SELECT * FROM Hotel h, Restaurant r, Museum m WHERE c1 AND c2 AND c3 ORDER BY p1 + p2 + p3 LIMIT k idxScanarea(R) Sortp1+p2+p2 join idxScanarea(M) selekcec1 seqScan(H) Tradiční plán seqScan(M) seqScan(R) join selekcec1 idxScan μp1 (H) μp3 μp2 Upravený plán
Ekvivalence plánů Řadící funkci zastoupenou operátorem Sort rozdělíme na μp1, μp2, μp3 Operátory μ stlačíme pod join operátory Ohodnocení μp1 je zkombinováno s operací scan na idxScan
Začlenění rozšířené algebry do optimalizátoru Procházení plánů Optimalizátor musí být schopen procházet i plány vzniklé rozšířením prostoru plánů Určení ceny plánu U rank operátorů musí být definován způsob odhadnutí jejich kardinality
Optimalizátor shora-dolů Základní konstrukt: Transformační pravidla Transformují mezi ekvivalentními algebraickými výrazy Implementační pravidla Mapují logické operátory na fyzické operátory a tím vytvářejí exekuční plán
Optimalizátor shora-dolů 2 Transformační pravidla Máme algebraické zákony pro ekvivalenci algebraických výrazů Je možné přidat další pravidla založená těchto zákonech Implementační pravidla Převedení logických operátorů na fyzické operátory
Optimalizátor zdola-nahoru Plány jsou konstruovány pomocí spojování logických operátorů Založeno na dynamickém programování Můžeme efektivně odřezávat neefektivní plány na základě znalostí vlastností subplánu
Rozšíření algoritmu o ranking Relace R Logické vlastnosti: členství Relace rozšířená o řazení RP členství R pořadí P -> zvolíme jako druhou dimenzi výčtu plánů
Signatura subplánu S Definována každému subplánu signatura(SR,SP) SR – množina relací SP – množina řadících predikátů Subplány se stejnou signaturou dávají vždy stejný výsledek
Subplán se signaturou (SR,SP) vznikne: Spojením subplánů (SR1,SP1) a (SR2,SP2) joinPlan Přidáním operátoru μp nad subplán (SR,SP-{p}) rankPlan Použitím scanovacího operátoru scanPlan join μp idxScani(R) seqScan(R)
Princip optimality Subplán se nemůže stát částí optimálního plánu, pokud existuje „lepší“ subplán se stejnou signaturou
Složitost výčtového algoritmu Exponenciální k počtu relací Exponenciální k počtu ranking predikátů Příliš velká složitost K redukci prostoru plánů se většinou používají heuristiky
Heuristiky – spojení doleva do hloubky V každém kroku povolíme spojení pouze takových subplánů, kde na pravé straně je max.1 relace Úprava algoritmu:
Heuristiky – nejlepší predikát Místo úvahy všech možných permutací vyhodnocování řadících predikátů určíme pořadí, ve kterém mají být vyhodnocovány Operátor μU nemůže být připojen k subplánu, pokud existuje operátor μV,, jehož připojení je v tomto okamžiku „lepší“ Např. lepší selektivita, menší nároky
Heuristiky – nejlepší predikát 2 Jak seřadit operátory? Nechť subplán plan’ vznikne z plan připojením jednoho operátoru μ Def: cost(μp) … cena vyhodnocení μp card(plan) … výstupní kardinalita plan card(plan’) … výstupní kardinalita plan’
Heuristiky – nejlepší predikát 3 Úprava algoritmu:
Odhad ceny plánu - cost(plan) Závisí na mnoha parametrech kardinality vstupů velikost bufferů přístupové cesty k relacím …. Jeho přesnost závisí nejvíce na odhadu kardinalit
Odhad kardinality operátoru Standardní plány: Vstupní kardinalita operátoru závisí na: Výstupní kardinalitě předchozího operátoru Výstupní kardinalita operátoru závisí na: Vstupní kardinalitě Selektivitě operátoru (logické operace)
Odhad kardinality operátoru 2 Plány obsahující řadící predikáty: Vstupní kardinalita řadícího operátoru závisí na: operátoru – spotřebuje pouze určitou část vstupu, aby mohl vyprodukovat „dost“ výstupu Výstupní kardinalita řadícího operátoru závisí na: požadavku na kardinalitu vstupu následujícího operátoru ten neznáme během hodnocení tohoto subplánu Výstupní kardinalita celého plánu je k
Odhad kardinality pomocí vzorků Myšlenka: Nechť x je skóre k-tého záznamu ve výsledku Pokud má záznam nejvyšší možné skóre menší než x, není nutné tento záznam produkovat z tohoto operátoru dále X ale není známo během vyčíslování plánů Vzorková metoda odhadne x a výstupní kardinality subplánu ( = operátoru)
Vzorková metoda Z každé tabulky se náhodně vybere vzorek obsahující zlomek ( s% ) řádků Nad každým řádkem se vyhodnotí všechny predikáty Dotaz se vyhodnotí na tomto vzorku S použitím libovolného exekučního plánu … transformujeme top-k dotaz nad databází na top-k’ dotaz nad vzorkem
Vzorková metoda – odhad x Získá se k’ nejlepších výsledných řádků velikost tabulky ti … Ni velikost vzorku ... ni = Ni * s% požadovaná kardinalita výsledků … k’ = k * s% x’ … skóre k’ tého nejlepšího výsledku … Jako odhad hodnoty x použijeme x’
Vzorková metoda – kardinality Nechť subplán P vyprodukuje u řádků, jejichž nejvyšší možné skóre je větší než x’ P tvořen jedním operátorem scan operátor na tabulce vrchní operátor P je unární operátor nad subplánem P’ cardS(P’) … výstupní kardinalita P’ dosažená na vzorku card(P’) … odhadnutá výstupní kardinalita P’ horní operátor P je binární operátor a spojuje subplány P1 a P2
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
RankSQL - implementace Vytvořen prototyp pro PostgreSQL 7.4.3 Interní reprezentace řádků doplněna o atribut skóre (nejvyšší možné skóre) Implementovány operátory Rank operátor Modifikovaný Join operátor Rank scan operátory
Experimenty Tabulky A,B,C A.b, B.b - booleanské hodnoty se selektivitou 0.4 Řadící predikáty A.p1, A.p2, B.p1, B.p2, C.p1 uživatelsky definované funkce se stejnou cenou Skóre nabývají hodnot <0,1> Každá tabulka má sloupce jc1,jc2 určené pro join
Dotaz Dotaz SELECT * FROM A, B, C WHERE A.jc1 = B.jc1 AND B.jc2 = C.jc2 AND A.b AND B.b ORDER BY f1(A.p1) + f2(A.p2) + f3(B.p1) + f4(B.p2) + f5(C.p1) LIMIT k
Exekuční plány 1,2
Exekuční plány 3,4
Cena exekučního plánu Závisí na: počtu výsledků … k počtu záznamů v tabulkách selektivitě operátorů spojení ceně řadících predikátů
Experiment 1 - 1
Experiment 1 - 2
Experiment 1 - 3
Experiment 1 - 4
Experiment 1 - shrnutí Tradiční plán velmi zaostává za upravenými plány Jsou srovnatelné, pokud jsou: Malé tabulky Operace spojení mají velkou selektivitu Řadící predikáty mají nízkou cenu vyhodnocení
Experiment 2 – odhad kardinalit
Experiment 2 – odhad kardinalit
Obsah 1. Úvod 2. Model vyhodnocování řadících dotazů 3. Relační algebra s podporou řazení 4. Plán vyhodnocení řadících dotazů 5. Optimizátor 6. Experimenty 7. Závěr
Použitá literatura Chengkai Li, Kevin ChenChuan Chang, Ihab F. Ilyas2 Sumin Song: RankSQL: Query Algebra and Optimization for Relational Top-k Queries http://eagle.cs.uiuc.edu/pubs/2005/ranksql-sigmod05-lcis-mar05.pdf