一种数据查询方法和装置、计算机可读存储介质与流程

文档序号:16068958发布日期:2018-11-24 12:57阅读:204来源:国知局

本发明涉及大数据技术领域,尤其涉及一种数据查询方法和装置、计算机可读存储介质。

背景技术

知识图谱即用来描述真实世界中存在的各种实体或概念,以及它们之间的关联关系。其中:每个实体或概念用一个全局唯一确定的id来标识,称为标识符;每个属性-值对用来刻画实体的内在特性,而关系用来连接两个实体,刻画它们之间的关联。

但是,随着各领域数据信息的不断丰富,只定义实体、属性和关系已经无法满足具体行业描述事物的需求。比如,某些行业有比较丰富的人员时间序列数据或者轨迹数据,这些数据既不能定义成实体,也不代表实体之间的关系,更不是实体/关系的属性。因此衍生出了一种如图1所示的多维度知识图谱表示形式,其中,a点、b点和c点表示图谱中的实体、a、b两点之间的边和a、c两点之间的边表示图谱中的关系。在多维度知识图谱中,无论是实体、还是实体之间的关系、实体的时空轨迹,都可以有多种不同的类型,比如实体的类型可以是“人”、“车”等,实体之间的关系可以是“人-车拥有关系”、“亲属关系”等,轨迹可以是“火车出行轨迹”、“旅馆住宿轨迹”。多维图谱的几个“维度”包含了不同的信息量,各维度定义如下:

维度一:实体的属性;

维度二:实体之间的关联;

维度三:实体的时(比如时间点)空(形式比如经纬度坐标)轨迹。

针对这样的多维图谱数据,当需要执行一个复杂的查询过程时(例如,查找“与张三有通话关系的且在2017年5月出现在北京的男性”,其中同时指定了三个维度的信息,而且该查询为没有明确的出发点的图谱查询),传统的有明确出发点的简单图遍历查询已经无法满足这样的复杂查询需求。



技术实现要素:

为了解决上述技术问题,本发明提供了一种数据查询方法和装置、计算机可读存储介质,能够提高计算效率。

为了解决上述技术问题,本发明实施例的技术方案是这样实现的:

本发明实施例提供了一种数据查询方法,包括:

接收查询条件,所述查询条件包括以下至少之一的查询操作:实体属性查询、关系扩展查询、时空轨迹查询及逻辑合并操作;

检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作,如果包括关系扩展查询和/或逻辑合并操作,以关系扩展查询和/或逻辑合并操作为边界,对所述查询条件进行执行区间划分,在划分的每个执行区间内,进行同类查询操作的合并以及基于代价估计的查询操作顺序调整;

根据各个查询操作之间的依赖关系建立任务队列,使用建立的任务队列执行查询过程,存储和/或显示相应的查询结果。

进一步地,如果所述查询条件中不包括所述关系扩展查询和所述逻辑合并操作,所述方法还包括:

对所述查询条件进行同类查询操作的合并以及基于代价估计的查询操作顺序调整。

进一步地,在检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作之前,所述方法还包括:

检测所述查询条件是否为环形结构或者是否存在冲突;

如果所述查询条件为环形结构或者存在冲突,提示所述查询条件存在错误。

进一步地,在检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作之前,所述方法还包括:

检测所述查询条件中是否包括除所述查询条件之外的查询结果的集合;

如果包括除所述查询条件之外的查询结果的集合,检测除所述查询条件之外的查询结果的集合是否已存储于预设的存储位置;

如果没有存储于预设的存储位置,则将除所述查询条件之外的查询结果的集合展开。

进一步地,所述基于代价估计的查询操作顺序调整,包括:

估计所述每个执行区间内的实体属性查询的查询代价tentity和时空轨迹查询的查询代价tevent;

如果tentity>g*tevent,则先执行时空轨迹查询再执行实体属性查询;

如果tevent>g*tentity,则先执行实体属性查询再执行时空轨迹查询;

如果(|tevent–tentity|/(tevent+tentity))<l,则并行执行实体属性查询和时空轨迹查询,并对并行执行的结果求交集;

其中,*为乘号,g、l为预先配置的第一比例系数和第二比例系数。

进一步地,所述每个执行区间内的实体属性查询的查询代价tentity和时空轨迹查询的查询代价tevent分别为:

所述实体属性查询的查询代价tentity=实体属性查询条件命中数*平均每条记录的查询时间估计值;

