spracovanie xml dotazov založené na sekvenciách ciest

77
Spracovanie XML dotazov založené na sekvenciách ciest Juraj Fečanin Štefan Ignáth

Upload: ricky

Post on 20-Jan-2016

51 views

Category:

Documents


0 download

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

TRANSCRIPT

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

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

Juraj Fečanin

Štefan Ignáth

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

2

Obsah

1. Úvod

2. Uloženie na základe sekvencií ciest

3. Plánovanie väzieb

4. Experimentálne výsledky

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

3

Časť Prvá

Úvod

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

4

Autori

• Iona Manolescu

• Andrei Arion

• Angela Bonifati

• Andrea Pugliese

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

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)

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

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ý

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

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

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

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

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

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>

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

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

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

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

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

12

Vyhodnocovanie dotazov XQuery

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

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

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

14

Časť Druhá

Uloženie na základe sekvencií ciest

(Path sequence-based storage)

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

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.

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

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)

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

17

Logický model uloženia

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

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

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

19

Logický model uloženia

Niekoľko sekvencií ciest z predchádzajúceho príkladu, pre cesty:

/site

/site/people

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

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

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

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

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

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)

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

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

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

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.

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

25

Logický model uloženia – Súhrn ciest

Page 26: Spracovanie XML dotazov založené na sekvenciách 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

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

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

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

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á.

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

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.

Page 30: Spracovanie XML dotazov založené na sekvenciách 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

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

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

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

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

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

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.

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

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.

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

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.

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

36

Fyzický model uloženia – Perzistentné sekvencie

Príklad fyzického uloženia súhrnu ciest

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

37

Časť Tretia

Plánovanie väzieb

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

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

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

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

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

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

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

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)

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

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 )

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

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

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

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”]

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

45

Obrázok

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

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>

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

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

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

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

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

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>

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

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é)

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

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

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

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á

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

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

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

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.

Page 55: Spracovanie XML dotazov založené na sekvenciách 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

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

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

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

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

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

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

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

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.

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

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.

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

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.

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

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.

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

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

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

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.

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

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>

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

66

Algoritmus$x in //regions, $y in $x/*, $z in $y//item, $t in $z//emph

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

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

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

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

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

69

Časť štvrtá

Kombinovanie plánov viazania premenných

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

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

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

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ť

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

72

Časť piata

Experimentálne výsledky

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

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

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

74

Experimentálne výsledky 1

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

75

Experimentálne výsledky 2

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

76

Experimentálne výsledky 3

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

77

Experimentálne výsledky 4