图数据库组会汇报_第1页
图数据库组会汇报_第2页
图数据库组会汇报_第3页
图数据库组会汇报_第4页
图数据库组会汇报_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1图数据库组会汇报报告人2024年09月25日任务进度

徐柴俊工作进度Introduction:动机、方法介绍、例子、贡献Preliminaries:属性图模型、查询语言、PatternGraphRelatedWork:关系型数据库、图数据库3徐柴俊工作进度Introduction例子视图创建视图维护4n:Commentm:Postr:replyOf*..n:Commentm:Postr:ROOT_POSTn:Comment{id:1}m:Postr:replyOf*..n:Commentm:Postr1:replyOf*..:Comment{id:1}r2:replyOf*0..徐柴俊工作进度Introduction例子使用视图优化查询5c:Commentp:Postr1:replyOf*..f:Forumr2:containerOfc:Commentp:Post@M_r1:ROOT_POSTf:Forumr2:containerOf魏星迪工作进度为了在Neo4j里测试优化效果,要把使用视图优化后的PatternGraph反向重写为Cypher语句。比如match(n:Comment)−[r:replyOf∗1..]−>(m:Post)returnn,m这里有两个replyOf∗1..可以用ROOT_POST优化,可以重写为match(n:Comment)−[r:ROOT_POST]−>(m:Post)returnn,m输出为优化后的查询语句,测试时在需要优化的Cypher语句前加上Optimize即可,比如在tugraph中输入Cypher语句:Optimizematch(n:Comment)−[r:replyOf∗1..]−>(m:Post)returnn,m应该返回match(n:Comment)−[r:ROOTPOST]−>(m:Post)returnn,mPatterngraphMatch(m)-[r:keyword]->(n),(a)-[z:test]->(b)Anticypher魏星迪工作进度Tugraphcypher处理过程魏星迪工作进度函数的输入为cypher::RTContext∗ctx,antlr4::tree::ParseTree∗tree,conststd::vector<cypher::PatternGraph>&pattern_graphs,这里的&patterngraphs是优化后的PatternGraphs函数的输入例如这个patterngraph其中含有的nodes:m,n,a,b其中含有的relationships: r:keyword z:test此时通过遍历patterngraph应该得到的cypher语句应该是Match(m)-[r:keyword]->(n),(a)-[z:test]->(b)其中r:keyword和z:test可能是通过视图优化后的边。