所述时空轨迹查询的查询代价tevent=时空轨迹查询条件命中数*平均每条记录的查询时间估计值;

其中,所述实体属性查询条件命中数及所述时空轨迹查询条件命中数分别通过搜索引擎的倒排索引统计得到,平均每条记录的查询时间估计值通过预先性能评估得到。

进一步地,所述逻辑合并操作包括以下至少之一:逻辑与、逻辑或、逻辑非。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上所述的数据查询方法的步骤。

本发明实施例还提供了一种数据查询装置,包括处理器及存储器,其中:

所述处理器用于执行存储器中存储的数据查询程序,以实现如以上所述的数据查询方法的步骤。

本发明实施例还提供了一种数据查询装置,包括查询输入模块、查询转换模块、查询执行模块和结果读写模块,其中:

查询输入模块,用于接收查询条件,所述查询条件包括以下至少之一的查询操作:实体属性查询、关系扩展查询、时空轨迹查询及逻辑合并操作;

查询转换模块,用于检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作,如果包括关系扩展查询和/或逻辑合并操作,以关系扩展查询和/或逻辑合并操作为边界,对所述查询条件进行执行区间划分,在划分的每个执行区间内,进行同类查询操作的合并以及基于代价估计的查询操作顺序调整;

查询执行模块,用于根据各个查询操作之间的依赖关系建立任务队列,使用建立的任务队列执行查询过程;

结果读写模块,用于存储和/或显示相应的查询结果。

本发明的技术方案,具有如下有益效果:

本发明提供的数据查询方法和装置、计算机可读存储介质,通过在每个执行区间内进行同类查询操作的合并以及基于代价估计的查询操作顺序调整,能够使用户快速、高效地查询到多维图谱中的数据,满足了用户针对多维图谱数据的复杂查询需求。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为相关技术中的一种多维图谱数据结构示意图;

图2为本发明实施例的一种数据查询方法的流程示意图;

图3为本发明实施例的一种用户输入的查询操作组成的有向无环图示意图;

图4为本发明实施例的一种有向无环图中用户查询操作传输的数据示意图;

图5为本发明实施例的一种有向无环图中数据节点对应另一个查询条件的结果集的示意图;

图6为将图5中的结果集展开之后的有向无环图结构示意图;

图7(a)为本发明实施例的一种包含可合并同类查询操作的有向无环图结构示意图;

图7(b)为将图7(a)中的可合并同类查询操作进行合并之后的有向无环图结构示意图;

图8(a)为本发明实施例的一种包含合法的串行的关系查询的有向无环图结构示意图;

图8(b)为将图8(a)中的串行的关系查询操作错误地合并在一起的有向无环图结构示意图;

图9为本发明实施例的一种包含三个并行任务队列的有向无环图结构示意图;

图10为本发明实施例的一种数据查询装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

参考图2,根据本发明实施例的一种数据查询方法,包括如下步骤:

步骤201:接收查询条件,所述查询条件包括以下至少之一的查询操作:实体属性查询、关系扩展查询、时空轨迹查询及逻辑合并操作;

本实施例中,所述逻辑合并操作包括以下至少之一:逻辑与、逻辑或、逻辑非。

需要说明的是,本发明的数据查询方法为用户提供了一个定义复杂查询过程的交互界面,如图3所示,在该交互界面上用户可以拖拽不同维度的查询操作,为每一种查询操作指定具体的查询条件,并通过单向箭头把多个查询操作串联起来,形成一个有向无环图(directedacyclicgraph,dag),一个有向无环图对应一次针对多维图谱数据的查询过程。组成dag的查询操作类型包括:实体属性查询、关系扩展查询、时空轨迹查询、逻辑合并操作。此外,交互界面上除了可以拖拽查询操作之外,还可以拖拽出一个“数据节点”作为以上几种查询操作的输入数据,所述“数据节点”可以指定为存在于图谱中的一组实体的唯一标识(identifier)或者其他dag计算得到的结果。

用户在交互界面上通过拖拽多种类型的查询操作组成dag形式的复杂查询条件。为了满足dag的特性,在用户操作过程中,交互界面会检查拖拽到界面上的查询操作之间是否形成了“环”,如果形成了“环”会显示错误并禁止用户进行下一步操作。

实体属性查询的可设置条件包括:属性值/范围条件、模糊关键词条件,如表1所示:

表1

