xml data na disku jako databáze
DESCRIPTION
XML data na disku jako databáze. Kamil Toman [email protected]. 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. XML data. Existující rozsáhlé soubory XML dat - PowerPoint PPT PresentationTRANSCRIPT
XML data na disku jako databáze
Kamil [email protected]
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.
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
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
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
– <výsledek> { for $a in document( zdroj/bib.xml )//kniha,
$b in document( půjčovna.xml )//knihawhere $a/název = $b/název return <karta><titul>{$a/název}</titul>
<cena>{$b/cena}</cena> </karta>} </výsledek>
Vyhodnocení XML dotazů
● Obecné „navigační metody“:– Shora-dolů, zdola-nahoru, hybridní– Využití hodnotových nebo strukturálních indexů– Využití DTD
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
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ů
Hybridní vyhodnocení
● Vyhodnocení levé části dotazu shora dolů/play//speech/speaker
● Vyhodnocení pravé části zdola nahoruline/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
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ů
Strukturální vyhodnocení
● /play//speech[@diction=“poetic“]/line
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
Příklad
● <?xml version= 1.0 encoding= UTF-8 standalone= no ?> <!DOCTYPE kontakt SYSTEM kontakt.dtd ><kontakt> <jméno>Jan Novák</jméno> <tel> <mobil>609123456</mobil> <domů>66554433</domů> </tel></kontakt>
Dietzovo očíslování
Intervalové očíslování
k-ární úplný strom
k-ární strom - alternativa
Strukturální prefixové schéma
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ě
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 .
Příklad - DataGuide
Index SphinX
Adaptivní index - APEX
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
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
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
Srovnání s dalšími XML DB
● Serializace celé kolekce:Q1: { / }
● Výsledky:
– XMLCollection >30min (* 502,042s)– SXQ-DB 11,924s– eXists 0.9.2 22,050s
Srovnání s dalšími XML DB
● Serializace jednotlivého dokumentu:Q2: { document('src/hamlet.xml') }
● Výsledky:
– XMLCollection 502,099s– SXQ-DB 0,435s– eXists 0.9.2 2,105s
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:
– XMLCollection 380,099s– SXQ-DB 0,166s– eXists 0.9.2 1,643s
Srovnání s dalšími XML DB
● Nalezení elementu PERSONA, který je v podstromu elementu PERSONAE, který má otcovský element PLAY v dokumentu HAMLETQ4: { document('src/hamlet.xml')
/PLAY/PERSONAE//PERSONA }
● Výsledky:
– XMLCollection 2,356s– SXQ-DB 0,011s– eXists 0.9.2 0,073s
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-DB 0,063s– eXists 0.9.2 0,214s (* 0,040s)
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-DB 3,847s– eXists 0.9.2 5,809s (* 0,107s)