40
OrientX 系 系系系系 XML Group

OrientX 系统开发报告

  • Upload
    harley

  • View
    134

  • Download
    0

Embed Size (px)

DESCRIPTION

OrientX 系统开发报告. XML Group. 大纲. OrientX3.5 的主要特征 问题分析 Transform—— 基于代数的实现 数据抽取 ——Holistic Twig 实现 总结. V3.5 的主要特征. Support XQuery/Update (transform) A set of programming API Query Optimization Holistic Twig Query enabled Usable index management. 大纲. OrientX3.5 的主要特征 问题分析 - PowerPoint PPT Presentation

Citation preview

Page 1: OrientX 系统开发报告

OrientX 系统开发报告

XML Group

Page 2: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现• 数据抽取—— Holistic Twig 实现• 总结

Page 3: OrientX 系统开发报告

V3.5 的主要特征• Support XQuery/Update (transform)

• A set of programming API

• Query Optimization– Holistic Twig Query enabled – Usable index management

Page 4: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现• 数据抽取—— Holistic Twig 实现• 总结

Page 5: OrientX 系统开发报告

问题 1

• 如何实现 Transform 查询?– 查询编译

• Lex 、 Yacc

– 查询处理• 修改 XML 代数• 添加 Transform 操作符

Page 6: OrientX 系统开发报告

问题 2bib

book

title authoryear

1994 C++ Rose

price

30

publisher

Addison

book

title authoryear

2000 XML Peter

price

50.5

publisher

Kluwer

bib.xmlbib.xml

Page 7: OrientX 系统开发报告

问题 2

数据抽取:数据抽取:访问磁盘的操作访问磁盘的操作

结果构造:结果构造:内存中的中间结果内存中的中间结果

结果构造:结果构造:内存中的中间结果内存中的中间结果

数据抽取的效率很数据抽取的效率很大程度上决定了代大程度上决定了代

数系统的效率数系统的效率

<bib><bib> {for $b in {for $b in

doc("bib.xml")/bib/bookdoc("bib.xml")/bib/book let $a := $b/authorlet $a := $b/author where $b//publisher/text() = where $b//publisher/text() =

"Addison-Wesley" "Addison-Wesley" and and

$b/@year > 1991$b/@year > 1991 returnreturn <book year="{ <book year="{

$b/@year }">$b/@year }"> { $b/author}{ $b/author} </book>}</book>}</bib> </bib>

Page 8: OrientX 系统开发报告

问题 2— 数据抽取效率• 数据抽取的方法 [1] 有:

– Navigation :对文档树进行遍历,找到满足pattern tree 的实例树;效率低下。

– Structure Join :利用对 XML 数据的编码和Tag Index ,快速地找到满足祖先后代关系的结点。

– Holistic Twig Join :整体求解[1] [1] 孟小峰,罗道锋,蒋瑜,王宇,孟小峰,罗道锋,蒋瑜,王宇, OreintXA:OreintXA: 一种有效的一种有效的 XQueryXQuery 查询代数,软件学报,卷查询代数,软件学报,卷 1515 (( 1111 ),), 1648-16601648-1660 ,,20042004 ,, 11 11

OrientXOrientX 采用策采用策略略

Page 9: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现• 数据抽取—— Holistic Twig 实现• 总结

Page 10: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现

– Transform 操作概述– 查询编译器对 transform 的支持– Transform 的代数计划生成– Transform 的物理操作符的算法实现

• 数据抽取—— Holistic Twig 实现• 总结

Page 11: OrientX 系统开发报告

Transform 的语法定义• <transformExpr>::=

‘copy’ $var ‘:=‘ <Expr> (‘,’ $var ‘:=’ <Expr>)*

‘modify’ <Expr> ‘return’ <Expr>• Modify 操作的 Expr 是由 update 组成的表达式

( insert\delete\rename\replace )• Transform 更新操作与原有的四个更新操作的区

别是并不改变数据库的状态

Page 12: OrientX 系统开发报告