关系扩展查询的可设置条件包括:关系类型条件、时间范围条件、关系属性模糊关键词条件,如表2所示:

表2

时空轨迹查询的可设置条件包括:轨迹事件类型条件、具体某种轨迹的时间条件和代表空间的属性条件,如表3所示:

表3

逻辑合并操作的可设置条件包括:交集、并集和差集;

“数据节点”的设置方式包括:填写实体唯一标识或上传包含唯一标识的excel文件或其他dag计算得到的已命名结果集。

以上几种图谱查询操作的约束说明如下:

实体属性查询:实体属性查询操作相当于对实体本身的过滤操作。如果没有启用“外部倒排索引”相关配置,则实体属性查询必须有“数据节点”作为输入或者接在其他查询操作的后面,而不能作为第一个查询操作(即在没有外部索引的情况下不支持“模糊查询”,否则需要遍历图谱的所有指定类型的实体数据)。指定的多个属性条件之间是“且”的逻辑。

关系扩展查询:一次关系扩展查询是在图谱中针对指定的输入实体数据查找与其相关联的其它实体,正因为如此,关系扩展查询必须是作为“数据节点”或其他查询操作的后续节点,不能在没有输入的情况下独立使用。经过一度关系扩展操作之后,取决于关系扩展时指定的关系类型条件,其得到的结果可能是与输入的实体数据类型相同(比如“人”经过“配偶关系”扩展后结果还是“人”),也可能与输入的实体数据类型不同(比如“人”经过“人车关系”扩展后结果是“车”实体)。“关系类型”条件如果指定了多个,多种类型之间是“且”的逻辑,即查询结果是这多种关系类型扩展的结果的交集。由于关系扩展查询的特殊性,若指定了多种“关系类型”,则交互界面会检查这多种“关系类型”对应的扩展结果的实体类型是否都属于同一种类型,如果不是则会提示错误并禁止进行下一步操作。

时空轨迹查询:一次时空轨迹查询相当于是利用实体的丰富轨迹特征信息对实体进行过滤筛选操作。与实体属性查询类型相似,如果没有配置相关的外部倒排索引信息时,时空轨迹查询也必须有“数据节点”输入或接在其他查询操作后面(即不支持“模糊查询”);在配置了外部倒排索引信息的情况下可以对时空轨迹特征条件进行模糊的查询,查询结果为符合指定轨迹条件的。指定的多种不同类型的轨迹条件之间也是“且”的逻辑。

逻辑合并操作:用于实现多个结果and(“逻辑与”,对应交集)、or(“逻辑或”,对应并集)、not(“逻辑非”,对应差集)的逻辑操作,因此其必须有“数据节点”或其他查询操作的结果集作为输入,且输入节点必须大于或等于2个。

通过restapi接口接收用户在交互界面中定义好的dag查询图信息,将交互界面传来的dag查询图信息转换为内部的数据结构,从结构上还原出交互界面上定义的dag。示例性的,如图4所示的dag查询图信息转换成的dag数据表示格式如下所示,该例子表示的是一个时空轨迹查询后面连接一个实体属性查询(操作之间的连接关系通过seq和inputseq参数表示)。

本实施例中,在所述接收查询条件之后,所述方法还包括:

检测所述查询条件是否为环形结构或者是否存在冲突;

如果所述查询条件为环形结构或者存在冲突,提示所述查询条件存在错误。

本实施例中,在所述接收查询条件之后,所述方法还包括:对每个查询操作进行条件归一化和条件合并。

具体地,对实体属性查询操作中的条件进行条件归一化,条件归一化是指将输入的不同形式的条件按照其类型统一转换为in和notin这两种形式之一,把“某属性”=“某值”这样的条件,统一转换为“某属性”in[“某值”],把”某属性”!=“某值”这样的条件,统一转换为”某属性”notin[“某值”]这样的条件形式;条件的归一化是为了后面的条件合并做准备。

若当前实体属性查询操作中为”某属性”指定了多种不同的条件(比如指定了”=”,“!=”,“in”,“notin”里面的多种),则会对这多个条件的右操作数的取值范围进行冲突检测及条件合并,比如对于”姓名”in[“熊大”]和”姓名”in[“熊二”]这两个条件,就说明出现了冲突,查询操作即使真的执行了返回结果也是空,因此可以提前做出判断,将当前查询操作及其后面的直接查询操作均标记为“空”结果集;对于”年龄”in[20,40]和”年龄”in[30,50]这两个条件,会合并成一个条件”年龄”in[30,40]。

