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

文档序号:9471402阅读:来源:国知局
义函数UDF和/或存储过程SP来翻译该执行计划的操作,这样,使得图形数据库所支持的几乎所有命令式图形查询都可以完整地翻译为关系数据库所支持的查询语句,同时也减少了翻译后的查询语句(包括例如CTE、UDF和/或SP语句)的数量,使得查询的运行速度更快。
[0031]在一个实施例中,该方法200还可以包括:将翻译后的用户自定义函数查询中的特定查询进一步翻译为公共表表达式查询。有些用户自定义函数查询可以被进一步翻译为公共表表达式查询,如此,可以进一步加快查询的运行速度。
[0032]在一个实施例中,该方法200还可以包括:将翻译后的公共表表达式查询中的特定查询进一步翻译为存储过程查询。在一个实施例中,步骤204还可以包括:将翻译后的用户自定义函数查询中的特定查询进一步翻译为公共表表达式查询。如此,有些用户自定义函数查询和/或公共表表达式查询可以被进一步翻译为存储过程查询,如此,可以进一步加快查询的运行速度。
[0033]在图2和图3所示的方法200和300中,在一个实施例中,该方法200还可以包括:响应于在所述翻译后的公共表表达式查询中存在重复的公共表表达式查询,合并所述重复的公共表表达式查询。
[0034]例如,存在一个公共表表达式CTE查询是查询一个表来找到甲,而另一个公共表表达式CTE查询是查询同一个表来找到乙,那么就可以认为这两个CTE是重复的,且可以合并它们来得到一个CTE查询,即查询该表来一次找到甲和乙。
[0035]在该实施例中,可以通过合并重复的公共表表达式CTE查询来使得翻译后的查询语句的数量更少,使得查询的运行速度进一步加快。
[0036]在一个实施例中,图2或图3所示的方法200或300中还可以包括:基于所述关系数据库,根据翻译后的查询,建立查询树;根据查询树的每个节点的估计代价,来重构所述查询树以使得整体的估计代价减少。
[0037]在一个实施例中,所述查询树是左深连接树,该左深连接树中的每个具有两个子节点的连接父节点表示两个关系数据集的连接操作,每个只有一个子节点的非连接父节点和该子节点表示一个关系数据集的选择或投影操作,该左深连接树的各节点根据后序遍历顺序标号,最左侧的子节点具有最小标号。该查询树的建立是本领域公知的技术,利用左深连接树来构造查询树可以比较直观地反映查询的过程。
[0038]在一个实施例中,根据查询树的每个节点的估计代价,来重构所述查询树以使得整体的估计代价减少的步骤可以包括改写查询树的连接的顺序,使得整体的估计代价最小。具体地,在另一实施例中,从具有最小标号的连接父节点开始,依次根据标号顺序处理每个连接父节点,其中,对一个连接父节点的处理包括:估计与该连接父节点连接的两个子树的代价,及连接这两个子树得到该连接父节点的代价;通过如下来判断左右子树是否可交换:估计交换左右子树后的连接父节点的代价;若交换左右子树后的代价更小,则交换其左右子树,以改写该连接父节点的连接顺序。
[0039]例如,如果与该连接父节点连接的两个子树分别代表包括扫描所有人标识号码ID的表格和扫描所有人、动物、电影等标识号码对应的名字的表格(其中叫Bob的事物有900个,叫Bill的事物有800个,等等),且这两个子树的代价分别为80K(—共有80K个人)和900 (900个名字叫做Bob的事物),而连接这两个子树查询叫Bob的人,得到该连接父节点,其代价为80Κ(因为要遍历所有80Κ个人来查询叫Bob的人);而如果交换这两个子树,即在所有叫Bob的事物中哪些是人,则查询的代价则减少为900,因为只需要查询900个叫Bob的事物是否是人即可,这样交换两个子树以后,查询的代价减少了,则可以交换两个子树,以改写该连接父节点的连接顺序。
[0040]在该实施例中,可以通过对翻译后的CTE、UDF和/或SP查询语句所构造的查询树进行优化,来进一步优化翻译后的CTE、UDF和/或SP查询语句,以使得执行所有的查询时所需要查询的总体代价最少(或至少减少),这样可以尽可能降低在关系数据库上进行这些查询所花费的时间等成本。
[0041]在上述例子中,通常,所述每个节点的估计代价可以是基于关系数据库的统计而得到的每个数据集的数目。当然,该估计代价不限于此,也可以是其他类型的统计数据,例如,查询的时间等。
[0042]在一个实施例中,所述关系数据库支持的所述执行计划的操作可以包括下列中的一个或多个:图遍历操作以及在图遍历操作中的变换、过滤、和分支操作等,所述关系数据库不支持的所述执行计划的操作可以包括下列中的一个或多个:路径操作、循环操作、递归操作、增加、删除、和改变关系数据库图数据的操作等。
[0043]在一个实施例中,所述命令式图形查询可以是典型的Gremlin查询。
[0044]如此,利用各个实施例,可以无需将所述执行计划的操作直接分解为关系数据库的一系列原语操作,来使得在关系数据库上能够用图形数据库所支持的命令式图形查询来进行功能基本相同的查询,得到基本相同的执行结果,同时使得查询的运行速度更快。
[0045]图4示出了根据本发明的再一个实施例的在关系数据库上支持命令式图形查询的系统400的示例方框图。
[0046]图4所示的在关系数据库上支持命令式图形查询的系统400包括:将命令式图形查询解析为执行计划的操作的解析装置401 ;将所述关系数据库支持的执行计划的操作翻译为公共表表达式查询的翻译装置402 ;在关系数据库上执行所述翻译后的公共表表达式查询的执行装置403。
[0047]如此,相比于传统的将命令式图形查询直接分解为在关系数据库上能够执行的大量原语操作,本实施例通过利用在关系数据库上能够执行的公共表表达式CTE来翻译图形数据库所支持的命令式图形查询,使得在关系数据库上能够用图形数据库所支持的命令式图形查询来进行相同的查询,实现相同的执行计划,同时由于所翻译的公共表表达式CTE的代码数量相比于传统地分解的原语操作更少(因为一个CTE中可能完成了多个原语操作的功能),因此使得查询的运行速度更快。
[0048]在一个实施例中,该系统400还可以包括:将关系数据库不支持的执行计划的操作翻译为用户自定义函数查询的装置;在关系数据库上执行所述翻译后的用户自定义函数查询的装置。
[0049]在一个实施例中,该系统400还可以包括:将关系数据库不支持的所述执行计划的操作翻译为存储过程查询的装置;在关系数据库上执行所述翻译后的存储过程查询的装置。
[0050]如此,在命令式图形查询所解析的执行计划的操作不能被关系数据库现有的函数直接支持的情况下,可以采用关系数据库同样支持的用户自定义函数UDF和/或存储过程SP来翻译该执行计划的操作,这样,使得图形数据库所支持的几乎所有命令式图形查询都可以完整地翻译为关系数据库所支持的查询语句,同时也减少了翻译后的查询语句(包括例如CTE、UDF和/或SP语句)的数量,使得查询的运行速度更快。
[0051]在一个实施例中,该系统400还可以包括:将翻译后的用户自定义函数查询中的特定查询进一步翻译为公共表表达式查询的装置。有些用户自定义函数查询可以被进一步翻译为公共表表达式查询,如此,可以进一步加快查询的运行速度。
[0052]在一个实施例中,该系统400还可以包括:将翻译后的公共表表达式查询进一步翻译为存储过程查询的装置。在一个实施例中,该系统400还可以包括:将翻译后的用户自定义函数查询中的特定查询进一步翻译为存储过程查询的装置。如此,有些用户自定义函数查询或公共表表达式查询可以被进一步翻译为存储过程查询,如此,可以进一步加快查询的运行速度。
[0053]在一个实施例中,该系统400还可以包括:响应于在所述翻译后的公共表表达式查询中存在重复的公共表表达式查询,合并所述重复的公共表表达式查询的装置。
[0054]在该实施例中,可以通过合并重复的公共表表达式CTE查询来使得翻译后的查询语句的数量更少,使得查询的运行速度进一步加快。
[0055]在一个实施例中,该系统400还可以包括:基于所述关系数据库,根据翻译后的查询,建立查询树的装置;根据查询树的每个节点的估计代价,来重构所述查询树以使得整体的估计代价减少的装置。
[0056]其中,所述查询树是左深连接树,该左深连接树中的每个具有两个子节点的连接父节点表示两个关系数据集的连接操作,每个只有一个子节点的非连接父节点和该子节点表示一个关系数据集的选择或投影操作,该左深连接树的各节点根据后序遍历顺序标号,最左侧的子节点具有最小标号。该查询树的建立是本领域公知的技术,利用左深连接树来构造查询树可以比较直观地反映查询的过程。
[0057]在一个实施例中,该重构查询树的装置可以被配置为改写查询树的连接的顺序,使得整体的估计代价最小。具体地,在另一实施例中,该重构查询树的装置可以被配置为从具有最小标号的连接父节点开始,依次根据标号顺序处理每个连接父节点,其中,对一个连接父节点的处理包括:估计与该连接父节点连接的两个子树的代价,及连接这两个子树得到该连接父节点的代价;通过如下来判断左右子树是否可交换:估计交换左右子树后的连接父节点的代价;若交换左右子树后的代价更小,则交换其左右子树,以改写该连接父节点的连接顺序。
[0058]在该实施例中,可以通过对翻译后的CTE、UDF和/或SP查询语句所构造的查询树进行优化,来进一步优化翻译后的CTE、UDF和/或SP查询语句,以使得执行所有的查询时所需要查询的总体代价最少(或至少减少),这样可以尽可能降低在关系数据库上进行这些查询所花费的时间等成本。
[0059]在上述例子中,通常,所述每个节点的估计代价可以是基于关系数据库的统计而得到的每个数据集的数目。当然,该估计代价
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1