Spracovanie XML dotazov založené na sekvenciách ciest

Preview:

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 Presentation

Citation preview

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

Recommended