对时空轨迹查询操作中的条件也会进行与实体属性查询操作一样的条件归一化和冲突检测/条件合并。

本实施例中,在所述接收查询条件之后,所述方法还包括:

检测所述查询条件中是否包括除所述查询条件之外的查询结果的集合;

如果包括除所述查询条件之外的查询结果的集合,检测除所述查询条件之外的查询结果的集合是否已存储于预设的存储位置;

如果没有存储于预设的存储位置,则将除所述查询条件之外的查询结果的集合展开。

具体地,遍历dag中的“数据节点”,如图5所示,如果“数据节点”对应的是另一个dag的结果集(即除所述查询条件之外的查询结果的集合),要判断该结果集的有效性,即该结果集是否已存在(根据配置的结果集存储位置是硬盘还是内存数据库,去相应的存储体中查询确认),如果出现结果集已经无效的情况,则涉及dag“展开”转换。如图6所示,所述“展开”是指将已失效的结果集对应的dag纳入作为当前dag计算内容的一部分。

步骤202:检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作;

步骤203:如果所述查询条件中包括关系扩展查询和/或逻辑合并操作,以关系扩展查询和/或逻辑合并操作为边界,对所述查询条件进行执行区间划分,在划分的每个执行区间内,进行同类查询操作的合并以及基于代价估计的查询操作顺序调整;

步骤204:如果所述查询条件中不包括所述关系扩展查询和所述逻辑合并操作,对所述查询条件进行同类查询操作的合并以及基于代价估计的查询操作顺序调整;

如图7(a)所示,以“关系扩展”及“逻辑合并操作”作为边界划分成多个执行区间,这是因为这些操作的特殊性,它的执行顺序和位置是不能改变的。从正确性上考虑是不能把串行的多个关系扩展查询合并在一起(“合并”在一起是不正确的,相当于把2度图遍历错改成1度图遍历了)。

如图8(a)所示,在合法的串行的关系查询过程中,第二个关系查询的输入是第一个关系查询的输出,第一个关系查询的输出是“实体-车”而不是“实体-人”。如图8(b)所示,如果把两个关系查询错误地合并在一起,那么第二个关系查询的输入不再是“实体-车”而是“实体-人”,造成逻辑上的不一致。

本实施例中,尝试对dag中串行的查询操作进行优化,优化的方式包括同类查询操作的合并和基于代价估计的查询顺序调整。

如图7(b)所示,同类查询操作合并的方法是,对于每个执行区间里的查询操作,可以分别合并“实体属性查询”操作和“时空轨迹查询”操作,从而简化dag的结构,减少实际执行的物理查询操作次数。合并过程的具体操作与前文所述的条件合并操作一致。

本实施例中,基于代价估计的查询顺序调整的方法是,同样是在上面划分的执行区间内部优化执行效率(前面合并优化后一个区间内最多只会有一个实体特征和事件特征查询),由于关系扩展操作的位置不可变特性,执行效率的优化依然是针对时空轨迹查询和实体属性查询。基于代价估计的查询优化依赖于对外部索引的启用配置。每个执行区间内的实体属性查询的查询代价tentity计算方式为:

tentity=(实体属性查询条件命中数)*(平均每条记录的查询时间估计值)

每个执行区间内的时空轨迹查询的查询代价tevent计算方式为:

tevent=(时空轨迹查询条件命中数)*(平均每条记录的查询时间估计值),其中,*为乘号。

其中查询条件命中数是将查询条件输入通过搜索引擎的倒排索引的快速统计操作获取,平均每条记录的查询时间估计值由具体系统部署环境下的预先性能测试结果计算得到。顺序调整的逻辑如下:

如果tentity>g*tevent,即实体属性查询时间远远大于事件查询时间,则先执行时空轨迹查询再执行实体属性查询;

如果tevent>g*tentity,则先执行实体属性查询再执行时空轨迹查询;

如果(|tevent–tentity|/(tevent+tentity))<l,即意味着两者执行时间差异较小,则并行执行实体属性查询和时空轨迹查询,并对并行执行的结果求交集。

其中,g、l为预先配置的第一比例系数和第二比例系数。

步骤205:根据各个查询操作之间的依赖关系建立任务队列,使用建立的任务队列执行查询过程,存储和/或显示相应的查询结果。