Insert Insert nodes nodes <user_tuple><user_tuple> <userid>U07</userid><userid>U07</userid> <name>Tom</name><name>Tom</name> </user_tuple></user_tuple>IntoInto doc("users.xml")/users doc("users.xml")/users

Copy Copy $nu:= doc("users.xml")/users$nu:= doc("users.xml")/users

Modify Insert Modify Insert nodesnodes <user_tuple><user_tuple>

<userid>U07</userid><userid>U07</userid> <name>Tom</name><name>Tom</name>

</user_tuple></user_tuple>IntoInto $nu $nu

ReturnReturn $nu $nu

ExtractExtract $u=doc(“users.xml”)//users$u=doc(“users.xml”)//users

Insert Insert $node into $u$node into $u

Construct Construct $node$node

<user_tuple><user_tuple> <userid>U07</userid><userid>U07</userid> <name>Tom</name><name>Tom</name>

</user_tuple></user_tuple>

Transform中的更新语句

基本更新语句

修改内容 内存拷贝 磁盘数据返回结果 构造结果并返回 没有返回

CopyCopy $nu:=$u$nu:=$u

Insert Insert $node into $u$node into $u

Construct Construct $node$node

<user_tuple><user_tuple> <userid>U07</userid><userid>U07</userid> <name>Tom</name><name>Tom</name>

</user_tuple></user_tuple>

ExtractExtract $u=doc(“users.xml”)//users$u=doc(“users.xml”)//users

Construct Construct $u$u

Page 13: OrientX 系统开发报告

Transform 查询引入新的代数操作

• Copy :𝜅 P1,NL(X)

• Modify 中所含的更新操作 ( 与 update 操作有区别 -modify 只对内存中的数据更新 ) :– Modify_insert: 𝜏m P1,P2,IS(X1,X2)

– Modify_delete: 𝜓m P, NL(X)– Modify_rename: 𝜌m P, RS(X)– Modify_replace: 𝜇m P1,P2,RS,RF(X1,X2)

Page 14: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现

– Transform 操作概述– 查询编译器对 transform 的支持– Transform 的代数计划生成– Transform 的物理操作符的算法实现

• 数据抽取—— Holistic Twig 实现• 总结

Page 15: OrientX 系统开发报告

transform 查询解析• 在 lex 词法解析器中增加对 copy 、 modify

的支持• 该写 yacc ,扩展语法树

Page 16: OrientX 系统开发报告

词法解析• Transform 语句的解析

– Lex

Page 17: OrientX 系统开发报告

语法解析• Transform 语句的解析

– Yacc

– 需要注意的是,在语法树中对 Copy 后的那个结点加一个标识,标志这棵语法树上的所有点都无需写回内存

Page 18: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现

– Transform 操作概述– 查询编译器对 transform 的支持– Transform 的代数计划生成– Transform 的物理操作符的算法实现

• 数据抽取—— Holistic Twig 实现• 总结

Page 19: OrientX 系统开发报告

Transform 的代数查询计划生成

AlgebraTreeGenerator

PatternTreeGenerator

XQuery syntax tree

PatternTree List & Predicate List

AlgebraTree

XQueryParser

Excutor

Page 20: OrientX 系统开发报告

Transform 的代数查询计划生成算法<transformExpr>::= ‘copy’ $var ‘:=‘<Expr1>‘modify’<Expr2>

‘return’ <Expr3>

ProcessAsXQuery(PTProcessAsXQuery(PT, Expr1), Expr1)

$var$var 加入加入 VARIALES,VARIALES, 指向指向PT.targetNodePT.targetNode

New copy(PT, PT.targetNode)New copy(PT, PT.targetNode)

AddToAlgebraPlan(copy)AddToAlgebraPlan(copy)

Process(modify(Expr2))Process(modify(Expr2))

ProcessasXQuery(NULL, Expr3)ProcessasXQuery(NULL, Expr3)

Page 21: OrientX 系统开发报告

