770 likes | 959 Views
Spracovanie XML dotazov založené na sekvenciách ciest. Juraj Fečan i n Štefan Ignáth. Obsah. Úvod Uloženie na základe sekvencií ciest Pl ánovanie väzieb Experimentálne výsledky. Časť Prvá. Úvod. Autori. Iona Manolescu Andrei Arion Angela Bonifati Andrea Pugliese. O čo ide.
E N D
Spracovanie XML dotazov založené na sekvenciách ciest Juraj Fečanin Štefan Ignáth
Obsah • Úvod • Uloženie na základe sekvencií ciest • Plánovanie väzieb • Experimentálne výsledky
Časť Prvá Úvod
Autori • Iona Manolescu • Andrei Arion • Angela Bonifati • Andrea Pugliese
O čo ide • Jedná sa o optimalizáciu vyhodnocovanie dotazov XQuery • Doteraz sa využívalo relačné, alebo stromové uloženie (XML databáze) s použitím B+ stromov na indexovanie • Takéto uloženie a indexovanie dát nazývame rozdeľovanie značiek (tag partitioning – TP)
O čo ide • Autori navrhujú nový model uloženie DB pomocou sekvencií ciest • Rozdeľujú obsah a štruktúru XML dokumentu podľa dátových ciest (data paths) a ukladajú to v usporiadaných sekvenciách • Nový model je o niekoľko rádov rýchlejší ako starý
Prínos • Popisujú logický a fyzický model uloženia dát pomocou sekvencií ciest • Model je kompaktnejší ako TP a umožňuje efektívne načítavanie dokumentov • Obsahuje súhrn ciest, ktorý obsahuje štrukturálne informácie v kompaktnej forme
Prínos • Viazanie premenných je oveľa efektívnejšie ako v TP • Model je dobre integrovateľný s optimalizačnými technikami XQuery vyvinutými pre model TP • Model poskytuje detailné štruktúrne informácie pre optimalizáciu
Vyhodnocovanie dotazov XQuery for $i in //asia//item, $d in $i/description where $i//keyword=“romantic” return <gift> <name> {$i/name} </name> {$d//emph} </gift> Viazanie premenných – variable bindings – základ vyhodnocovania dotazov XQuery. Na premennú sa viažu elementy nájdené nasledovaním cesty definujúcej premennú: • bez duplikátov – v zmysle ID elementu • v poradí v akom sa nachádzajú v dokumente
Vyhodnocovanie dotazov XQuery Postup vyhodnocovania: • Viazanie všetkých premenných a poddotazov v return klauzule • Kombinácia viazaní pomocou spojení • Serializácia XML výsledkov, tak ako to podmieňuje return klauzula. Kým fázy 1. a 2. manipulujú iba s ID elementov, táto fáza manipuluje s celými elementmi
Vyhodnocovanie dotazov XQuery Spojenia v časti Combine párujú viazania na základe: • hodnotových predikátov (v príklade sa nenachádza) • štruktúrnej príbuznosti ID elementov obsiahnutých vo viazaní – štrukturálne spojenie
Vyhodnocovanie dotazov XQuery Spojenia v príklade: • Štruktúrne spojenie $i a $d viazaní (structural join) • Štruktúrne polospojenie $i a $k viazaní – pretože viac odpovedajúcich kľúčových slov musí produkovať iba jeden výsledok (structural semijoin) • Štruktúrne vonkajšie spojenie pripája name a emph k $i a $d viazaniam, pretože výsledok musí existovať aj pre elementy bez násladníka name a/alebo emph
Časť Druhá Uloženie na základe sekvencií ciest (Path sequence-based storage)
Logický model uloženia Vlastnosti: • oddeľuje obsah dokumentu od jeho štruktúry • ukladá každú skupinu podobných prvkov v poradí v akom sa nachádzajú v dokumente Ďalej sa pozrieme na jednotlivé časti tohto logického modelu.
Logický model uloženia Prvá štruktúra obsahuje kompaktnú reprezentáciu stromovej štruktúry XML dokumentu. Každému elementu je priradený unikátny perzistentný identifikátor. Využíva sa [pre,post]. • pre – pozičné číslo otváracieho tagu elementu • post – pozičné číslo uzatváracieho tagu elementu (element e1je predchodcom elementu e2 iba ak e1.pre<e2.pre a e1.post>e2.post)
Logický model uloženia • Identifikátory rozdeľujeme podľa dátových ciest do ktorých elementy patria. • Každá časť je sekvenciou identifikátorov, usporiadaná podľa poľa pre – teda v poradí ako sa nachádzajú v dokumente. • Všetky ID v sekvencii ciest majú rovnakú hĺbku v strome dokumentu – hĺbka je uložená pre každú sekvenciu
Logický model uloženia Niekoľko sekvencií ciest z predchádzajúceho príkladu, pre cesty: /site /site/people …
Logický model uloženia - Kontajner • Druhá štruktúra ukladá obsah XML elementov a hodnôt atribútov • Hodnoty priradzujeme najbližším elementom – teda identifikátorom elementov (pre hodnotám ID) • Ukladáme v sekvenciách párov [pre,post] usporiadaných podľa pre • Takúto sekvenciu nazývame kontajner
Logický model uloženia - Kontajner • Obsahuje hodnoty typu string, integer ale double Niekoľko príkladov kontajnerov: /site/people/person/@id /site/people/person/name/#text
Logický model uloženia – Súhrn ciest Predchádzajúce dve štruktúry môžu reprezentovať XML dokument bez strát. Pridáme tretiu indexujúcu štruktúru významnú pre spracovanie dotazov. Súhrn ciest XML dokumentu je strom: • Vnútorné uzly korešpondujú s XML elementmi • Listy korešpondujú s hodnotami (textom alebo atribútmi)
Logický model uloženia – Súhrn ciest • Pre každú jednoduchú cestu /l1/l2/.../l3 odpovedajúcu jednému alebo viacerým uzlom v XML dokumente existuje práve jeden uzol dosiahnutý tou istou cestou v súhrne ciest • Každému uzlu x v súhrne ciest odpovedá unikátne číslo cesty, charakterizujúce uzol a aj cestu z koreňa súhrnu k uzlu x
Logický model uloženia – Súhrn ciest • Každá cestou orientovaná ID sekvencia je unikátne asociovaná k číslu cesty • Každý kontajner je asociovaný k páru: • číslo cesty • @attrNamepre atribút alebo #text pre text V nasledujúcom príklade súhrnu ciest sú čísla ciest znázornené veľkým fontom pri uzloch.
Súhrn ciest Je vždy stromom Nezoskupuje uzly, informácie ukladá oddelene Dataguide* Môže tvoriť obecný graf Zoskupuje uzly s rovnakým tagov Logický model uloženia – Súhrn ciest * viz: Goldman R., Widon J.,”Dataguides: Enabling Query Formulation and Optimization in Semistructured Databases”, VLDB, Athens, Greecem 1997
Logický model uloženia – Súhrn ciest Súhrn obsahuje stručné štatistické údaje o danom uzle. Nech x je uzol v súhrne na ceste končiacej tagom t and nech y je potomkom x: • Nx počet elementov nachádzajúcich sa na ceste x (veľkosť ID sekvencie korešpondujúcej x) • mx,y,Mx,y: minimálny, resp. maximálny počet y potomkov XML elementu na ceste x
Logický model uloženia – Súhrn ciest Označenie pre dokument: • N – veľkosť • h – hĺbka • NPS– počet uzlov v jeho súhrne ciest Súhrn ciest budeme udržiavať v pamäti, keďže jeho veľkosť je vzhľadom na veľkosť dokumentu pomerne malá.
Logický model uloženia • Sekvencie identifikátorov, kontajnery a súhrny ciest sú všetkým čo o dokumente uchovávame. K týmto údajom sa pridávajú indexy. • Načítame XML dokument jedným priechodom s použitím parseru riadeného udalosťami. Algoritmus je lineárny s N, používajúci O(h+NPS) pamäte pre zásobník a súhrn ciest.
Fyzický model uloženia Základom logického modelu je usporiadanie v ID sekvenciách a v kontajneroch, preto fyzický model musí podporovať usporiadanie prvkov. Ďalej budem uvažovať o: • B+ stromoch • Perzistentných sekvenciách
Fyzický model uloženia – B+ stromy O využití B+ stromoch sa uvažovalo v mnohých prácach zameraných na túto tematiku. Výhody: • Robustnosť, podpora updatov Nevýhody: • Nafúknutosť vzhľadom na množstvo ID indexov
Fyzický model uloženia – Perzistentné sekvencie Výhody: • Extrémna kompaktnosť, vedúca k zmenšeniu spotreby pamäte • Výkon v aplikáciách kde záleží na poradí Nevýhody: • Zlé správanie v prítomnosti updatov Ďalej budeme používať ako fyzický model práve perzistentné sekvencie
Fyzický model uloženia – Perzistentné sekvencie Príklad fyzického uloženia ID sekvencií Prvky v týchto sekvenciách majú konštantnú dĺžku, rovnú veľkosti ID.
Fyzický model uloženia – Perzistentné sekvencie Príklad obsahuje sekvencie z kontajnerov Kontajnery sú rôznej dĺžky (pre hodnoty dát), preto použijeme sekvencie pohyblivej dĺžky.
Fyzický model uloženia – Perzistentné sekvencie Súhrn ciest ukladáme ako sekvenciu prvkov premenlivej dĺžky. Každý uzol obsahuje jeden prvok obsahujúci: • Číslo uzlu • Číslo rodiča uzlu • Čísla potomkov uzlu • Skôr popísané štatistické údaje Miesto potrebné pre súhrn ciest je lineárne s NPS.
Fyzický model uloženia – Perzistentné sekvencie Príklad fyzického uloženia súhrnu ciest
Časť Tretia Plánovanie väzieb
Notácia • lineárna cesta (linear path expression – lpe ) (vi?) (/|//) l1 (/|//) l2 …(/|//)lk • li – je element alebo * • k >= 0 (dĺžka cesty) • vi – nepovinná dotazovacia premenná • jednoduchá cesta l1/l2/.../lk • dve jednoduché cesty sú príbuzné, ak uzol v súhrne ciest odpovedajúci jednej z nich je predkom druhého uzlu • uzly prislúchajúce ceste P sú uzly získané vyhodnotením cesty voči súhrnu ciest • označíme op[i] i-ty stĺpec vo výstupe op
Viazanie jednej premennej for $x in /site/people/person/name • rozdeľovanie ciestumožňuje priamy prístup k prislúchajúcim uzlom • stačí prehľadať korešpondujúce ID sekvencie • IDScan ( x ) • vracia ID-čka zo sekvencií asociovaných s x • vyplní políčko hĺbka podľa dĺžky jednoduchej cesty • výstup je zoradený a bez opakovania
Komplexnejšie cesty for $x in //parlist//text • vytvoríme množinu uzlov zo súhrnu ciest prislúchajúce //parlist//text • prehľadáme korešpondujúce ID sekvencie a súčasne ich “zlejeme” do jednej sekvencie • výsledné väzby sú v poradí ako v dokumente a bez opakovania • nie je použité žiadne spojenie
Zložitosť • xP – počet uzlov v súhrne ciest prislúchajúcich ceste P • NP – počet väzieb pre P • b – blokovací faktor • I/O: O ( NP/b + xP) • každá ID sekvencia je fyzicky “klastrovaná” , ale nie všetkých xP sekvencií je uložených spoločne • CPU: O ( NP * log ( xP) ) • spojenie xP usporiadaných sekvencií • Pamäť: O (NPS + xP) • uloženie súhrnu ciest a štruktúry pre spojenie sekvencií (strom s xP uzlami)
Hľadanie vyhovujúcich uzlov 1 • prechádzame súhrn ciest od koreňa k listom • priraďujeme elementy cesty zľava doprava • uzly vyhovujúce poslednej položke cesty vložíme do výslednej množiny • O ( NPS )
Hľadanie vyhovujúcich uzlov 2 //asia//item • začneme v uzle 1 a pokúsime sa nájsť vyhovujúci uzol pre element asia • koreň nevyhovuje a tak hľadanie predáme do synovských uzlov, ktoré ho predajú ďalej • vo vetve regions/asia element asia vyhovuje a hľadanie //item sa predá synovským uzlom
Väzba s jednoduchými predikátmi for $x in //people//person[@id = “person0”] • v tomto prípade potrebujeme pristúpiť ku kontajneru pre person/@id • ContScan ( x ) • x je cesta ( napr. 3/@id) • vracia zoradené dvojice [pre,hodnota] z kontajneru • ak je na kontajnery vytvorený index, použijeme IdxAccess • spojením s IDScan ( ... ) získame trojice[pre,post,depth]
Viazanie viacerých premenných 1 for $i //asia//item, $d in $i/description where$i//keyword=“romantic” return <gift> <name> {$i/name}</name>{$d//emph} </gift> • využijeme zovšeobecnený stromový vzor ( generalized tree pattern ) • jednoduché čiary -> / • dvojité čiary -> // • čiarkované -> ľavé vonkajšie spojenie • * -> ľavé polospojenie • $1 a $2 – premenné pre výstup
Viazanie viacerých premenných 2 • dva kroky: • Vypočítame minimálne množiny, ktoré musia byť prehľadané. • analyzujeme vzťahy medzi premennými • hľadáme nepotrebné premenné a nové vzťahy medzi premennými • Skonštruujeme plán pre viazanie premenných • využijeme znalosti z predchádzajúceho kroku
Prvý krok • pre každú premennú vytvoríme množinu ciest zo súhrnu ciest, s ktorými by prípadne mohla byť zviazaná • nech u,v sú premenné – u je rodičom v v stromovom vzore • su,sv – príslušné množiny možných ciest • su zistíme súčasným priechodom súhrnu ciest a stromového vzoru
Príklad for $i //asia//item, $d in $i/description where $i//keyword=“romantic” return <gift> <name> {$i/name}</name>{$d//emph} </gift> si = {/site/regions/asia/item} si sd = {/site/regions/asia/item/description} si sk = {28} sd + si s1 = {18} a s2 = {22,26}
Transformácia polospojení 1 • pre každú hranu (v je rodičovská premenná, u je synovská premenná) a pár príbuzných ciest xsu, ysv vypočítame maximálny faktor cesty Mpfx,y • je to maximálne Mxi,yi pri priechode z uzlu x do uzlu y v súhrne ciest • napr. pre hranu medzi $i a $2 vypočítame Mpf17,22 a Mpf17,26 • Mpf17,22 je najväčšie spomedzi M17,19, M19,20, M20,21 a M21,22 • ak Mpfx,y≤ 1 a hrana medzi u a v je polospojenie, transformujeme ju na spojenie (obe operacie sú rovnaké)