本实施例中,对dag划分执行阶段,执行阶段划分的方法是根据dag中查询的依赖关系判断哪些操作可以并行执行。如图9所示,逻辑合并操作的三个输入(3,6,8)分别来源于三个子dag,则这三个子dag会以并行的方式执行,这三个子dag与逻辑合并之间是串行的关系,而三个子dag内部又分别是另一个串行操作。执行时会以异步任务队列的方式提交查询操作,首先把作为最终结果结果的逻辑合并操作放入队列待运行,然后分析发现它有三个输入,则把三个输入分别放入三个并行的任务队列中,这三个任务队列中的查询操作再继续分析它们的前向依赖操作,如此类推最终把最开始的数据节点查询放入队列。开始执行后,每一个队列中完成的查询操作,会查询它的后向节点(比如实体特征1的后向节点是逻辑合并),看该后向节点的所有前向依赖是否都已经完成,如果已完成则触发其后向依赖的执行。

图9中每个数字标号是每个计算节点的标识(不代表执行顺序),实际执行的顺序是:(1,2,3)、(7,8)和(4,5,6)三组查询之间是并行执行,(1,2,3)这一组查询内部的执行顺序是1->2->3;(7,8)这一组查询内部的执行顺序是7->8;(4,5,6)这一组查询内部的执行顺序是4->5->6,等上面三组查询执行完之后,9最终被执行。

执行查询的过程中具体的查询操作会访问底层存储组件获取数据结果,实体特征会访问图数据库(如果配置了外部索引还会访问外部索引,以加速查询);轨迹特征会访问时序数据库(如果配置了外部索引还会访问外部索引,以加速查询);关系扩展会访问图数据库;逻辑合并操作,如果配置了使用内存数据库,会利用内存数据库的高性能集合操作实现快速合并计算。

完成当前dag队列中的查询操作后,把结果集数据和对应的dag结构信息存储在硬盘或内存数据库,当交互界面请求查看结果集时则将数据及对应的dag结构信息返回给界面显示。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上任一项所述的数据查询方法的步骤。

本发明实施例还提供了一种数据查询装置,包括处理器及存储器,其中:

所述处理器用于执行存储器中存储的数据查询程序,以实现如以上任一项所述的数据查询方法的步骤。

如图10所示,本发明实施例还提供了一种数据查询装置,包括查询输入模块1001、查询转换模块1002、查询执行模块1003和结果读写模块1004,其中:

查询输入模块1001,用于接收查询条件,所述查询条件包括以下至少之一的查询操作:实体属性查询、关系扩展查询、时空轨迹查询及逻辑合并操作;

查询转换模块1002,用于检测所述查询条件中是否包括关系扩展查询和/或逻辑合并操作,如果包括关系扩展查询和/或逻辑合并操作,以关系扩展查询和/或逻辑合并操作为边界,对所述查询条件进行执行区间划分;在划分的每个执行区间内,进行同类查询操作的合并以及基于代价估计的查询操作顺序调整;

查询执行模块1003,用于根据各个查询操作之间的依赖关系建立任务队列,使用建立的任务队列执行查询过程;

结果读写模块1004,用于存储和/或显示相应的查询结果。

本实施例中,所述逻辑合并操作包括以下至少之一:逻辑与、逻辑或、逻辑非。

需要说明的是,本发明的数据查询装置为用户提供了一个定义复杂查询条件的交互界面(所述交互界面即查询输入模块1001),如图3所示,在该交互界面上用户可以拖拽不同维度的查询操作,为每一种查询操作指定具体的查询条件,并通过单向箭头把多个查询操作串联起来,形成一个有向无环图dag,一个dag对应一次针对多维图谱数据的查询过程。组成dag的查询操作类型包括:实体属性查询、关系扩展查询、时空轨迹查询、逻辑合并操作。此外,交互界面上除了可以拖拽查询操作之外,还可以拖拽出一个“数据节点”作为以上几种查询操作的输入数据,所述“数据节点”可以指定为存在于图谱中的一组实体的唯一标识(identifier)或者其他dag计算得到的结果。

查询转换模块1002,负责查询过程操作的转换,该模块接受交互界面传来的复杂查询结构条件,转换为内部的树形结构的查询过程条件,分析各个查询节点之间的执行顺序依赖,尝试合并一个分支上的同类查询子操作;对于无顺序依赖的查询子操作按照并行的方式执行;对于多个维度的查询条件,会通过估算的方式分别计算不同的执行顺序的计算代价,选择最优的执行顺序,从而实现执行效率的最优化。