实例Let $doc := doc(“bib.xml”)return copy $ndoc :=$doc

modify delete $ndoc/book[publisher = “Addison- Wesley”]/price return $ndoc/book[author = “Rose”]

Page 22: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现

– Transform 操作概述– 查询编译器对 transform 的支持– Transform 的代数计划生成– Transform 的物理操作符的算法实现

• 数据抽取—— Holistic Twig 实现• 总结

Page 23: OrientX 系统开发报告

Copy 操作符的实现• Copy :𝜅 P1,NL(X)

1.从 PatternTree List 中取出 P1,

2.begin:

read ( x ) //x 是 X 的一个实例树If( Match(x,P1))

return(x’) // x’ 由 NL 中的结点拷贝构成else goto step2

end: 直到将 X 中的实例比较完3.将结果 x’ 传给下一个操作符

Page 24: OrientX 系统开发报告

M odify 操作符的实现• Modify 中包含四个更新操作

Modify_insert 、 Modify_delete 、 Modify_rename 、Modify_replace

• 与原来的更新操作不同,只对 copy 操作的结果进行更新,并不修改数据库

Page 25: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现• 数据抽取—— Holistic Twig 实现

– 三种比较• 总结

Page 26: OrientX 系统开发报告

大纲

• Twig 查询– 导航式

– 二元结构连接

– TwigStack

Page 27: OrientX 系统开发报告

Twig 查询

......allauthorsallauthors

((11,,55::6060,,22))

authorauthor 11((11,,66::2020,,33))

fnfn11((11,,77::99,,44))

janejane 11((11,,88,,55))

poepoe((11,,1111,,55))

authorauthor 22

fnfn22 lnln22

johnjohn doedoe11((11,,2626,,55))

authorauthor 33

fnfn 33 lnln33

janejane 22((11,,4343,,55))

doedoe 22((11,,4646,,55))

lnln 11

查询查询 : : //author[fn=‘jane’ AND ln=‘doe’]//author[fn=‘jane’ AND ln=‘doe’]

Twig patternTwig pattern

authorauthor

fnfn lnln

janejane doedoe

Page 28: OrientX 系统开发报告

导航

a1a1

b1b1 b2b2 b3b3 c1c1

d1d1 d2d2 e1e1 f1f1

aa

dd

QueryQuery DocumentDocument

特点:特点:•容易实现容易实现•效率低下效率低下

导航式地匹配导航式地匹配 Twig PatternTwig Pattern 上的每一结点:从上的每一结点:从 twig patterntwig pattern 根节点根节点开始,深度优先遍历整个文档开始,深度优先遍历整个文档

Page 29: OrientX 系统开发报告

二元结构连接

aa

bb

dd

cc

aa

bb

bb

dd

aa

cc

a1a1

b1b1 b2b2 b3b3 c1c1

d1d1 d2d2 e1e1 f1f1

33 22 1122

1.1. 将将 Twig Twig PatternPattern 分解成二分解成二元结构关系元结构关系

2.2. 匹配二元关系匹配二元关系

3.3. 缝接缝接

大量中间结果大量中间结果

Page 30: OrientX 系统开发报告

TwigStack

• 区间编码• 每个结点看成一个流,并且按 star_pos 排序

StreamsStreamsTTaa: a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTjj: j1, j2: j1, j2

TTdd: d1, d2: d1, d2

......allauthorsallauthors

((11,,55::6060,,22))

authorauthor11((11,,66::2020,,33))

fnfn11((11,,77::99,,44))

janejane11((11,,88,,55))

poepoe((11,,1111,,55))

authorauthor22

fnfn22 lnln22

johnjohn doedoe11((11,,2626,,55))

authorauthor 33

fnfn33 lnln33

janejane22((11,,4343,,55))

doedoe22((11,,4646,,55))

lnln11

Page 31: OrientX 系统开发报告

栈和游标

q1

q2 q3

Cq1

Cq2 Cq3

q1对应的有序元素集

q2对应的有序元素集q3对应的有序元素集

