1
Implémentation XQuery
Georges Gardarin Introduction Algèbre XML Génération des plans
2
1. Introduction
Des techniques en évolution VLDB 50% des articles sur XML DB
3
Techniques de base
Parser
Normalisation
Génération
Optimizer
XQuery
Run TimeMachine
QueryPlan
Analyse de la requête
Mise en forme normale
Transformation et simplification
Génération d'un plan d'exécution
Optimisation
Machine d'exécution de l'algèbre
Transformation
4
2. Algèbres pour XML
De multiples algèbres Jagadish H.V., Lakshmanan L.V.S., Srivastava D., Thompson K.
TAX: A Tree Algebra for XML, Proc. DBPL Conf., Roma Italy, 2001.
Fernandez M., Simeon J., Wadler P.. An Algebra for XML Query, In Foundations of Software Technology and Theoretical Computer Science, New Delhi, 2000.
Zaniolo C. The Representation and Deductive Retrieval of Complex Objects, Proc 11th VLDB, Stockholm, 1985.
Galanis L., Viglas E., DeWitt D.J., Naughton J.F., Maier D. Following the Paths of XML: an Algebraic Framework for XML Query Evaluation, 2001
Tuyet-Tram Dang-Ngoc and Georges Gardarin Federating heterogeneous data sources with xml, IKS 2003
5
XAlgèbre
Proposée et implémentée pour un médiateur XMLMedia, XQuark XLive
Besoin d’une algèbre adaptée à XQuery. XTuples, représentation de données semi-
structurées. XOpérateurs, une extension des opérateurs
relationnels, manipulant les XTuples.
6
XTuples
Pourquoi ce besoin de nouvelle représentation? Valeurs nulles Attributs multivalués Extensions
Nécessité d’une représentation adaptée aux données semi-structurées.
Nom Prénom Club Palmarès
Mutu Adrian NULL Coupe d’Italie
Palermo Martin Villareal NULL
Del Piero Allessandro
FC Juventus Ligue des champions, Championnat d’Italie
7
XTuples : représentation
Un XTuple est composé de un ensemble d’arbre A un ensemble de références R sur
A. Ces références sont appelées
XAttributs.
Les opérations relationnelles se font sur R.
Les parcours et recomposition se font sur A.
Un ensemble de XTuples du même type forment une XRelation
bA
C
ac
edB
f
E
g h
iD
Fj
a/ba/c f/h/i f
bG
I
ac
edH
f
K
g h
iJ
Lj
AR
8
Les XOpérateurs
Xsource(‘PLAYERS’)
XOrderBy
Relation Étudiée Dans son intégralitéavant de retourner un XTuple
Opérateurs étendus du relationnel adapté aux données semi-structurées.
Ils opèrent sur les XRelations (composées de XTuples)
Full-pipeline• XConstruct• XRestrict• XProject• Xunion
• XProduct
• XJoinSimple• XSource
• XMin• XMax• XOrderBy
Xsource(‘STADIUM’)
Xsource(‘STADIUM’)
XJoinHash
Hashagede la relation 1
Puis jointure XTuplepar XTuple
Xsource(« STADIUM »)
Xsource(« STADIUM »)
U
XUnion
1° relation,Puis 2°
Non-bloquant
Bloquant
Semi-pipeline• XJoinHash• XJoinMultiHash• XIntersection
9
Construction et Projection
XSource construction XAttribut construction forêt ordre de la source non-bloquant
XProjection destruction de colonnes destruction de (sous-)
arbres ordre préservé non-bloquant
a b c
XSource
XProjection
b ca b c
<SAX/>
10
Filtrage
XRestriction destruction de lignes complètes ordre préservé non bloquant
XRestriction
a b ca b c
11
Union
XUnion ordre préservé en mode bloquant, non préservé sinon bloquant ou non suivant paramétrage
a b c
XUnion
a b c a b c
12
Jointure
XJointure Jointure des tables et juxtaposition d'arbres ordre préservé en mode bloquant, non préservé sinon bloquant ou non suivant paramétrage
XFusion Concaténation d'arbres
XJointurea b c
d e f a b c d e
13
Algèbre XML : Imbrication
Nesting operations required to compute multi-valued variables
Example : for $r in //restaurant Let $m := $r//menu Return ($r/name, $r/region, count($m))
Solution: introduce Nest/Unest operators $r.Project(/name, /region, //menu) $r1 $r1.Nest(/name,/region, //menu*)
In short and more powerful: $r.Project((/name), /region, //menus*)
Also useful for quantifiers (every)
14
Algèbre XML: Valeurs nulles
Null in XML is two-folds Empty tag <region /> Missing tag
XQuery requires predicates be true (no null) Mandatory element
XQuery allows null (empty tag) in results Optional element
Useful to check at processing time Restriction may eliminate nulls Join is (left/right) outer join according to optionality
15
Annotation des attributs
Defined by a path sequence $r/nom, $r/region, $r/offer/menus/menu
Each attribute can be annotated A0 = optional, A1 = mandatory A* = nested optional, A+ = nested mandatory
Attributes can be the base for a group by (nesting) (A, B)
Example ($r/nom1),$r/region0, $r/offer/menus/menu*
16
XAlgebra: Overview
Datasource.XSource (Path seq, atomic XQuery) XRelation Transform a source in an XRelation of attributes Path sequence
XRelation.XRestrict (unary Constraint) XRelation select Xtuples satisfying conditions on attribute values
XRelation.XProject (Path seq) XRelation Remove attributes that are not in path sequence
XRelation.XJoin (XRelation, binary Constraint) XRelation join of two XRelations on attribute values
XRelation.XFusion (Path seq) XRelation Remove attributes and merge each XTuple trees in one of given schema
XRelation.XReconstruct (Path seq) XML Extract XML documents of given schema from the XRelation
17
Implémentation des algorithmes
XSélection Par accès à index Intérêt d'indexer
tous les mots Intersection et union
des adresses selon critères
Filtrage final pour vérifier
XJointure Par accès aux index Par produit cartésien Par tri-fusion Par hachage
Intérêt du pipline
18
3. Techniques de Transformation
Notion de modèle d’arbre (Tree Pattern) Jagadish VLDB 2002Jagadish VLDB 2002 Principe des modèles d’arbres généralisés
(GTP) Utilisation des GTP pour XQuery Optimisation & performances
19
TPQ (Tree Pattern Query)
TPQ = arbre modélisant une requête. Il est destiné à être « mappé » sur l’arborescence
du document XML cible
$a
$c$b
$d
$f
$e
$g
Arbre T
Arbre T2
ancêtre
parent
: relation ancêtre-descendant : relation père-fils
20
GTP (Generalized Tree Pattern)
Le GTP ajoute au TPQ des arcs en pointillés symbolisant des relations optionnelles
GTP: G=(T,F) T: arbre F:formule Chaque nœud de l’arbre T est labellisé par une
variable et possède un numéro de groupe. F est une formule booléenne vérifiant les prédicats
applicables aux nœuds. Un ensemble de nœuds forment un groupe s’ils sont
reliés entre eux par des liens non optionnels.
21
GTP - Exemple
FOR $p IN document(“auction.xml”)//person, $l IN $p/profile
WHERE $l/age > 25 AND $p//state != ‘MI’
RETURN <result> {$p//watches/watch} {$l/interest} </result>
$p
$l$s
$g
$w
$t $i
(0)
(0)(0)
(0)(1)
(1)
(2)
$p.tag = person & $s.tag = state &$l.tag = profile & $i.tag = interest &$w.tag = watches & $t.tag = watch &$g.tag = age & $g.content > 25 &$s.content != ‘MI’
Numéro de groupe (par convention le groupe 0 inclut l’élément root)
Relation optionnelle
22
Pattern Match
Un « Pattern Match » de l’arbre G dans une collection d’arbres C est un sous-arbre h partiel
h: G C tel que: h contient au moins le groupe 0 de G. h préserve la structure relationnel de G. h vérifie la formule booléenne F de G.
23
Pattern match : exemple
people
person person
address
state
watches
watch
profile
agewatch
address
state
profile
age interestcitycity
Résultat = H1: $p->2, $s->4, $l->9, $g->10, $w->6, $t->7
“s1” “30” “s2” “28”
$p
$l$s
$g
$w
$t $i
(0)
(0)(0)
(0)(1)
(1)
(2)
1
2
9
87
6
54
3
10
11
13 14
1512
1716
GTP
XML
On mappe le GTP sur l’arborescence XML
24
GTP Universel
Il permet de modéliser les requêtes contenant le quantificateur « EVERY » dans la clause « WHERE »
Un GTP universel est un GTP G=(T, F) tel que plusieurs arcs soient étiquetés ‘EVERY’
Un arc peut être étiqueté ‘EVERY’ seulement s’il pointe sur un nœud atteignable par des arcs non optionnels depuis le nœud racine
25
GTP Universel : Exemple
FOR $o IN document(“auction.xml“)WHERE EVERY $b in $o/bidder SATISFIES $b/increase>100RETURN <result> {$o} </result>
(0) $o
(1) $b
(2) $i
F_L : pc($o, $b) & $b.tag = bidderF_R: pc($b, $i) & $i.tag = increase &
$i.content >100
$b: [F_L → $i: (F_R)
26
GTP Requête imbriquée
FOR $p IN document(“auction.xml”)//person
LET $a := FOR $t IN document(“auction.xml”)//closed_auction
WHERE $p/@id = $t/buyer/@person
RETURN <item>
{FOR $t2 IN document(“auction.xml”)//europe/item
WHERE $t/itemref/@item = $t2/@id
RETURN {$t2/name}}
</item>
WHERE $p//age > 25
RETURN <person name = {$p/name/text()}> {$a} </person>
→ Récupère le nom et les items achetés en europe, par toutes les personnes agées de plus de 25 ans.
27
$p.tag = person & $g.tag = age &$n1.tag = $n2.tag=name & $b.tag = buyer &$t.tag = closed_auction&$i.tag = itemref & $t2.tag = item & $g.content > 25
Join Condition:$p.id=$b.person & $i.item=$t2.id
$p
$n1$g
$t
$b $i $t2
$e
$n2
(0)
(0) (2)
(1.0)
(1.0)
(1.1.0)
(1.1.0)
(1.1.1)
(1.1.0)
GTP Requête imbriquée (2)
28
Transformation XQuery en GTP
XQuery : “FLWR”
Une expression FLWR :
ForClause ::= FOR $fv1 IN E1, … , $fvn IN En.(LetClause ::= LET $lv1 := E1, … , $lvn := En.)WhereClause ::= WHERE (E1, … , En).ReturnClause ::= RETURN {E1} … {En}.
Ei ::= FLWR (Requêtes imbriquées) | XPATH.
29
Algorithme de transformation
Il prend en entrée une expression FLWR et renvoie un GTP
Il parse au fur et à mesure la requête XQuery en utilisant la récursivité afin de gérer les expressions FLWR imbriquées dans une clause ‘FOR’ par exemple
Le parsing d’une expression Xpath entraîne la création d’un nouveau nœud dans le GTP résultat
30
4. Plan d’évaluation
La principale motivation derrière les GTP est de fournir une base pour une exécution efficace.
Pour cela: Supprimer les correspondances répétées pour des
TPQ similaires. Retarder la matérialisation des nœuds autant que
possible.
31
Algèbre physique
Index Scan ISp(S) : Sort chaque nœud satisfaisant le prédicat p en utilisant un index pour
les arbres S d’entrée. Filter Fp(S) :
Sort seulement les arbres satisfaisant le prédicat p des arbres S. L’ordre est préservé.
Sort Sb(S) : Trie la séquence d’entrée des arbres S sur la base de tri b.
Value Join Jp(S1,S2) : une comparaison des deux séquences d'arbres d'entrées, par le
prédicat de jointure p. L'ordre de la séquence de sortie est basé sur l'ordre de séquence d'entrée gauche de S1.
32
Algèbre physique (2)
Structural Join SJr(S1, S2): Les séquences d'arbres S1 et S2 doivent être triées en
fonction du noeud id. L’opérateur joins S1 et S2 basés sur la relation r entre eux (pc ou ad)pour chaque paire. La sortie est triée sur S1 ou S2 si besoin.
Group By Gb(S) : l'entrée S est triée sur le group by basé sur le prédicat b.
Merge M(S1,…,Sn) : Les Sj doivent avoir la même cardinalité k. Pour chaque
1≤i≤k, joindre l'arbre i avec chaque entrée sous une racine artificielle, et produire l'arbre. L'ordre est préservé.
33
Traduire le GTP en plan physique
Utilisation d'un algorithme spécifique pour générer le plan physique à partir du GTP
Obtention d'un plan du type :M
G G
S
SJ OSJ
S
S
watches/watch profile/interest
person, profile
person, profile person, profile
person, profile
F : filterIS : tag index scanSSJ : structural semi-joinSJ : strcutural joinOSJ : outer structural joinS : sortM : merge
34
Optimisation grâce aux schémas
Principe : les informations contenues dans le schéma XML
(.xsd) vont permettrent d’optimiser les GTP et les plans d’exécution physique en résultant
35
Élimination des nœuds « internes »
a//b//c a//c $a
$c
$b
$a
$c
Seulement si le schéma spécifie que tout chemin de a à c passe par un élément b
36
Deux nœud pour le même élément XML
FOR $b IN …//book
WHERE $b/title = ‘Germinal’
RETURN <x> {$b/title} {$b/year} </x>
$b
$t2$t $y
$b
$t $y
Seulement si le schéma spécifie que tout livre ne possède qu’un titre !
37
Éliminer les nœuds inutiles
FOR $a IN …./a[b]
RETURN {$a/c}
$a
$c$b
$a
$c
Seulement si le schéma spécifie que tout élément a possède au moins un sous-élément b !
38
Eliminer un ‘GROUP BY’ du plan physique
RETURN {$a/sous-element}
Une clause ‘FOR’ nécessite un ‘GROUP BY’ du résultat
Mais si le schéma spécifie que le sous-élément est unique alors ce ‘GROUP BY’ devient inutile
39
Performances des GTP
La méthode d’exécution faisant appel aux GTP surpasse en rapidité les méthodes de parcours classique de l’arborescence pour l’exécution de tous les types de requêtes
Les auteurs ont effectués ces tests dans l’environement suivant : TIMBER native XML database, PIII 866MHz, Ms Windows 2000, index sur les principaux éléments
40
5. Conclusion
Les GTP semblent être actuellement la méthode la plus efficace pour XQuery
Mode opératoire en 3 étapes :
Requête XQuery
Plan physique
GTP
Optimisation par schéma
Résultat