查询执行模块1003,负责按照上一步查询转换模块1002输出的查询操作之间的先后依赖关系执行具体的查询操作,得到dag的查询结果。查询执行模块1003对接底层的存储组件(图数据库存储实体、关系数据,时序数据库存储轨迹数据)。对于交互界面提交过来的查询,查询执行模块1003采取异步任务队列的方式执行,正在执行的查询操作在内部标记状态为running“运行中”,而在队列中等待被执行的查询操作内部标记为waiting等待中,已执行结束的操作根据状态分别标记为“成功”和“失败”,交互界面通过restapi查询当前dag的执行状态时,查询执行模块1003会返回dag中每个操作的状态由交互界面进行相应展示。

结果读写模块1004,查询执行模块1003得到的计算结果会形成结果集(resultset)存储在结果读写模块1004中。结果读写模块1004提供接口供交互界面查询和展示结果集的数据(以及结果集对应的dag条件信息)。图谱查询操作的结果是图谱中的(一种类型的)实体数据,并且一个dag只会有一个输出结果。一个dag的结果集可进一步作为另外的dag的输入数据,也就是可以逻辑上可以把多个dag拼接在一起形成一个更复杂的dag。每个结果集都有一个唯一的id标识。

本实施例中,所述数据查询装置还包括查询配置模块,负责配置查询转换模块和查询执行模块需要的配置信息。所述配置信息包括并行执行的线程数、是否使用外部倒排索引组件、外部索引名称与图谱数据类型的映射关系、是否使用内存数据库加速查询、结果集是保存在硬盘还是内存数据库等。

用户在交互界面上通过拖拽多种类型的查询操作组成dag形式的复杂查询过程。为了满足dag的特性,在用户操作过程中,交互界面会检查拖拽到界面上的操作之间是否形成了“环”,如果形成了“环”会显示错误并禁止用户进行下一步操作。

实体属性查询的可设置条件包括:属性值/范围条件、模糊关键词条件,如表1所示:

表1

关系扩展查询的可设置条件包括:关系类型条件、时间范围条件、关系属性模糊关键词条件,如表2所示:

表2

时空轨迹查询的可设置条件包括:轨迹事件类型条件、具体某种轨迹的时间条件和代表空间的属性条件,如表3所示:

表3

逻辑合并操作的可设置条件包括:交集、并集和差集;

“数据节点”的设置方式包括:填写实体唯一标识或上传包含唯一标识的excel文件或其他dag计算得到的已命名结果集。

以上几种图谱查询操作的约束说明如下:

实体属性查询:实体属性查询操作相当于对实体本身的过滤操作。如果没有启用“外部倒排索引”相关配置,则实体属性查询必须有“数据节点”作为输入或者接在其他查询操作的后面,而不能作为第一个查询操作(即在没有外部索引的情况下不支持“模糊查询”,否则需要遍历图谱的所有指定类型的实体数据)。指定的多个属性条件之间是“且”的逻辑。

关系扩展查询:一次关系扩展查询是在图谱中针对指定的输入实体数据查找与其相关联的其它实体,正因为如此,关系扩展查询必须是作为“数据节点”或其他查询操作的后续节点,不能在没有输入的情况下独立使用。经过一度关系扩展操作之后,取决于关系扩展时指定的关系类型条件,其得到的结果可能是与输入的实体数据类型相同(比如“人”经过“配偶关系”扩展后结果还是“人”),也可能与输入的实体数据类型不同(比如“人”经过“人车关系”扩展后结果是“车”实体)。“关系类型”条件如果指定了多个,多种类型之间是“且”的逻辑,即查询结果是这多种关系类型扩展的结果的交集。由于关系扩展查询的特殊性,若指定了多种“关系类型”,则交互界面会检查这多种“关系类型”对应的扩展结果的实体类型是否都属于同一种类型,如果不是则会提示错误并禁止进行下一步操作。

时空轨迹查询:一次时空轨迹查询相当于是利用实体的丰富轨迹特征信息对实体进行过滤筛选操作。与实体属性查询类型相似,如果没有配置相关的外部倒排索引信息时,时空轨迹查询也必须有“数据节点”输入或接在其他查询操作后面(即不支持“模糊查询”);在配置了外部倒排索引信息的情况下可以对时空轨迹特征条件进行模糊的查询,查询结果为符合指定轨迹条件的。指定的多种不同类型的轨迹条件之间也是“且”的逻辑。