Sq1

Sq2

Sq3

TwigStackTwigStack 中的栈和游标中的栈和游标

Page 32: OrientX 系统开发报告

• getNext 函数从流中获取满足 SE 的结点– 根据 Max-Child 结点跳过不可能是解的元素– 当当前结点与所有子查询结点构成匹配时,返回

当前结点,否则返回 Min-Child

getNextgetNextTwigStackTwigStack getNextgetNext

递归调用直到查询树的叶子递归调用直到查询树的叶子结点结点

……

主函数产生局部的单主函数产生局部的单 PathPath 路径路径 最后 最后 merge merge 所有单所有单 PathPath 路路

径径

Page 33: OrientX 系统开发报告

allauthorsallauthors(1,3:60,2)(1,3:60,2)

author1author1(1,4:11,3)(1,4:11,3)

fn1fn1(1,5:7,4(1,5:7,4

))

author2author2(1,12:19,3)(1,12:19,3)

author3author3(1,20:27,3)(1,20:27,3)

ln1ln1(1,8:10,4)(1,8:10,4)

jane1jane1(1,6,5)(1,6,5)

poepoe(1,9,5)(1,9,5)

johnjohn(1,14,5)(1,14,5)

doe1doe1(1,17,5)(1,17,5)

jane2jane2(1,22,5)(1,22,5)

doe2doe2(1,25,5)(1,25,5)

fn2fn2(1,13:15,4)(1,13:15,4)

ln2ln2(1,16:18,4)(1,16:18,4)

fn3fn3(1,21:23,4)(1,21:23,4)

ln3ln3(1,24:26,4)(1,24:26,4)

QueryQuery

DocumentDocument

authorauthor

fnfn lnln

janejane doedoe

StreamsStreamsTTa a : a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTj j : j1, j2: j1, j2

TTd d : d1, d2: d1, d2

StacksStacks

SaSf nSl nSjSd

Page 34: OrientX 系统开发报告

allauthorsallauthors(1,5:60,2)(1,5:60,2)

author1author1(1,4:11,3)(1,4:11,3)

fn1fn1(1,5:7,4(1,5:7,4

))

author2author2(1,12:19,3)(1,12:19,3)

author3author3(1,20:27,3)(1,20:27,3)

ln1ln1(1,8:10,4)(1,8:10,4)

jane1jane1(1,6,5)(1,6,5)

poepoe(1,9,5)(1,9,5)

johnjohn(1,14,5)(1,14,5)

doe1doe1(1,17,5)(1,17,5)

jane2jane2(1,22,5)(1,22,5)

doe2doe2(1,25,5)(1,25,5)

fn2fn2(1,13:15,4)(1,13:15,4)

ln2ln2(1,16:18,4)(1,16:18,4)

fn3fn3(1,21:23,4)(1,21:23,4)

ln3ln3(1,24:26,4)(1,24:26,4)

QueryQuery

DocumentDocument

authorauthor

fnfn lnln

janejane doedoe

StreamsStreamsTTa a : a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTj j : j1, j2: j1, j2

TTd d : d1, d2: d1, d2

StacksStacks

SaSf nSl nSjSd

Page 35: OrientX 系统开发报告

allauthorsallauthors(1,5:60,2)(1,5:60,2)

author1author1(1,4:11,3)(1,4:11,3)

fn1fn1(1,5:7,4(1,5:7,4

))

author2author2(1,12:19,3)(1,12:19,3)

author3author3(1,20:27,3)(1,20:27,3)

ln1ln1(1,8:10,4)(1,8:10,4)

jane1jane1(1,6,5)(1,6,5)

poepoe(1,9,5)(1,9,5)

johnjohn(1,14,5)(1,14,5)

doe1doe1(1,17,5)(1,17,5)

jane2jane2(1,22,5)(1,22,5)

doe2doe2(1,25,5)(1,25,5)

fn2fn2(1,13:15,4)(1,13:15,4)

