Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

XML data na disku jako databáze Kamil Toman

Podobné prezentace


Prezentace na téma: "XML data na disku jako databáze Kamil Toman"— Transkript prezentace:

1 XML data na disku jako databáze Kamil Toman ktoman@ksi.mff.cuni.cz

2 Cíl ● Návrh systému pro práci s perzistentními XML daty, zpracování možných přístupů při implementaci databázových operací. ● Vytvoření experimentální databázové aplikace.

3 XML data ● Existující rozsáhlé soubory XML dat – Z různých zdrojů – Kolekce dokumentů – dokumenty odpovídající stejnému DTD ● Model dat – ohodnocený, orientovaný strom – Uzly – elementy, atributy, textové uzly – Hrany – modelují vztah otec-syn jednotlivých uzlů ● Potřeba XML dotazovacího jazyka

4 XML dotazovací jazyky ● XPath – navigace ve struktuře dokumentu – Obecná konstrukce: osa::test [ predikát [... ] ]... – Zobecněné cesty jmen ● /hra//název – Korelované cesty jmen ● /hra[.//název/text()=„Hamlet“]/obsazení – Složitější dotazy využívající metadata ● //replika[contains(name(@*), „or“) ]/řádek

5 XML dotazovací jazyky ● XQuery – komplexní XML DJ, podobnost s SQL – Funkcionální návrh, pro adresaci využívá jazyk XPath – Pracuje s n-ticemi, používá konstruktory, iterátory, proměnné, uživatelské funkce včetně rekurzivních – { for $a in document( zdroj/bib.xml )//kniha, $b in document( půjčovna.xml )//kniha where $a/název = $b/název return {$a/název} {$b/cena} }

6 Vyhodnocení XML dotazů ● Obecné „navigační metody“: – Shora-dolů, zdola-nahoru, hybridní – Využití hodnotových nebo strukturálních indexů – Využití DTD

7 Vyhodnocení shora dolů ● /play//speech[speaker=“Hamlet“]/line ● Nalezení všech elementů play hnízděných v kořenovém elementu, ● v podstromu play nalezení elementů speech ● Vybrání jen těch, které obsahují potomka speaker, jehož obsahem je text „Hamlet“ ● Přechodem z vybraných elementů speech nalezneme hnízděné elementy line

8 Vyhodnocení zdola nahoru ● Nalezení všech elementů s textem „Hamlet“ ● Ověření názvu speaker ● Průchodem ke koření ověření příslušnosti k cestě /play//speech ● Nalezení elementu line průchodem shora dolů

9 Hybridní vyhodnocení ● Vyhodnocení levé části dotazu shora dolů /play//speech/speaker ● Vyhodnocení pravé části zdola nahoru line/parent::speaker ● Vyhodnocení průniku obou množin a dopočítání restrikce na textovou hodnotu „Hamlet“ ● Dohledání příslušných elementů line

10 Vyhodnocení XML dotazů ● Strukturální spojení – Nový typ operace využívající strukturálního očíslování k zjištění vztahu předek-potomek – Lze jej používat jen omezeně, např. pro vyhodnocení zobecněných cest jmen: ● Nalezení počátečních množin v některém z indexů ● Postupné slučování nalezených uzlů podle vztahu odvozeného z identifikátorů jednotlivých uzlů

11 Strukturální vyhodnocení ● /play//speech[@diction=“poetic“]/line

12 Strukturální očíslování uzlů ● Efektivnější konstrukce jsou často založeny na speciálním kódování vztahů uzlů XML dokumentu – Prefixové očíslování Nevýhoda: dlouhé identifikátory – Intervalové očíslování Nevýhoda: obtížnost aktualizace

13 Příklad ● Jan Novák 609123456 66554433

14 Dietzovo očíslování

15 Intervalové očíslování

16 k-ární úplný strom

17 k-ární strom - alternativa

18 Strukturální prefixové schéma

19 Uložení XML dat ● Potřeba se přizpůsobit tomu, jak budeme k datům přistupovat – Uložení v relačním nebo objektově-relačních systému ● Výhody – využití současných technologií ● Nevýhody – absence XML dotazovacího jazyka, obtížnost a nízká efektivita vyhodnocení složitějších strukturálních dotazů – Přímé uložení ● Výhody – lepší zachycení struktury dat, vyšší efektivita při použití XML dotazovacího jazyka ● Nevýhody – potřeba vývoje nového typu datového úložiště

20 Způsoby indexování ● DataGuide XML stromu T je takový strom D, že každá cesta jmen ve zdrojovém stromu T má právě jednu instanci v D a každá cesta jmen v D je také cestou jmen v T.

21 Příklad - DataGuide

22 Index SphinX

23 Adaptivní index - APEX

24 Implementované řešení - SXQDB ● Nativní XML úložiště – Perzistentní DOM ● Dovoluje přístup k libovolným uzlům ● Poskytuje strukturální informaci z DTD ● K přístupu k uzlům využívá B-stromy ● Aktualizace – předpokládá se duální očíslování uzlů ● Modul pro zpracování dotazů ● Podporuje základní konstrukce XQuery ● Zjednodušené vyhodnocování s důrazem na zpracování výrazů XPath

25 Závěr – Zvolené řešení umožňuje vyhodnocení všech základních konstrukcí XQuery – Přístup k jednotlivým uzlům XML stromu je efektivní – Úložiště lze doplnit indexy pro urychlení zpracování dotazů – Možnosti rozšíření: komplexnější modul pro vyhodnocování dotazů, logický optimalizátor

26 Srovnání s dalšími XML DB ● Srovnávací DB - kolekce XML dokumentů představující souborné dílo Shakespeara – Velikost: 7,9MB – Počet elementů: ~200 000 – Počet hodnot elementů: ~ 150 000

27 Srovnání s dalšími XML DB ● Serializace celé kolekce: Q1: { / } ● Výsledky: – XMLCollection >30min(* 502,042s) – SXQ-DB11,924s – eXists 0.9.222,050s

28 Srovnání s dalšími XML DB ● Serializace jednotlivého dokumentu: Q2: { document('src/hamlet.xml') } ● Výsledky: – XMLCollection502,099s – SXQ-DB0,435s – eXists 0.9.22,105s

29 Srovnání s dalšími XML DB ● Nalezení elementu SPEECH, který nemá potomka STAGEDIR a zároveň obsahuje podelement SPEAKER s textem „Hamlet“ v dokumentu Hamlet: Q3: { document('src/hamlet.xml') }//SPEECH[ not(exists(.//STAGEDIR)) and SPEAKER/text() = „Hamlet“] } Výsledky: – XMLCollection380,099s – SXQ-DB0,166s – eXists 0.9.21,643s

30 Srovnání s dalšími XML DB ● Nalezení elementu PERSONA, který je v podstromu elementu PERSONAE, který má otcovský element PLAY v dokumentu HAMLET Q4: { document('src/hamlet.xml') /PLAY/PERSONAE//PERSONA } ● Výsledky: – XMLCollection2,356s – SXQ-DB0,011s – eXists 0.9.20,073s

31 Srovnání s dalšími XML DB ● Nalezení elementu SPEECH, který obsahuje podelement LINE s textem obsahujícím řetězec „Quarrelsome“ v dokumentu „As You Like It“: Q5: { document('src/as_you.xml')//SPEECH[ contains(LINE/text(), „Quarrelsome“)] } ● Výsledky: – XMLCollection-- – SXQ-DB0,063s – eXists 0.9.20,214s (* 0,040s)

32 Srovnání s dalšími XML DB ● Nalezení elementu SPEECH, který obsahuje podelement LINE s textem obsahujícím řetězec „Quarrelsome“ v celé kolekci: Q6: { //SPEECH[contains( LINE/text(),„Quarrelsome“)] } ● Výsledky: – XMLCollection-- – SXQ-DB3,847s – eXists 0.9.25,809s (* 0,107s)


Stáhnout ppt "XML data na disku jako databáze Kamil Toman"

Podobné prezentace


Reklamy Google