逻辑合并操作:用于实现多个结果and(“且”,对应交集)、or(“或”,对应并集)、not(对应差集)的逻辑操作,因此其必须有“数据节点”或其他查询操作的结果集作为输入,且输入节点必须大于或等于2个。

交互界面把用户定义好的dag查询图的信息通过restapi接口传输给查询转换模块1002,示例性的,如图4所示的dag查询图传输的dag数据表示格式如下所示,该例子表示的是一个时空轨迹查询后面连接一个实体属性查询(操作之间的连接关系通过seq和inputseq参数表示)。

查询转换模块1002首先将交互界面传来的dag内容转换为其内部的数据结构,从结构上还原出交互界面上定义的dag。

本实施例中,在所述接收查询条件之后,所述查询转换模块1002还用于:

检测所述查询条件是否为环形结构或者是否存在冲突;

如果所述查询条件为环形结构或者存在冲突,提示所述查询条件存在错误。

本实施例中,所述查询转换模块1002针对dag中的每一个查询操作进行条件归一化和冲突检测/条件合并处理,条件归一化是指将输入的不同形式的条件按照其类型统一转换为in和notin这两种形式之一,把“某属性”=“某值”这样的条件,统一转换为“某属性”in[“某值”],把”某属性”!=“某值”这样的条件,统一转换为”某属性”notin[“某值”]这样的条件形式;条件的归一化是为了后面的条件合并做准备。若当前实体属性查询操作中为”某属性”指定了多种不同的条件(比如指定了”=”,“!=”,“in”,“notin”里面的多种),则会对这多个条件的右操作数的取值范围进行冲突检测及条件合并,比如对于”姓名”in[“熊大”]和”姓名”in[“熊二”]这两个条件,就说明出现了冲突,查询操作即使真的执行了返回结果也是空,因此可以提前做出判断,将当前查询操作及其后面的直接查询操作均标记为“空”结果集;对于”年龄”in[20,40]和”年龄”in[30,50]这两个条件,会合并成一个条件”年龄”in[30,40]。

所述查询转换模块1002对时空轨迹查询操作中的条件也会进行与实体属性查询操作一样的条件归一化和冲突检测/条件合并。

本实施例中,在所述接收查询条件之后,所述查询转换模块1002还用于:

检测所述查询条件中是否包括除所述查询条件之外的查询结果的集合;

如果包括除所述查询条件之外的查询结果的集合,检测除所述查询条件之外的查询结果的集合是否已存储于预设的存储位置;

如果没有存储于预设的存储位置,则将除所述查询条件之外的查询结果的集合展开。

所述查询转换模块1002继续处理dag,遍历dag中的“数据节点”,如图5所示,如果“数据节点”对应的是另一个dag的结果集(即除所述查询条件之外的查询结果的集合),要判断该结果集的有效性,即该结果集是否已存在(根据配置的结果集存储位置是硬盘还是内存数据库,去相应的存储体中查询确认),如果出现结果集已经无效的情况,则涉及dag“展开”转换。如图6所示,所述“展开”是指将已失效的结果集对应的dag纳入作为当前dag计算内容的一部分。

如图7(a)所示,所述查询转换模块1002以“关系扩展”及“逻辑合并操作”作为边界将查询条件划分成多个执行区间,这是因为“关系扩展”及“逻辑合并操作”的特殊性,它们的执行顺序和位置是不能改变的,例如,从正确性上考虑是不能把串行的多个关系扩展查询合并在一起(“合并”在一起是不正确的,相当于把2度图遍历错改成1度图遍历了)。如图8(a)所示,在合法的串行的关系查询过程中,第二个关系查询的输入是第一个关系查询的输出,第一个关系查询的输出是“实体-车”而不是“实体-人”。如图8(b)所示,如果把两个关系查询错误地合并在一起,那么第二个关系查询的输入不再是“实体-车”而是“实体-人”,造成逻辑上的不一致。

所述查询转换模块1002会尝试对dag中串行的查询操作进行优化。优化的方式包括同类查询操作的合并和基于代价估计的查询顺序调整。

本实施例中,如果所述查询条件中不包括所述关系扩展查询和所述逻辑合并操作,所述查询转换模块1002还用于:

