在关系数据库上支持命令式图形查询的方法和系统的制作方法_3

文档序号:9471402阅读:来源:国知局
不限于此,也可以是其他类型的统计数据,例如,查询的时间等。
[0060]在一个实施例中,所述关系数据库支持的所述执行计划的操作可以包括下列中的一个或多个:图遍历操作以及在图遍历操作中的变换、过滤、和分支操作等,所述关系数据库不支持的所述执行计划的操作可以包括下列中的一个或多个:路径操作、循环操作、递归操作、增加、删除、和改变关系数据库图数据的操作等。
[0061]在一个实施例中,所述命令式图形查询可以是典型的Gremlin查询。
[0062]如此,利用各个实施例,可以无需将所述执行计划的操作直接分解为关系数据库的一系列原语操作,来使得在关系数据库上能够用图形数据库所支持的命令式图形查询来进行相同的查询,实现相同的执行计划,同时使得查询的运行速度更快。
[0063]图5示出了根据本发明的又一个实施例的在关系数据库上支持命令式图形查询的系统的示例方框图。图5以Gremlin的命令式图形查询语言为例来例示在关系数据库上支持命令式图形查询的系统500的一个优选实施例。
[0064]如图5所示,该系统500包括=Gremlin解析器501,被配置为将输入的Gremlin查询语言解析为执行计划的操作;SQL函数翻译器502,被配置为将解析的执行计划的操作翻译为SQL函数;CTE翻译器503,被配置为根据CTE模板和关系数据库的关系表,将所述关系数据库支持的所述SQL函数翻译为公共表表达式CTE查询;UDF翻译器504,被配置为根据UDF模板和关系数据库的关系表,将关系数据库不支持的所述SQL函数翻译为用户自定义函数UDF查询;存储过程SP翻译器505,被配置为根据SP模板和关系数据库的关系表,将特殊SQL函数翻译为存储过程SP查询;查询优化器506,被配置为根据关系数据库的统计数据,将所述CTE查询、UDF查询和/或SP查询进行优化;查询执行器507,被配置为在关系数据库上执行所述优化后的CTE查询、UDF查询和/或SP查询。其中,SQL函数翻译器
502、CTE翻译器503、UDF翻译器504、存储过程SP翻译器505可以统称为查询创建器。在这里,SQL函数翻译器502则利用SQL内置函数处理Gremlin查询中的特定操作、如比较大小、字符串拼接等,而UDF是用户自定义的SQL函数,用来翻译SQL内置函数不支持的函数。当然,SQL函数翻译器502并非必须的。
[0065]翻译为CTE的所述关系数据库支持的执行计划的操作可以包括图形遍历操作,例如InPipe、OutPipe、PropertyFilterPipe等以及在图遍历操作中的变换、过滤、和分支操作等,而翻译为UDF的所述关系数据库不支持的所述执行计划的操作可以包括例如路径处理等,翻译为SP的特殊执行计划操作可以包括例如递归、循环操作、增加、删除、或改变图数据的操作等。
[0066]从图5所示的示例数据流箭头可以看出,执行计划的各个操作可以先通过UDF翻译器504和SQL函数翻译器502 (顺序不限)(如果没有需要翻译成UDF查询的执行计划,则省略该步骤),另外,可以经过CTE翻译器503,另外,可以经过SP翻译器505 (如果没有需要翻译成SP查询的执行计划的操作,则省略该步骤)。CTE翻译器503可能会用到UDF翻译器504和SQL函数翻译器502的结果,SP翻译器505可能会用到UDF翻译器504、SQL函数翻译器502、和CTE翻译器503的结果。最终的翻译结果可以CTE形式的SQL查询或SP调用。而UDF/SQL函数可以在翻译过程中已经被嵌入CTE/SP中。同样,如果最终的翻译结果仅是SP调用,则CTE也可能会被嵌入该SP调用中。
[0067]注意,图5所示的箭头所表示的顺序仅是示例而非限制,事实上,可以根据执行计划的操作的具体内容来改变经过上述UDF翻译器504和SQL函数翻译器502、CTE翻译器
503、SP翻译器505的顺序、以及是否省略上述任何翻译器。
[0068]图6A-6F示出了根据图5所示的系统执行的具体步骤的过程的示意图。
[0069]如图6A所示,最高行的Gremlin命令式图形查询语言为:例如,g.V.has (‘uri,, ‘http…/Person,).1n (‘TYPE,).has (‘name,, ‘Tom Hanks').0ut (‘ACTS_IN’).store (x).1n ( ‘ACTS_IN’).SimplePath ()。
[0070]在经过图5所示的Gremlin解析器501之后,解析为如图6A所示的第二行的执行计划的操作(或称管道Pipe),例如:
[0071]StartPipe->PropertyFilterPipe->InPipe->PropertyFilterPipe->OutPipe->Store Pipe->InPipe_>CyclicFiIterPipeο
[0072]如图6A所示,可以通过UDF翻译器504来将不被关系数据库支持的执行计划的操作翻译为UDF函数。由于UDF函数允许用户自定义函数来添加新函数,对关系数据库的功能进行扩充,从而使得用户自定义的新的UDF函数能够支持本来不被关系数据库支持的执行计划的操作、例如路径处理等,即,将这种例如图形数据库能支持的路径处理翻译为关系数据库也能支持的一种UDF函数。
[0073]如此,管道StartPipe、PropertyFiIterPipe> InPipe、PropertyFiIterPipe>OutPipe、StorePipe、InPipe都不被翻译为UDF,只有管道CyclicFilterPipe被翻译为图6A中的函数UDF_ISSIMPATH(p),该函数估计字符串P是否表示一条简单路径。路径操作是图查询中的一类典型操作,而简单路径为不含重复节点的路径。判断一条给定路径是否为简单路径可以作为很多图算法的基础。当然,该UDF函数仅是一个例子。
[0074]当然,如果通过Gremlin解析器501解析出来的执行计划的操作中不存在不被关系数据库支持的执行计划的操作,即仅存在能够被关系数据库支持的执行计划的操作,则该UDF翻译器504的UDF翻译步骤也可以省略。
[0075]参考图6B,在经过了 UDF翻译器504翻译了本来不被关系数据库支持的执行计划的操作之后,剩下的执行计划的操作可以包括能够本来被关系数据库支持的执行计划的操作,例如InPipe、OutPipe、PropertyFilterPipe等以及在图遍历操作中的变换、过滤、和分支操作等;或者,在如上所述、仅存在能够被关系数据库支持的执行计划的操作的情况下,接下来,如图6B所示,通过CTE翻译器503来进行执行计划的操作到CTE的翻译,其过程是例如,CTE翻译器将图形操作转换为SQL片段,且连续的SQL片段可以被组合为一个CTE查询。例如图6B中的各个CTE函数(以关系运算符表示),σ = ^http:.../Person, (VPROP)(对应于管道 StartPipe 和 PropertyFilterPipe)、n VAL(o label = ‘TYPE, (RPH))(对应于管道 InPipe)、。_e = -Tc? Hanks' (VPROP)(对应于第二个管道 ProperFi 11erP?Ρθ)、π VAL (。label.‘ACTS—IN, (DPH))(对应于管道 OutPipe)、P (X)(对应于管道 StorePipe)、?(σ label = ‘ACTS—IN, (RPH))(对应于管道InPipe)。。其中π表示投影操作,σ表示选择操作,P表示重命名操作。
[0076]对于可逆操作(例如InPipe和OutPipe以及相互可逆的操作),CTE翻译器也可以生成逆向的SQL片段,多个SQL片段可组合为一个CTE查询。图6Β中的第二行CTE函数是示例的逆向的SQL片段组合而成的CTE查询函数,例如σ Ur1 = ‘http:.../PCT_,(VPROP)的逆操作仍然是σ
uri = ‘http:"./Person’
(VPROP),等等,而
VAL ( 0 label = ‘TYPE,
(RPH))的逆操作是
π VAL ( 0 label
=‘type,(DPH))等等。
[0077]在一些情况下,CTE翻译器503也可以将UDF翻译器504翻译的某些用户自定义函数UDF查询进一步翻译为公共表表达式CTE查询。例如,图6E中的CTE函数σ UDF—ISSIMPATH= true就是将翻译后的UDF函数1]0?_133頂?41'!1(?)进一步翻译为CTE函数而得到的。如此,可以进一步加快查询的运行速度。
[0078]图6C示出了将SQL片段组合成CTE函数的一个示例。例如,在左侧大的中括号括起的每个部分都是一个CTE函数,而右侧具体的函数、例如TEMP_1、TEMP_2_0等等是各个SQL片段。如此,将SQL片段组合为CTE函数,相比于分别运行每条SQL片段来说,能够进一步加快运行速度。
[0079]另外,在一些情况下,存储过程SP翻译器505也可以将UDF翻译器504翻译的某些用户自定义函数UDF查询和/或CTE翻译器503翻译的某些CTE查询进一步翻译为存储过程SP查询。如此,也可以进一步加快查询的运行速度。
[0080]在此,为了进一步减少翻译后的CTE查询的数量并节省CTE查询的时间和成本,CTE翻译器503还可以响应于在所述翻译后的公共表表达式CTE查询中存在重复的公共表表达式CTE查询,合并所述重复的公共表表达式查询为一个公共表表达式CTE查询。
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1