spracovanie xml dotazov založené na sekvenciách ciest
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
Spracovanie XML dotazov založené na sekvenciách ciest
Juraj Fečanin
Štefan Ignáth
2
Obsah
1. Úvod
2. Uloženie na základe sekvencií ciest
3. Plánovanie väzieb
4. Experimentálne výsledky
3
Časť Prvá
Úvod
4
Autori
• Iona Manolescu
• Andrei Arion
• Angela Bonifati
• Andrea Pugliese
5
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)
6
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ý
7
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
8
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
9
Vyhodnocovanie dotazov XQuery
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
for $i in //asia//item, $d in $i/description where $i//keyword=“romantic” return <gift> <name> {$i/name} </name> {$d//emph} </gift>
10
Vyhodnocovanie dotazov XQuery
Postup vyhodnocovania:
1. Viazanie všetkých premenných a poddotazov v return klauzule
2. Kombinácia viazaní pomocou spojení3. 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
11
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
12
Vyhodnocovanie dotazov XQuery
13
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
14
Časť Druhá
Uloženie na základe sekvencií ciest
(Path sequence-based storage)
15
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.
16
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 e1 je predchodcom elementu e2 iba ak e1.pre<e2.pre a e1.post>e2.post)
17
Logický model uloženia
18
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
19
Logický model uloženia
Niekoľko sekvencií ciest z predchádzajúceho príkladu, pre cesty:
/site
/site/people
…
20
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
21
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
22
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)
23
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
24
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– @attrName pre 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.
25
Logický model uloženia – Súhrn ciest
26
Logický model uloženia – Súhrn ciest
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
* viz: Goldman R., Widon J.,”Dataguides: Enabling Query Formulation and Optimization in Semistructured Databases”, VLDB, Athens, Greecem 1997
27
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
28
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á.
29
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.
30
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
31
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
32
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
33
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.
34
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.
35
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é údajeMiesto potrebné pre súhrn ciest je lineárne s NPS.
36
Fyzický model uloženia – Perzistentné sekvencie
Príklad fyzického uloženia súhrnu ciest
37
Časť Tretia
Plánovanie väzieb
38
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
39
Viazanie jednej premennej
• rozdeľovanie ciest umožň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
for $x in /site/people/person/name
40
Komplexnejšie cesty
• 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
for $x in //parlist//text
41
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)
42
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 )
43
Hľadanie vyhovujúcich uzlov 2
• 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
//asia//item
44
Väzba s jednoduchými predikátmi
• 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]
for $x in //people//person[@id = “person0”]
45
Obrázok
46
Viazanie viacerých premenných 1
• 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
for $i //asia//item, $d in $i/description where $i//keyword=“romantic”
return <gift> <name> {$i/name}</name>{$d//emph} </gift>
47
Viazanie viacerých premenných 2
• dva kroky:1. 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
2. Skonštruujeme plán pre viazanie premenných– využijeme znalosti z predchádzajúceho kroku
48
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
49
Príklad
si = {/site/regions/asia/item}si sd = {/site/regions/asia/item/description}si sk = {28}sd + si s1 = {18} a s2 = {22,26}
for $i //asia//item, $d in $i/description where $i//keyword=“romantic”
return <gift> <name> {$i/name}</name>{$d//emph} </gift>
50
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é)
51
Transformácia polospojení 2
• ak Mpf16,28 ≤ 1 vyhodnotenie výrazu môže začať prístupom k $k, nasledovaný spojením s $i
52
Eliminácia vetvy so spojením• vypočítame minimálny faktor cesty mpfx,y pre každý príbuzný pár
ciest x,y• je to minimálne mxi,yi
na ceste z x do y• ak je hrana medzi u a v spojenie, mpfx,y = 1 a Mpfx,y = 1 pre všetky
príbuzné cesty x,y a nemáme priamy predikát pre v, potom môžme eliminovať v zo stromového vzoru
• všetkých potomkov v “prilepíme” priamo k u• napr. všetky ázijské položky majú presne jeden popis, preto je
premenná $d nepotrebná
53
Prerezávanie ciest
• využijeme každú množinu sv k odstráneniu nepotrebných ciest z su
• u je rodič v v stromovom vzore
sp={20,23} sk={26}
• zo súhrnu ciest vieme, že 26 je potomok 20, ale nie 23eliminujeme nepotrebnú cestu 23 z sp
• použiteľné iba pre plné hrany• môžme zistiť, že dotaz nemá odpoveď
for $p in //parlist, $k in $p//text return $k
54
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Uzol v súhrne ciest.
55
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Rodičovský uzol
56
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Posledný uzol zo stromového vzoru, ktorý
vyhovuje predkovi pv
57
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Posledný uzol s premennou zo
stromového vzoru, ktorý vyhovuje predkovi pv
58
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Cesta, ku ktorej prísluší x
59
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Procedúra sa snaží nájsť potomka u, ktorému
vyhovuje pv.
60
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Pre každého takého potomka skontrolujeme,
či tagy súhlasia.
61
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Ak je vi navyše premenná,
označíme si cestu, ktorú sme pre ňu našli a že
rodičovská premenná x vyhovuje ceste px.
62
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Vypočítame faktory cesty za pomoci m a M
uložených pre pu a pv.
63
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Ďalej pokračujeme v hľadaní vyhovujúcej cesty. Pokúsime sa
priradiť deti vi k deťom pv pomocou rekurzívneho
volania
64
Algoritmustraverse ( GTPNodes u, x,
PSNodes pu, px, pv )foreach GTPNode vi child of u
nextX=x; nextPX=pxif (the tag of pv matches the tag of vi)
if (vi is a variable node)mark(x,vi,px,pv)upd(mpfpx,pv,Mpfpx,pv,mpu,pv,Mpu,pv)nextX= vi; nextPX=pv
foreach PSNode pw child of pvtraverse(vi,nextX,pv,nextPX,pw)
if (the edge u-vi is ancestor-descendant)foreach PSNode pw child of pv
traverse (u,x,pv,px,pw)
Ak hrana medzi u a vi je predok-potomok, tak
prechádzame deti pv s rovnakými parametrami
ako pre pv.
65
Algoritmus
• výstupom je zoznam ciest pre každú premennú
for $i //asia//item, $d in $i/description where $i//keyword=“romantic”
return <gift> <name> {$i/name}</name>{$d//emph} </gift>
66
Algoritmus$x in //regions, $y in $x/*, $z in $y//item, $t in $z//emph
67
Druhý krok
• vytvorenie plánu pre viazanie premenných– využijeme množiny získané v predchádzajúcom kroku
for $i //asia//item, $d in $i/description where $i//keyword=“romantic”
return <gift> <name> {$i/name}</name>{$d//emph} </gift>
IDScan ( 17 ) pre $i
Join ( IDScan ( 28 ), Filter ( ContScan ( 28/#text ) ) pre $k
IDScan ( 19 ) pre $1
Merge ( IDScan ( 22 ), IDScan ( 26 ) ) pre $2
68
Príklad
IDScan ( 17 ) pre $i
Join ( IDScan ( 28 ), Filter ( ContScan ( 28/#text ) ) pre $k
IDScan ( 18 ) pre $1
Merge ( IDScan ( 22 ), IDScan ( 26 ) ) pre $2
69
Časť štvrtá
Kombinovanie plánov viazania premenných
70
Kombinovanie plánov viazania premenných
• Plány viazania premenných sa kombinujú zdola hore cez spojenia a štruktúrne spojenia• Sústreďujeme sa na využitie sekvenčné modelu ciest pri optimalizáciu spojení• Je potrebné implementovať spojenia tak aby zachovávali poradie prvkom v dokumentoch – nie vždy je to možné, preto je potrebné kontrolovať niektoré podmienky
71
Kombinovanie plánov viazania premenných
• Na implentovanie spojení sú použité algoritmy StackTreeDesc a StackTreeAnc popísané v Al-Khalifa S., Jagadish H., Patel J., Wu Y., Koudas N., Srivastava D.: “Structural Joins: A Primitive for Efficient XML Query Pattern Matching”, ICDE, 2002
• V prípade nesplnenia daných podmienok, je potrebné po spojení dokument zotriediť
72
Časť piata
Experimentálne výsledky
73
Prostredie
• použité bolo– DELL D800 laptop
• Pentium IV 1,4 GHz• 1Gb RAM• RedHat Linux 9.0
– dokumenty• XMark 118Mb• DBLP 133Mb• SwissProt 114Mb
74
Experimentálne výsledky 1
75
Experimentálne výsledky 2
76
Experimentálne výsledky 3
77
Experimentálne výsledky 4