对所述查询条件进行同类查询操作的合并以及基于代价估计的查询操作顺序调整。

如图7(b)所示,同类查询操作合并的方法是,对于每个执行区间里的查询操作,可以分别合并“实体属性查询”操作和“时空轨迹查询”操作,从而简化dag的结构,减少实际执行的物理查询操作次数。

本实施例中,基于代价估计的查询顺序调整的方法是,同样是在上面划分的执行区间内部优化执行效率(前面合并优化后一个区间内最多只会有一个实体特征和事件特征查询),由于关系扩展操作的位置不可变特性,执行效率的优化依然是针对时空轨迹查询和实体属性查询。基于代价估计的查询优化依赖于对外部索引的启用配置。每个执行区间内的实体属性查询的查询代价tentity计算方式为

tentity=(实体属性查询条件命中数)*(平均每条记录的查询时间估计值)

每个执行区间内的时空轨迹查询的查询代价tevent计算方式为

tevent=(时空轨迹查询条件命中数)*(平均每条记录的查询时间估计值)。

其中查询条件命中数是将查询条件输入通过搜索引擎的倒排索引的快速统计操作获取,平均每条记录的查询时间估计值由具体系统部署环境下的预先性能测试结果计算得到。顺序调整的逻辑如下:

如果tentity>g*tevent,即实体属性查询时间远远大于事件查询时间,则先执行时空轨迹查询再执行实体属性查询;

如果tevent>g*tentity,则先执行实体属性查询再执行时空轨迹查询;

如果(|tevent–tentity|/(tevent+tentity))<l,即意味着两者执行时间差异较小,则并行执行实体属性查询和时空轨迹查询,并对并行执行的结果求交集。

其中,g、l为预先配置的第一比例系数和第二比例系数。

本实施例中,所述每个执行区间内的实体属性查询的查询代价tentity和时空轨迹查询的查询代价tevent分别为:

所述实体属性查询的查询代价tentity=实体属性查询条件命中数*平均每条记录的查询时间估计值;

所述时空轨迹查询的查询代价tevent=时空轨迹查询条件命中数*平均每条记录的查询时间估计值;

所述实体属性查询条件命中数及所述时空轨迹查询条件命中数分别通过搜索引擎的倒排索引统计得到,平均每条记录的查询时间估计值通过预先性能评估得到。

所述查询执行模块1003对dag划分执行阶段,执行阶段划分的方法是根据dag中查询的依赖关系判断哪些操作可以并行执行。如图9所示,逻辑合并操作的三个输入(3,6,8)分别来源于三个子dag,则这三个子dag会以并行的方式执行,这三个子dag与逻辑合并之间是串行的关系,而三个子dag内部又分别是另一个串行操作。执行时会以异步任务队列的方式提交查询操作,首先把作为最终结果结果的逻辑合并操作放入队列待运行,然后分析发现它有三个输入,则把三个输入分别放入三个并行的任务队列中,这三个任务队列中的查询操作再继续分析它们的前向依赖操作,如此类推最终把最开始的数据节点查询放入队列。开始执行后,每一个队列中完成的查询操作,会查询它的后向节点(比如实体特征1的后向节点是逻辑合并),看该后向节点的所有前向依赖是否都已经完成,如果已完成则触发其后向依赖的执行。

图9中每个数字标号是每个计算节点的标识(不代表执行顺序),实际执行的顺序是:(1,2,3)、(7,8)和(4,5,6)三组查询之间是并行执行,(1,2,3)这一组查询内部的执行顺序是1->2->3;(7,8)这一组查询内部的执行顺序是7->8;(4,5,6)这一组查询内部的执行顺序是4->5->6,等上面三组查询执行完之后,9最终被执行。

执行查询的过程中具体的查询操作会访问底层存储组件获取数据结果,实体特征会访问图数据库(如果配置了外部索引还会访问外部索引,以加速查询);轨迹特征会访问时序数据库(如果配置了外部索引还会访问外部索引,以加速查询);关系扩展会访问图数据库;逻辑合并操作,如果配置了使用内存数据库,会利用内存数据库的高性能集合操作实现快速合并计算。

所述查询执行模块1003完成当前dag队列中的查询操作后,把结果集数据和对应的dag结构信息通过结果读写模块1004存储在硬盘或内存数据库,当交互界面请求查看结果集时则将数据及对应的dag结构信息返回给界面显示。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。

以上仅为本发明的优选实施例,当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1