ln2ln2(1,16:18,4)(1,16:18,4)

fn3fn3(1,21:23,4)(1,21:23,4)

ln3ln3(1,24:26,4)(1,24:26,4)

QueryQuery

DocumentDocument

authorauthor

fnfn lnln

janejane doedoe

StreamsStreamsTTa a : a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTj j : j1, j2: j1, j2

TTd d : d1, d2: d1, d2

StacksStacks

SaSf nSl nSjSd

Page 36: OrientX 系统开发报告

allauthorsallauthors(1,5:60,2)(1,5:60,2)

author1author1(1,4:11,3)(1,4:11,3)

fn1fn1(1,5:7,4(1,5:7,4

))

author2author2(1,12:19,3)(1,12:19,3)

author3author3(1,20:27,3)(1,20:27,3)

ln1ln1(1,8:10,4)(1,8:10,4)

jane1jane1(1,6,5)(1,6,5)

poepoe(1,9,5)(1,9,5)

johnjohn(1,14,5)(1,14,5)

doe1doe1(1,17,5)(1,17,5)

jane2jane2(1,22,5)(1,22,5)

doe2doe2(1,25,5)(1,25,5)

fn2fn2(1,13:15,4)(1,13:15,4)

ln2ln2(1,16:18,4)(1,16:18,4)

fn3fn3(1,21:23,4)(1,21:23,4)

ln3ln3(1,24:26,4)(1,24:26,4)

QueryQuery

DocumentDocument

authorauthor

fnfn lnln

janejane doedoe

StreamsStreamsTTa a : a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTj j : j1, j2: j1, j2

TTd d : d1, d2: d1, d2

StacksStacks

SaSf nSl nSjSd

Page 37: OrientX 系统开发报告

allauthorsallauthors(1,5:60,2)(1,5:60,2)

author1author1(1,4:11,3)(1,4:11,3)

fn1fn1(1,5:7,4(1,5:7,4

))

author2author2(1,12:19,3)(1,12:19,3)

author3author3(1,20:27,3)(1,20:27,3)

ln1ln1(1,8:10,4)(1,8:10,4)

jane1jane1(1,6,5)(1,6,5)

poepoe(1,9,5)(1,9,5)

johnjohn(1,14,5)(1,14,5)

doe1doe1(1,17,5)(1,17,5)

jane2jane2(1,22,5)(1,22,5)

doe2doe2(1,25,5)(1,25,5)

fn2fn2(1,13:15,4)(1,13:15,4)

ln2ln2(1,16:18,4)(1,16:18,4)

fn3fn3(1,21:23,4)(1,21:23,4)

ln3ln3(1,24:26,4)(1,24:26,4)

QueryQuery

DocumentDocument

authorauthor

fnfn lnln

janejane doedoe

StreamsStreamsTTa a : a1, a2, a3: a1, a2, a3

TTfnfn: fn1, fn2, fn3: fn1, fn2, fn3

TTlnln: ln1, ln2, ln3: ln1, ln2, ln3

TTj j : j1, j2: j1, j2

TTd d : d1, d2: d1, d2

StacksStacks

SaSfnSlnSjSd

aa33fnfn33lnln33JJ22dd22

Path1: a3-fn3-j2Path1: a3-fn3-j2

Path2: a3-ln3-d2Path2: a3-ln3-d2

Merge (j2, fn3, d2, ln3, a3)Merge (j2, fn3, d2, ln3, a3)

Page 38: OrientX 系统开发报告

大纲• OrientX3.5 的主要特征• 问题分析• Transform—— 基于代数的实现• 数据抽取—— Holistic Twig 实现• 总结

Page 39: OrientX 系统开发报告

总结• Transform 的实现• Holistic Twig 的实现

• 进展:

• 发布:– 本月底

TransDelete 操作符 已完成TransInsert 操作符 已完成TransReplace 操作符 开发测试中TransRename 开发中Holistic Twig 开发测试中

Page 40: OrientX 系统开发报告

Thanks !