320 likes | 501 Views
XML data na disku jako databáze. Kamil Toman ktoman@ksi.mff.cuni.cz. 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
E N D
XML data na disku jako databáze Kamil Tomanktoman@ksi.mff.cuni.cz
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 )//kniha where $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>
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 .
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)