魏星迪工作进度Neo4j视图维护借用neo4j扩展apoc触发器来维护视图match(n:Comment)-[:replyOf*..]->(m:Post)WITHn,mCREATE(n)-[r:ROOT_POST]->(m)魏星迪工作进度Neo4j视图维护借用neo4j扩展apoc触发器来维护视图{

"match(n:Comment)-[:replyOf*..]->(m:Post)WITHn,mCREATE(n)-[r:ROOT_POST]->(m)":[

[

"match(n:Comment)-[*0]-(viewvetex)-[:replyOf*..]->(m:Post)WITHn,mmatch(n)-[r:ROOT_POST]->(m)WITHn,m,collect(r)asviewdeleteview[0]",

"match(n:Comment)-[:replyOf*..]->(m:Post)-[*0]-(viewvetex)WITHn,mmatch(n)-[r:ROOT_POST]->(m)WITHn,m,collect(r)asviewdeleteview[0]",

"match(n:Comment)-[:replyOf*1..]->(viewvetex)->[:replyOf*0..]->(m:Post)WITHn,mmatch(n)-[r:ROOT_POST]->(m)WITHn,m,collect(r)asviewdeleteview[0]"

],

[

"match(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,mCREATE(n)-[r:ROOT_POST]->(m)"

],

[

"match(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,mmatch(n)-[r:ROOT_POST]->(m)WITHn,m,collect(r)asviewdeleteview[0]"

]

]}rewrite_cypher.json魏星迪工作进度Neo4j视图维护借用neo4j扩展apoc触发器来维护视图CALLapoc.trigger.add('triggerOnEdgeDelete','UNWIND$deletedRelationshipsASviewedge//只匹配isview属性为空的边WITHviewedgeWHEREviewedge.isviewISNULLMATCH(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,mMATCH(n)-[r:ROOT_POST]->(m)WITHn,m,collect(r)ASviewDELETEview[0]',{phase:"before"})魏星迪工作进度目前进度修改了tugraph中的视图维护语句逻辑,从特定点和边的语句改成了模板类型,访问器只需要接受视图语句便可以输出针对该视图的重写语句neo4j的视图维护部分增添边部分可以成功维护借助apoc.trigger,并且可以通过python脚本完成多个视图触发语句的部署问题在删除部分,本来添加了一条属性{isview}防止其递归调用触发器,在手动测试维护逻辑,可以正常维护,但apoc.trigger在删除时,phase选用before,neo4j也会认为边已被删除,导致后续维护逻辑无法进行。CALLapoc.trigger.install('myTrigger','UNWIND$deletedRelationshipsASrWITHrWHERENOTr.is_view=true//视图维护语句.....

魏星迪工作进度neo4j测试方法框图魏星迪工作进度rewrite_visitor模块:根据保存在test_in.txt中的视图创建语句,生成其对应的视图维护语句,其中包括删除

点,增加边,删除边的维护语句。输入:视图创建语句输出output.json,视图维护语句魏星迪工作进度rewrite_visitor生成规则:对于点的删除,要将可变长的边进行展开再讨论node的位置,对于一条可变长边[∗x..y]可将其展开为:∗Match(n)−[∗0]−>(k)−[∗x..y]−>(m)∗Match(n)−[∗1]−>(k)−[∗{x−1..{y−1]−>(m)...∗Match(n)−[x]−>(k)−[∗0..{y−x}

]−>(m)∗Match(n)−[∗{x+1}]−>(k)−[∗0..{y−x−1]−>(m)...∗Match(n)−[∗y]−>(k)−[∗0]−>(m)----------------------------------------------------∗Match(n)−[∗0]−>(k)−[∗{x−1}..]−>(m)∗Match(n)−[∗1]−>(k)−[∗{x−2}..]−>(m)...∗Match(n)−[∗x..]−>(k)−[∗0..]−>(m)对于无上界的可变长边[∗x..]可将其展开为:∗Match(n)−[*0]−>(src)−[r]−>(dst)−[*{x−1}..]−>(m)∗Match(n)−[*1]−>(src)−[r]−>(dst)−[*{x−2}..]−>(m)...∗Match(n)−[*i]−>(src)−[r]−>(dst)−[*{x−1−i}..]−>(m)...∗Match(n)−[*{x−1}..]−>(src)−[r]−>(dst)−[*0..]−>(m)对于有上界的可变长边[*x..y]可将其展开为:∗Match(n)−[*0]−>(src)−[r]−>(dst)−[*{x−1}..{y−1}]−>(m)∗Match(n)−[*1]−>(src)−[r]−>(dst)−[*{x−2}..{y−2}]−>(m)...∗Match(n)−[*i]−>(src)−[r]−>(dst)−[*{x−1−i}..{y−1−i}]−>(m)...∗Match(n)−[*{x−1}]−>(src)−[r]−>(dst)−[*0..{y−x}]−>(m)∗Match(n)−[*x]−>(src)−[r]−>(dst)−[*0..{y−x−1}]−>(m)...∗Match(n)−[*{y−1}]−>(src)−[r]−>(dst)−[*0]−>(m)魏星迪工作进度rewrite_visitor模块:例:test_in.txt->”match(n:Comment)-[:replyOf*..]->(m:Post)WITHn,mCREATE(n)-[r:ROOT_POST]->(m)”output.json:{"match(n:Comment)-[:replyOf*..]->(m:Post)WITHn,mCREATE(n)-[r:ROOT_POST]->(m)":[[

"optionalmatch(n:Comment)-[*0]-(viewvetex)-[:replyOf*..]->(m:Post)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]",

"optionalmatch(n:Comment)-[:replyOf*..]->(m:Post)-[*0]-(viewvetex)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]","optionalmatch(n:Comment)-[:replyOf*1..]->(viewvetex)->[:replyOf*0..]->(m:Post)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]"],[

"optionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeCREATE(n)-[r:ROOT_POST]->(m)"],["optionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewedge,collect(r)asviewdeleteview[0]"]]}魏星迪工作进度neo4j_test模块:根据保存在output.json中的rewrite_visitor的输出也就是

视图维护语句以及需要运行的cypher语句(可以选择将

其保存在input.txt中)产生新的附带有视图维护语句的实

际执行语句。输入:视图维护语句,需要运行的cypher语句输出new_cypher->带有视图维护语句的cypher语句魏星迪工作进度neo4j_test模块:new_cypher生成规则:在neo4j_test中定义了如图中的四个列表,分别为view(保

存视图创建语句),delete_nodes(保存视图删除点的维护

语句),add_relas(添加边的维护语句),delete_relas

(删除边的维护语句)。其结果由其中的输入(output.

json)得到。根据input.txt中取得的cypher语句中的不同关键字如,delete,create来判别此条cypher语句的目的,并且由此得到不同的添加了视图维护语句的new_cypher。test_cypher+$connection_cypher+$UNWIND+∑withviewedge+add_relas[i]ifadd_relasnew_cypher=

$connection_cypher+$UNWIND+∑withviewedge+dele_relas[i]+test_cypherifdele_relas

$connection_cypher+$UNWIND+∑withviewvetex+dele_node[i]+test_cypherifdele_nodesconnection_cypher=with[vars]asdeviewsUNWIND=UNWINDdeviewsasviewedge/viewvetexnew_cypher生成实例add_relasdelete_relasdelete_nodesoptionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeCREATE(n)-[r:ROOT_POST]->(m)optionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewedge,collect(r)asviewdeleteview[0]

"optionalmatch(n:Comment)-[*0]-(viewvetex)-[:replyOf*..]->(m:Post)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]","optionalmatch(n:Comment)-[:replyOf*..]->(m:Post)-[*0]-(viewvetex)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]","optionalmatch(n:Comment)-[:replyOf*1..]->(viewvetex)->[:replyOf*0..]->(m:Post)WITHn,m,viewvetexoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewvetex,collect(r)asviewdeleteview[0]"test_cyphernew_cyphermatch(n:Comment{CommentId:"2061584302086"})-[r:replyOf]->(m:Post{id:"2061584302084"})withrlimit1deletermatch(n:Comment{CommentId:"2061584302086"})-[r:replyOf]->(m:Post{id:"2061584302084"})withrlimit1WITH[r]asdeleviewsUNWINDdeleviewsasviewedgeoptionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeoptionalmatch(n)-[r:ROOT_POST]->(m)WITHn,m,viewedge,collect(r)asviewdeleteview[0]withviewedgematch(n:Comment{CommentId:"2061584302086"})-[r:replyOf]->(m:Post{id:"2061584302084"})withrlimit1deletermatch(n:Comment{CommentId:\"2061584302086\"}),(m:Post{id:\"2061584302084\"})withn,mcreate(n)-[:replyOf{creationDate:1266604713724}]->(m)match(n:Comment{CommentId:\"2061584302086\"}),(m:Post{id:\"2061584302084\"})withn,mcreate(n)-[r:replyOf{creationDate:1266604713724}]->(m)WITH[r]ascreateviewsUNWINDcreateviewsasviewedgeoptionalmatch(n:Comment)-[:replyOf*0..]->()-[viewedge:replyOf]->()-[:replyOf*0..]->(m:Post)WITHn,m,viewedgeCREATE(n)-[r:ROOT_POST]->(m)match(n:Comment{CommentId:\"2061584302086\"})-[r:replyOf]->(m:Post{id:\"2061584302084\"})returnn,r,mmatch(n:Comment{CommentId:\"2061584302086\"})-[r:replyOf]->(m:Post{id:\"2061584302084\"})returnn,r,m魏星迪工作进度neo4j_test.py执行流程魏星迪工作进度特殊情况m:Accountn1n:Loann3VIEW:MATCH(n:Account)-[r1*..2]->(m:Loan)whereall(relinr1whererel.is_viewisnull)withn,mCREATE(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)optionalmatch(n:Account)-[ANONR2*1]->()-[view_edge]->()-[ANONR3*0]->(m:Loan)WHEREALL(relINANONR2WHERErel.is_viewisnull)

ANDview_edge.is_viewisnull

ANDALL(relINANONR3WHERErel.is_viewisnull)

withn,m,view_edgeCREATE(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)view_edger1r2魏星迪工作进度特殊情况VIEW:MATCH(n:Account)-[r1*..2]->(m:Loan)whereall(relinr1whererel.is_viewisnull)withn,mCREATE(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)optionalmatch(n:Account)-[ANONR2*1]->()-[view_edge]->()-[ANONR3*0]->(m:Loan)WHEREALL(relINANONR2WHERErel.is_viewisnull)ANDview_edge.is_viewisnullANDALL(relINANONR3WHERErel.is_viewisnull)withn,m,view_edgeoptionalmatch(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)withcollect(r)asviews,n,m,view_edgedeleteviews[0]m:Accountn1n:Loanview_edger1r2n3魏星迪工作进度修改维护语句

无法维护上述特殊情况可以解决上述情况,但无法传递view_edge可以解决上述情况并传递view_edgeoptionalmatch(n:Account)-[ANONR2*1]->()-[view_edge]->()-[ANONR3*0]->(m:Loan)WHEREALL(relINANONR2WHERErel.is_viewisnull)ANDview_edge.is_viewisnullANDALL(relINANONR3WHERErel.is_viewisnull)withn,m,view_edge

optionalmatch(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)withcollect(r)asviews,n,m,view_edgedeleteviews[0]optionalmatch(n:Account)-[ANONR2*1]->()-[view_edge]->()-[ANONR3*0]->(m:Loan)WHEREALL(relINANONR2WHERErel.is_viewisnull)ANDview_edge.is_viewisnullANDALL(relINANONR3WHERErel.is_viewisnull)withn,m,count(*)asnummatch(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)withnum,collect(r)asviewsUNWIND

range(0,num-1)

AS

ideleteviews[i]optionalmatch(n:Account)-[ANONR2*1]->()-[view_edge]->()-[ANONR3*0]->(m:Loan)WHEREALL(relINANONR2WHERErel.is_viewisnull)ANDview_edge.is_viewisnullANDALL(relINANONR3WHERErel.is_viewisnull)withn,m,collect(view_edge)asview_edgeswithn,m,size(view_edges)asnum,view_edgesoptionalmatch(n)-[r:ACCOUNT_LOAN{is_view:true}]->(m)withcollect(r)asviews,n,m,num,view_edgesUNWINDrange(0,num-1)asideleteviews[i]维护加速比0.20.6魏星迪工作进度snb_resultsnb测试案例无优化查询时间视图优化时间优化后查询时间加速比记录条数"match(n0:Comment)-[r1:replyOf*..]->(n1:Post)match(n1)<-[r2:replyOf*..]-(n2:Comment)whereid(n0)<>id(n2)returncount(n1)"41.160.0143421.951.874925941136"match(n0:Place{name:$placeName})<-[r1:isPartOf]-(n1:Place)match(n0)<-[r2*2]-(n2:Comment)returncount(n2)"148.630.0126939.103.801257428000"match(n0:Place)<-[r1:personIsLocatedIn]-(n1:Person)match(n1)-[r2]->(n2)-[r3]->(n3:Place)returncount(n3)"6.89320.013711.56364.40852410213"match(n0:Place)<-[r1*2]-(n1:Comment)

match(n1)-[r2:replyOf*..]->(n2:Post)returncount(n2)"21.09740.01267.11322.96596156507"match(n0:Place{name:$placeName})<-[r1]-(n1)<-[r2]-(n2:Person)match(n0)<-[r3*2]-(n3:Comment)returncount(n3)"140.63640.0095132.91281.05818171747840"match(n0:Tag)<-[r1:hasInterest]-(n1:Person)

match(n1)-[r2]->(n2)-[r3]->(n3:Place)wheren0.hasType>$tagTypereturncount(n3)"29.28480.013221.63341.353641324343"match(n0:Comment)-[r1:replyOf*..]->(n1:Post)match(n1)-[r2:postHasCreator]->(n2:Person)match(n2)-[r3]->(n3)-[r4]->(n4:Place)wheren0.creationDate<$creationDatereturncount(n4)"70.95460.009055.92561.2687100784775魏星迪工作进度snb_resultsnb测试案例无优化查询时间视图优化时间优化后查询时间加速比记录条数"MATCREATE(p1)-[:knows{creationDate:$creationDate,weight:$weight}]->(p2)"CH(p1:Person{id:$person1Id}),(p2:Person{id:$person2Id})0.01726400.02930250.5891704"result":"[]","time":493,"add_nodes":0,"delete_nodes":0,"add_rel":2,"delete_rel":0"MATCH(n:Person{id:$personId})-[r:likes]->(m:Comment{id:$commentId})DELETEr"0.00715800.01370330.5224040"result":"[]","time":613,"add_nodes":0,"delete_nodes":0,"add_rel":0,"delete_rel":2"MATCH(n:Post{id:$postId})

DETACHDELETEn"0.0128200.01582880.8099682"result":"[]","time":1092,"add_nodes":0,"delete_nodes":1,"add_rel":0,"delete_rel":26魏星迪工作进度snb_result魏星迪工作进度snb_resultfinbench测试案例无优化查询时间视图优化时间优化后查询时间加速比记录条数"match(n0:Comment)-[r1:replyOf*..]->(n1:Post)match(n1)<-[r2:match(n0:Person)-[r1*2]->(n1:Company)match(n1)<-[r2*2]-(n2:Person)whereid(n0)<>id(n2)returncount(n1)47.30380.009027.62561.71233676match(n0:Company)-[r1]->(n1)-[r2]->(n2:Loan)match(n2)<-[r3:repay]-(n3:Account)returncount(n3)33.02160.010310.01363.29763614007match(n0:Person)-[r1*2]->(n1:Company)match(n0)-[r2:own]->(n2:Account)returncount(n1)26.78360.00996.0644.41685151969match(n0:Medium)-[r1:signIn]->(n1:Account)match(n1)-[r2*..2]->(n2:Loan)returncount(n2)198.19920.0147122.19161.622076828189match(n0:Loan)<-[r1]-(n1)<-[r2]-(n2:Company)match(n2)<-[r3*2]-(n3:Person)returncount(n3)52.05680.012811.59464.489714601110match(n0:Account)<-[r1:own]-(n1:Company)match(n1)-[r2]->(n2)-[r3]->(n3:Loan)returncount(n3)34.25040.01063.83048.94172724147match(n0:Account)-[r1*..2]->(n1:Loan)match(n1)<-[r2]-(n2)<-[r3]-(n3:Company)returncount(n1)129.25340.013129.77024.341739595119魏星迪工作进度snb_resultfinbench测试案例无优化查询时间视图优化时间优化后查询时间加速比记录条数MATCH(acc:Account{id:$accountId}),(loan:Loan{id:$loanId})CREATE(acc)<-[:deposit{timestamp:$depositTime,amount:$amt}]-(loan)0.014900.01780.8364"result":"[]","time":15,"add_nodes":0,"delete_nodes":0,"add_rel":9,"delete_rel":0MATCH(acc:Account{id:$accountId})-[r:repay{timestamp:$repayTime}]->(loan:Loan{id:$loanId})deleter0.005500.01300.4236"result":"[]","time":15,"add_nodes":0,"delete_nodes":0,"add_rel":0,"delete_rel":8MATCH(loan:Loan{id:$loanId})DETACHDELETEloan0.008100.01590.5074"result":"[]","time":21,"add_nodes":0,"delete_nodes":1,"add_rel":0,"delete_rel":32魏星迪工作进度finbench_result魏星迪工作进度snb_resultMATCH(acc:Account{id:$accountId}),(loan:Loan{id:$loanId})CREATE(acc)<-[:deposit{timestamp:$de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论