CN114127705A - 用于解析图形数据库查询的方法、***和介质 - Google Patents
用于解析图形数据库查询的方法、***和介质 Download PDFInfo
- Publication number
- CN114127705A CN114127705A CN202080035842.4A CN202080035842A CN114127705A CN 114127705 A CN114127705 A CN 114127705A CN 202080035842 A CN202080035842 A CN 202080035842A CN 114127705 A CN114127705 A CN 114127705A
- Authority
- CN
- China
- Prior art keywords
- path
- matrix
- expression
- node
- query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9032—Query formulation
- G06F16/90324—Query formulation using system suggestions
- G06F16/90328—Query formulation using system suggestions using search space presentation or visualization, e.g. category or range presentation and selection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/904—Browsing; Visualisation therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供了用于解析数据库查询的方法、***和介质,包括:标识查询图形中与所述数据库查询相对应的连接分量;确定针对所述连接分量的最长路径长度;选择具有所述最长路径长度的路径;建立针对所述路径的代数表达式;使用矩阵‑矩阵乘法来求解所述代数表达式以提供解;以及基于所述解来响应所述查询。
Description
相关申请的交叉引用
本申请要求于2019年6月27日提交的美国专利申请No.16/454,993、2019年5月13日提交的美国临时专利申请No.62/847,211、以及2019年5月29日提交的美国临时专利申请62/854,316的权益,这些专利申请中的每一个通过引用整体并入本文。
技术领域
所公开的主题涉及用于解析图形数据库查询的方法、***和介质。
背景技术
图形是可以建模和指示不同对象或实体之间的关系的数学结构。例如,图形可以包括通过边(edge)而被彼此连接的不同节点。每个节点可以表示对象或实体,而每条边可以表示其连接的对象和/或实体之间的关系。边可以是无方向的(例如,不存在由边表示的方向关系),或者边可以是有向的(例如,存在与两个节点之间的连接相关联的方向),并且因此具有源节点和目的地节点。
图形可以存储在图形数据库中。属性图形数据库可以被优化以用于存储和检索无架构连接数据。数据点可以表示为图形内的节点。除了描述节点的可选属性集之外,节点可以与多个标记相关联。例如,类型“个人”的节点可以具有属性{“姓”、“名”和“年龄”}。
边可以与指定其类型的“关系-类型”相关联。例如,边可以具相关系类型“Visit”(“访问”),其指示由源节点标识的人访问了由目的地节点标识的国家。此外,边可以具有属性集。例如,具相关系类型“访问”的边可具有属性{“目的”、“长度”}。
边可以作为矩阵存储在图形数据库中。例如,有向边可以将节点i连接到节点j。在这种情况下,节点i是源节点而节点j是目的地节点。这种连接可以通过将位置[i,j]处的图形矩阵设置为1来注释。矩阵行可以用于表示源节点,而矩阵列表示目的地节点,反之亦然。
下面是表示具有三个节点(节点0、节点1和节点2)的图形的矩阵的示例:
在该示例中,节点0连接到节点2,节点1连接到节点2,并且节点2连接到节点1。该矩阵可以被称为邻接矩阵。即,它是二进制矩阵,表示图形中的所有连接,而不管连接类型如何。
一些图形矩阵可以是标记矩阵。标记矩阵可以是给定标记的对角二进制矩阵,其中标识了具有给定标记的节点。例如,在表示标记“L”的标记矩阵中,标记为“L”的节点i可以由位置[i,i]处的1表示。下面是标记矩阵的示例:
如图所示,该标记矩阵指示节点0和节点2具有标记“L”。
一些图形矩阵可以是关系矩阵。关系矩阵可以是给定关系类型的二进制矩阵,其中标识了具有给定关系类型的边。例如,在表示关系类型“R”的关系矩阵中,将节点i连接到节点j的关系类型“R”的边可以由位置[i,j]处的1表示。下面是关系矩阵的示例:
如图所示,该关系矩阵指示节点0经由关系类型R的边连接到节点1。
可以使用查询语言从图形数据库中检索关于图形的数据。例如,诸如OpenCypher的查询语言可以用于从图数据库中检索数据。更具体地,查询可以具有以下格式:
MATCH(a)-[:X]->(b)-[]->(c)<-[:Z]-(d)RETURN c
在这种格式中:“()”表示节点;而“[]”表示边。
节点和边都可以被分配有别名和标记。节点可以具有以下格式:(别名:标记)。边可以具有以下格式:[别名:标记]。路径可以通过用边链接节点来形成。例如,节点A被使用类型R的边而连接到节点B可以被表示为:(A)-[:R]->(B)。
可以使用从左到右的箭头或从右到左的箭头来指定连接。当边方向无关紧要时,可以省略箭头。下面是示例:
(A)-[:R]->(B)-A连接到B。
(A)<-[:R]-(B)-B连接到A。
(A)-[:R]-(B)-A和B相连。
作为更具体的示例,如果人们想要为图形中的每个个人(person)找到他们的朋友访问(visit)了哪些国家(country),则可以使用诸如以下的查询:
MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)RETURN p,c
然而,这样的查询可能是时间敏感的和资源密集的。例如,这样的查询可能需要线性遍历图的许多不同的边,这可能使得返回对查询的响应是耗时的。
因此,期望提供用于解析图形数据库查询的新方法、***和介质。
发明内容
根据一些实施例,提供了用于解析数据库查询的方法、***和介质。在一些实施例中,提供了用于解析数据库查询的方法,所述方法包括:标识与所述数据库查询相对应的查询图形中的连接分量;确定针对所述连接分量的最长路径长度;选择具有所述最长路径长度的路径;建立针对所述路径的代数表达式;使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及基于所述解来响应所述查询。
在一些实施例中,提供了用于解析数据库查询的***,所述***包括:存储器;至少一个硬件处理器,其耦合到所述存储器并且共同地被配置为:标识与所述数据库查询相对应的查询图形中的连接分量;确定针对所述连接分量的最长路径长度;选择具有所述最长路径长度的路径;建立用于所述路径的代数表达式;使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及基于所述解来响应所述查询。
在一些实施例中,提供了包含计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由处理器执行时使所述处理器执行用于解析数据库查询的方法,所述方法包括:标识与所述数据库查询相对应的查询图形中的连接分量;确定针对所述连接分量的最长路径长度;选择具有所述最长路径长度的路径;建立针对所述路径的代数表达式;使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及基于所述解来响应所述查询。
附图说明
当结合附图考虑时,参考所公开的主题的以下详细描述,可以更充分地理解所公开的主题的各种目的、特征和优点,在附图中,相同的附图标记标识相同的元件。
图1示出根据所公开的主题的一些实施例的用于解析图形数据库查询的过程的示例。
图2示出根据所公开的主题的一些实施例的用于解析图形数据库查询的过程的另一示例。
图3示出根据所公开的主题的一些实施例的用于从查询图形生成代数表达式的过程的示例。
图4示出根据所公开的主题的一些实施例的用于针对图形的路径生成代数表达式的过程的示例。
图5示出根据所公开的主题的一些实施例的用于将代数表达式分解成子表达式的过程的示例。
图6是根据所公开的主题的一些实施例的图形的图示的示例。
图7示出根据所公开的主题的一些实施例的适于实现在此描述的用于解析图形数据库查询的机制的说明性***的示意图。
图8示出根据所公开的主题的一些实施例的可以在图7的服务器和/或用户设备中使用的硬件的详细示例。
具体实施方式
根据各种实施例,提供用于解析图形数据库查询的机制(其可以包括方法、***和介质)。
在一些实施例中,本文描述的机制可以用于快速标识和返回对应于与图形数据库相关的查询的结果。例如,在一些实施例中,本文描述的机制可以接收指示在特定图形内的、在任何合适数量的节点之间的遍历的查询,所述特定图形具有节点之间的任何合适数量的边。在一些实施例中,本文描述的机制可以将接收到的查询转换成一系列矩阵-矩阵乘法,其中每个矩阵标识两个节点之间的关系,诸如在两个节点之间是否存在对应于特定类型的关系的边。
例如,在图形指示不同的人是否已经访问了不同的国家的情况下,本文所述的机制可以用矩阵R来表示节点和边,其中矩阵R的行指示不同的人,矩阵R的列指示国家,并且矩阵R的每个元素(即,元素Ri,j)指示个人i是否已经访问了国家j。在一些实施例中,表示跨各个节点和边的多次遍历的查询然后可以通过矩阵-矩阵乘法(诸如M=R1*R2*…Rj)来表示,如下面结合图1更详细描述的。
在一些实施例中,本文描述的机制可以基于矩阵-矩阵乘法来标识与接收到的查询相对应的结果集合。
作为更具体的示例,如果人们想要为图形中的每个个人找到他们的朋友访问了哪些国家,则可以使用诸如以下的查询:
MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)RETURN p,c
在一些实施例中,为了回答该查询,可以构造并评估以下表达式:
P*F*P*V*C,
其中P是标记图形中所有Person(个人)节点的标记矩阵,F是描述类型friend(朋友)的每条边的关系矩阵,V是描述类型visit(访问)的每条边的关系矩阵,C是标记图形中所有Country(国家)节点的标记矩阵。
在一些实施例中,数据库中的所有矩阵可以被要求具有相同的尺寸(例如,N乘N的方阵)。
在一些实施例中,每个矩阵行和每个矩阵列可以具有相关联的“域”。矩阵行域可以指示矩阵行表示什么,并且矩阵列域可以指示矩阵列表示什么(例如,V的行表示人,而V的列表示国家)。
在一些实施例中,当执行乘法时,重要的是确保域有意义并且对齐:左手侧操作数的列域应当与右手侧操作数的行域匹配。例如,考虑以下等式:
C的行域与A的行域匹配,并且C的列域与B的列域匹配。
在一些实施例中,最左边的操作数行域是“粘性的”,且将不会针对每一中间乘法而改变。相反,它将一直延续到最终结果。另一方面,在一些实施例中,针对与右操作数的列域的每个中间乘法来设置列域。
尽管明智的是假设朋友关系将仅连接个人节点,但情况可能不是这样。因此,在上面的表达式“P*F*P*V*C”中,F从两侧乘以P(即,“P*F*P”)。将矩阵M的左边乘以对角矩阵D简单地过滤M的行,保持每一Row i(行i),其中D[i,i]为1,并清除每一Row j(行j),其中D[j,j]为0。当将M的列的右边M乘以对角矩阵时,相同过滤被应用于M的列。将F从两侧乘以P(即“P*F*P”)过滤P*F*P的结果以仅示出P中列出的人。因此,例如,如果P是P’((例如,城市内的所有人))中标识出的较大的人群的子集(例如,城市内的公司的员工),则P*F*P将仅示出具有是朋友的同事的人,而P*F*P’将示出这些员工的城市内的所有朋友。
因为矩阵-矩阵乘法是关联的,因此,可以将表达式“P*F*P*V*C”分割为“(P*F*P)*(V*C)”,如下:
查看RESULT矩阵中的顶行(0),可以看到,具有ID 0(行域)的个人有一些已经访问了具有ID 0、1和2的国家(列域)的朋友(矩阵不指示他们是谁)。该示例说明矩阵-矩阵乘法损失信息的事实。
在上述示例中,假设查询还请求数据库返回朋友列表,使得结果集合包括三元组:(Person、Friend、Country)。可以使用以下查询:
MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)
RETURN p,f,c
为了响应该查询,原始表达式可以被分成两个表达式并被绑定在一起:
P*F*P
V*C
为了将两个表达式系在一起,在一些实施例中可以构造中间对角矩阵。对角矩阵可以指示结果矩阵的列中的节点是否是可到达的。例如,对于直接在上面的查询,可以构造对角矩阵f。在该对角矩阵中,如果个人i在P*F*P中被指示为可到达的,则f[i,i]等于1。因此,例如考虑表示P*F*P的以下矩阵:
如果对应于个人的列在其中的任何地方具有1,则该个人在该矩阵中可以被指示为可到达的。即,f的对角线是P*F*P的对应列中的值的逻辑或,如下:
然后,f可以作为最左边的操作数被附加到第二表达式,用作过滤器,如下:
f*V*C
在评估该表达式时,可以确定f中标识的朋友访问了C中的哪些国家。
在一些实施例中,中间矩阵可以因为它们在最终结果集合(例如,RETURN子句)、在过滤准则(例如,WHERE子句)、在图形修改(例如,CREATE、SET、UPDATE子句)和/或数据库的任何其他合适的特性、特征、查询等中被提及而出现。
在一些实施例中,该机制可以确定包括在查询中的结果子句是否指示在最终矩阵乘积M中表示的节点,或者,可选地,包括在结果子句中的节点是否指示在中间矩阵乘积(例如R1*R2)中。在一些实施例中,本文描述的机制可以反向遍历一系列矩阵乘法,以标识结果子句中指示的满足查询中指示的准则的节点。
在一些实施例中,本文描述的机制可以用于创建对图形数据库的表示和分析有用的特定数据结构。例如,在一些实施例中,通过使用本文所述的数据结构来表示图形数据库,本文所述的机制可以允许查询,包括涉及快速解析的图形内多次(例如,十次、二十个和/或任何其它合适数量)遍历的复杂查询。例如,在一些实施例中,本文描述的机制可以通过并行处理数据结构分析的各个组件来增加与返回图形数据库查询的结果相关联的速度,如下面结合图1的106更详细地描述。在一些实施例中,本文所述的机制因此可以允许图形数据库更快地且更有效地操作,由此降低通过设备存储和处理与图形数据库相关的查询的功耗。
转向图1,示出可以根据所公开的主题的一些实施例使用的用于解析图形数据库查询的过程的示例100。注意,在一些实施例中,过程100的框可以在任何合适的设备上执行。例如,在一些实施例中,图形数据库可以存储在诸如台式计算机或膝上型计算机的用户设备上,并且过程100的块可以由用户设备执行。作为另一示例,在一些实施例中,图形数据库可以存储在服务器上,并且过程100的块可以由服务器执行。
过程100可以在102处通过接收与图形数据库相关的查询而开始。任何合适的查询可以以任何合适的方式接收并且具有任何合适的内容。与指示不同人之间的关系的图形相关的查询的示例可以是:“MATCH(p:Person)-[:friend]->(f:Person)RETURN p”。在该示例中,查询可以指示被标记为“Person”(“个人”)的节点要被返回,并且另外,每个返回的个人节点必须与指示与另一个人的“Friend”(“朋友”)关系的边连接。注意,在一些实施例中,接收到的查询可以请求任何合适数量的返回节点。另外,在一些实施例中,接收到的查询可以指定节点之间的任何合适数量(例如,一个、两个、五个、十个和/或任何其他合适数量)的连接或边。例如,上述示例中描述的查询描述由一个Friend(朋友)边连接的两个Person(个人)节点之间的关系。作为另一示例,查询可以描述由任何合适的边(例如,朋友关系、同事、同学和/或任何其它合适的边或连接的类型)连接的任何合适数量的个人节点(例如,两个、三个、五个和/或任何其它合适的数量)之间的关系。下面给出包括比上述示例更多的节点和更多的边的查询的示例。
注意,在一些实施例中,如包括在以上所示的示例查询中的子句“RETURN p”可以被称为“result clause”(“结果子句”)和/或“return clause”(“返回子句”)。例如,在一些实施例中,“RETURN p”可以在特定数据库查询语言中被称为“返回子句”。
在104,过程100可以将查询转换成可以被评估的表达式。在一些实施例中,查询可以被转换为表示使用任何合适数量的矩阵的查询的表达式,每个矩阵表示图形的节点和边。在一些实施例中,过程100可以使用任何合适的技术或技术的组合将查询转换为使用表示图形的节点和边的矩阵的表达式。例如,在一些实施例中,可以通过使用矩阵Rj来表示(节点Ni)-[边Rj]->(节点Nk)三元组来将查询转换为矩阵表达式。在一些这样的实施例中,Rj的每行可以表示节点Ni,并且Rj的每列可以表示节点Nk。继续以上结合102给出的示例查询,该查询可以被转换为具有对应于Person p的行和对应于Person f的列的矩阵R。
在一些实施例中,包括两个或更多条边的遍历的表示的查询可以被表示为矩阵乘法,其中表达式中的每个矩阵对应于三元组,如上所述。例如,在查询包括跨图形中的多个节点的遍历的示例中,诸如:“(N0)-[R0]->(N1)-[R1]->(N2)…-[Ri]->(Ni)”,该遍历可以被转换为矩阵乘法:R0*R1*…*Ri,其中,每个R矩阵表示由相应边关联的节点。作为更具体示例,矩阵R0可以具有对应于节点N0的行和对应于节点N1的列,其中将节点N0连接到节点N1的边可涉及任何合适类型的连接。注意,在上面示出的示例查询中,其中节点N0经由关系边R0而与节点N1相关,矩阵R0可以指示经由由关系R0指示的特定类型的关系(例如,两个人之间的朋友关系,和/或任何其他合适类型的关系)连接到节点N1的节点N0。或者,在查询是:“(N0)-[]->(N1)”,即,在查询中没有指定特定关系的情况下,表示节点N0和N1之间的关系的矩阵可以是关系不可知的。
另外,注意,一般而言,如本文所述,表示节点之间的关系和/或连接的矩阵可以通过矩阵的行来指示源节点,并且通过矩阵的列来指示宿节点或目的地节点。在一些实施例中,这种类型的矩阵符号可以被称为行顺序。然而,在一些实施例中,表示节点之间的关系和/或连接的矩阵可以通过矩阵的列来指示源节点,并且通过矩阵的行来指示宿节点或目的地节点,这可以被称为列顺序。注意,在一些实施例中,可以实现本文描述的技术,而不管矩阵是使用行顺序还是列顺序来构造。
在106,过程100可以评估从转换的查询得到的表达式。在一些实施例中,过程100可以使用任何合适的技术来评估表达式。例如,在表达式包括诸如如上所述的R0*R1*…*Ri等的矩阵乘法的情况下,过程100能够计算出作为R0*R1*…*Ri的乘积的结果矩阵M。注意,在一些实施例中,可以以任何适当的方式执行矩阵乘法。例如,在一些实施例中,因为矩阵乘法是相关的,所以可以单独计算乘法的不同分量。作为更具体的示例,给出矩阵乘法R0*R1*…*Ri,则能够与Ri-1*Ri分开地计算出R0*R1。另外或替代地,在一些实施例中,可以并行计算单独分量。在一些实施例中,可以使用任何合适类型的处理器——诸如图形处理单元(GPU)和/或任何其他合适类型的处理器——来计算单独矩阵乘法,以提高计算速度。
另外,诸如M=R0*R1*…*Ri等的矩阵乘法可以表示任意适当类型的信息。例如,在一些实施例中,M的行可以表示节点N0,M的列可以表示节点Ni,其中Ni个实体可以是可以通过使用图形内的i跳或遍历来遍历图形而从N0实体到达的节点。在一些实施例中,对于每个中间矩阵乘法(例如,R0*R1、Ri-1*Ri、和/或任何其它合适的中间乘法),所得的乘积可以保持第一分量的行域,并且对于每个乘法Rx*Rx+1,列域可以改变至由Rx+1表示的列域。即,中间乘法可以定义可通过执行图形的X跳或遍历从N0到达的Nx+1类型的节点。
另外,注意,在一些实施例中,矩阵-矩阵乘法内的每一中间乘法必须满足矩阵乘法规则(例如,关于矩阵尺寸,和/或任何其它合适的规则)。例如,在一些实施例中,对于乘法Rx*Rx+1,矩阵Rx中的列数必须等于矩阵Rx+1中的行数。在一些实施例中,过程100可以存储表示特定图形的每个矩阵的尺寸以确保矩阵乘法满足矩阵乘法规则。
在106,过程100可以存储来自矩阵-矩阵乘法表达式的评估的任何合适的矩阵。例如,在矩阵乘法M=R0*R1*…*Ri的情况下,过程100可以存储最终乘法结果M,以及任何合适的中间矩阵,诸如R0*R1、Ri-1*Ri和/或任何其他合适的中间矩阵乘积。在一些实施例中,过程100可以基于任何合适的信息来标识要存储的中间矩阵乘积。例如,在一些实施例中,过程100可以基于在102处接收到的查询中请求的特定结果来标识要存储的中间矩阵乘积,如下面结合108更详细地描述的。
在108,过程100可以基于在106执行的矩阵乘法和/或任何中间矩阵乘法乘积来确定对应于在102接收到的查询的结果,如上文结合106所述。在一些实施例中,过程100可以基于在102处接收的查询内指定的返回子句来标识沿着遍历路径的要考虑的节点。例如,继续以上结合102描述的查询示例(例如,“MATCH(p:Person)-[:friend]->(f:Person)RETURNp”),过程100可以将节点p标识为响应于查询而返回的节点。注意,在该示例中,对于M=R1的对应矩阵,其中R1的行对应于Person p节点,而R1的列对应于Person f节点,矩阵M包含要返回由查询指定的结果所需的所有信息。也就是说,矩阵M通过矩阵M的行指定源节点(例如,Person p),并且通过矩阵M的列指定宿节点(例如,Person f)。因此,在该情况下,返回结果可以通过过程100从矩阵M直接获得。
另外或替代地,在指示多次遍历的查询和/或具有指示从中间遍历到达的节点的返回子句的实例中,过程100可以使用中间矩阵乘积来确定对应于在102处接收到的查询的结果。例如,对于示例查询,诸如:“MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country)RETURN c,v”,结果子句“Return c,v”指定要返回宿节点v,并且另外,要返回中间节点c。即,如下所述,过程100可以根据矩阵乘法R=R0*R1*…*Ri来标识结果v,并且可以根据中间矩阵乘积来标识结果c。
在一些实施例中,过程100可以将上述查询表示为矩阵乘法M=F*V*P。在一些实施例中,F可以是表示朋友关系边的矩阵,其中矩阵F的行和列都对应于个人节点(例如,由朋友关系边连接的个人)。在一些实施例中,V可以是表示访问边的矩阵,其中矩阵V的行表示个人节点,矩阵V的列表示访问过的国家(例如,已经访问特定国家的个人)。在一些实施例中,矩阵P可以是表示国家之间和平关系的矩阵,其中矩阵P的行和列都对应于国家节点(例如,彼此和平的国家)。因此,矩阵M可以表示将源个人节点(例如,矩阵M的行)连接到宿国家节点(例如,矩阵M的列)的矩阵。然而,因为查询结果指示要返回访问过的国家,并且因为矩阵M不直接指示访问过的国家,所以矩阵M不能直接用于标识查询中指示的所有请求的结果。
在一些实施例中,过程100可以通过标识对应于由结果子句指定的节点的中间矩阵(例如,来自表达式M=R1*R2*…*Ri的R矩阵)来标识结果子句中指定的既不是源节点也不是对应于查询的宿节点的节点(即,在矩阵M中未表示的节点)。在一些实施例中,过程100然后可以计算中间矩阵乘积,该中间矩阵乘积可以用于标识在结果子句中指定的节点。例如,在上面呈现的示例查询中,“MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country)RETURN c,v”,过程100可以构造中间矩阵X,其可以等于F*V。在这种情况下,中间矩阵X可以具有表示朋友访问过的国家的列。过程100然后可以构造过渡矩阵T,使得如果矩阵X的列k包含至少1,T[k,k]=1。即,矩阵T可以是对角矩阵。在一些实施例中,矩阵T*P的行可以指示访问过的国家,而列T*P列可以指示彼此和平但未被朋友访问过的国家。在一些实施例中,矩阵T*P然后可以用于标识在查询的结果子句中指示的节点c和v。
在一些实施例中,在查询是:“MATCH(p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country)RETURN p,c,v”,过程100可以使用回溯或反向遍历来标识节点p、c和v。例如,继续该示例,过程100可以构造第一中间矩阵p->c=[0,0,1;1,0,0;0,0,0]和第二中间矩阵c->v=[0,0,1;0,0,0;0,1,0]。在一些实施例中,第一中间矩阵p->c可以指示源节点P与朋友访问过的国家之间的连接,并且第二中间矩阵c->v可以指示访问过的国家与和访问过的国家和平的其他国家之间的连接。在一些实施例中,过程100可以通过分析第二中间矩阵c->v以标识为1的列来开始,所述列指示在行维度中访问过的国家以及在列维度中与访问过的国家和平的国家。在第二中间矩阵c->v的示例中,过程100因此可以标识元素[1,3]和[3,2]。从元素[1,3]开始,过程100然后可以向后遍历,并且可以扫描第一中间矩阵p->c的第一列(即,对应于元素[1,3]的行),以标识第一中间矩阵p->c中的在第一列内为1的元素。过程100然后可以标识第一中间矩阵p->c的元素[2,1]。因此,过程100可以标识p=2、c=1和v=3的第一结果集合。注意,在一些实施例中,中间矩阵p->c和c->v可以使用任何合适的技术——诸如通过使用一个或多个过渡矩阵,如上所述——来生成。
在一些实施例中,过程100然后可以循环回来,并且对第二中间矩阵c->v的的第二标识元素[3,2]执行类似分析。具体地,过程100可以扫描第一中间矩阵p->c的第三列(即,对应于元素[3,2]的行元素),以标识第一中间矩阵p->c中的在第一中间矩阵p->c的第三列内为1的元素。过程100然后可以标识第一中间矩阵p->c的元素[1,3]。因此,过程100可以标识p=1、c=3和v=2的第二结果集合。在一些实施例中,完整结果集合可以是:{p=2,c=1,和v=3;p=1,c=3,v=2}。即,在一些实施例中,完整结果集合可以包括与最初在第二中间矩阵c->v中标识的元素即元素[1,3]和[3,2]对应的所有节点。
在110,过程100可以标识并且返回与在102处接收到的查询中指示的结果子句相对应的结果。例如,在以上描述的结果子句指示要返回国家c和访问过的节点v的示例中,过程100可以标识与在框108处标识的值相对应的国家c。作为更具体的示例,如上所述,在块108,完整结果集合包括c=1和c=3的国家值。在一些实施例中,过程100可以标识与值c=1和c=3相对应的国家的名称,例如,“美国”、“墨西哥”、“加拿大”和/或任何其他合适的国家。在一些实施例中,过程100然后可以循环并且标识与每个标识的节点值相关联的特定信息。在一些实施例中,过程100可以以任何合适的方式(例如在102处用于提交查询的用户界面中)返回结果。
转向图2,示出可以根据所公开的主题的一些实施例所使用的用于解析图形数据库查询的过程的另一示例200。注意,在一些实施例中,过程200的框可以在任何合适的设备上执行。例如,在一些实施例中,图形数据库可以存储在诸如台式计算机或膝上型计算机的用户设备上,并且过程200的块可以由用户设备执行。作为另一示例,在一些实施例中,图形数据库可以存储在服务器上,并且过程200的块可以由服务器执行。
过程200可以在202处通过接收与图形数据库相关的查询而开始。任何合适的查询可以以任何合适的方式接收并且具有任何合适的内容。与指示不同人之间的关系的图形相关的查询的示例可以是:“MATCH(p:Person)-[:friend]->(f:Person)RETURN p”。在该示例中,查询可以指示被标记为“Person”的节点要被返回,并且另外,每个返回的Person节点必须与指示与另一个人的“Friend”(“朋友”)关系的边连接。注意,在一些实施例中,接收到的查询可以请求任何合适数量的返回节点。另外,在一些实施例中,接收到的查询可以指定节点之间的任何合适数量(例如,一个、两个、五个、十个和/或任何其他合适数量)的连接或边。例如,上述示例中描述的查询描述由一个朋友边连接的两个人节点之间的关系。作为另一示例,查询可以描述由任何合适的边(例如,朋友关系、同事、同学和/或任何其它合适的边或连接的类型)连接的任何合适数量的个人节点(例如,两个、三个、五个和/或任何其它合适的数量)之间的关系。下面给出包括比上述示例更多的节点和更多的边的查询的示例。
注意,在一些实施例中,如包括在以上所示的示例查询中的子句“RETURN p”可以被称为“结果子句”和/或“返回子句”。例如,在一些实施例中,“RETURN p”可以在特定数据库查询语言中被称为“返回子句”。
接下来,在204,过程200可以从查询形成抽象语法树(AST)。在一些实施例中,该AST可以以任何合适的方式形成并且可以具有任何合适的内容。
然后在206,过程200可以从AST创建查询图形。在一些实施例中,该查询图形可以以任何合适的方式形成,并且可以具有任何合适的内容。例如,在一些实施例中,查询图形可以包括表示由查询搜索模式形成的图形的图形对象G={V,E}。在该图形对象中,V可以定义要由查询所搜索的节点集合,而E可以定义要由查询所搜索的边集合。在一些实施例中,查询图形可以使用邻接列表。
例如,考虑指定多个搜索模式的以下查询:
MATCH(A)-[X]->(B)
MATCH(B)-[Y]->(C)<-[Z]-(),(D)RETURN C,D
查询搜索模式可以由如下的图形表示:
G={V,E}
V={A,B,C,D,anon0}
E={AXB,BYC,anon0ZC}
在208,过程200接下来可以从查询图形生成代数表达式。在一些实施例中,代数表达式可以以任何合适的方式形成并且可以具有任何合适的内容。例如,在一些实施例中,代数表达式可以是操作数(operands)的列表,其中每个操作数是矩阵(例如,exp=[A,B,C])。在一些实施例中,除了操作数列表之外,表达式可以保存指向表示表达式行域的源节点的指针和指向表示表达式列域的目的地节点的指针。例如,在一些实施例中,表达式可以具有以下格式:
Exp={src,dest,[操作数]}
转向图3,根据一些实施例,示出可以用于在图2的208处根据查询图形生成代数表达式的过程300。如图所示,过程300在302处通过将查询图形划分成其连接分量(CC)而开始。查询图形的连接分量可以是图形的任何合适的部分。例如,在一些实施例中,每个连接分量可以是稍后将通过笛卡尔乘积运算来联结的不相交搜索模式。更具体地,例如,考虑以下查询:
MATCH(A)-[E]->(B),(C)-[X]->(D)
用于该查询的查询图形可以是:
G={V,E}
V={A,B,C,D}
E={AEB,CXD}
对于该查询图形存在两个连接分量:
CC0=V{A,B},E={AEB}
CC1=V{C,D},E={CXD}
接下来,在304,可以选择第一/下一连接分量。这种选择可以以任何适当的方式进行。例如,在一些实施例中,该选择可以基于连接分量的大小,使得首先选择更大的连接分量。
然后,在306,对于所选择的连接分量,过程300可以确定该连接分量内的最长路径的长度(LPL)。在一些实施例中,路径可以被定义为边的列表。LPL是在不重访(revisit)节点的情况下所遍历的多个边方面的最长路径--因此,路径不包括循环(例如,[AD,DA],[AB,BC,CA])。注意,在一些实施例中,可以存在长度LPL的多个不同路径。
例如,考虑图6的图形。如图所示,最长路径长度是二,并且有长度为二的六个不同路径:[DA,AB],[DA,AC],[CA,AD],[CA,AB],[BA,AD]和[BA,AC]。
注意,当计算LPL时忽略边方向,因为可以通过转置由反转边表示的矩阵来在反方向上遍历图形。
接下来,在308,确定可以从中探查长度为LPL的路径的节点列表。例如,图6的图形的LPL路径的节点列表可以包括节点[D,B,C]。
在310,过程300接下来可以检索长度为LPL的路径P。可以检索任何合适的路径。继续图6的示例图形,在一些实施例中可以检索以下路径(或任何其他合适的路径):[DA,AB]。
然后,在312,过程300可以建立针对路径的代数表达式。在一些实施例中,可以以任何适当的方式建立该代数表达式。例如,转到图4,可以使用过程400来建立代数表达式。
如图所示,过程400可以在402处通过将i设置为路径中的第一边并且创建空表达式来开始。
接下来,在404,过程400可以确定当前边是否被反转。可以以任何适当的方式进行该确定。例如,过程可以确定当前边的源节点与先前边的目的地节点相同(如果有的话)。如果存在先前边并且当前边的源节点与先前边的目的地节点不同,则可以确定当前边被反转,可以确定源节点是边中的第二节点(而不是第一节点),并且可以确定目的地节点是边中的第一节点(而不是第二节点)。
然后,在406,对于当前边E(i),过程400可以确定E的源节点是否被标记,并且如果是,则获得由E的源节点所表示的标记矩阵,并且添加其作为表达式的最右边的操作数。
在408,过程400接下来可以检索由E(i)的关系类型所表示的矩阵M,并且如果E(i)被反转则将其转置。
接下来在410,过程400可以添加M(即,如果M在408处被转置,则被转置的M)作为表达式的最右边的操作数。
然后,在412,过程400可以确定i是否等于N(路径上的最后边)。如果不是,则过程400可以分支到414以递增i,然后循环回到404。
否则,过程400可以在416确定E(i)的目的地节点是否被标记,并且如果是,则得到由E(i)的目的地节点表示的标记矩阵,并添加其作为表达式的最右边的操作数。
最后,在418,过程400可以将所构造的表达式源节点设置为路径的第一节点,并且将所构造的表达式目的地节点设置为路径的最后节点。
考虑以下示例路径:P=[DA,CA]。从节点D开始,经由边DA跳到A,然后经由反转边CA从A到C。
在402开始,过程400可以将i设置为边DA,并且创建空代数表达式:exp={}。
接下来,在404,过程400可以确定边DA未被反转。
然后,在406,过程400可以确定边DA的源节点D被标记为Ld,并且将矩阵Ld添加到表达式:exp={Ld}。
在408,过程400可以检索矩阵DA并且确定当前边未被反转,因此矩阵DA不需要被转置。
接下来,在410,过程400可以将矩阵DA添加到表达式:exp={Ld*DA}。
然后,过程400可以在412确定当前边不是路径的最后边,在414递增i,并且循环回到404。
在返回到404时,过程400可以确定边CA被反转,因为该边不是第一边,并且边CA的源节点不匹配边DA的目的地节点。因此,它可以将源节点设置为A,将目的地节点设置为C。
接下来,在406,过程400可确定节点A未被标记,因此不向表达式添加任何标记矩阵。
然后,在408,过程400可检索矩阵CA并转置(transpose)矩阵CA,因为其如在404处确定的那样被反转。
在410,过程400接下来可以将转置矩阵CA添加到表达式:exp={Ld*DA*Transpose(CA)}。
接下来,在412,过程400可以确定边CA是路径中的最后边,因此分支到416。
在416,过程400可以确定边CA的目的地节点(C)被标记为Lc,因此将标记矩阵Lc添加到表达式:exp={Ld*DA*Transpose(CA)*Lc}。
最后,在418,过程400可以更新表达式的源(source)节点和目的地(destination)节点:exp={src=D dest=C operands=[Ld,DA,Transpose(CA),Lc]}。
返回图3,在过程400完成之后,在314,过程300可以从当前连接分量移除路径P的边。作为从当前连接分量中移除路径P的边的结果,路径P中没有边(进入或外出)的任何节点也可以从当前连接分量中移除。
看图6的示例图形,在移除路径[DA,CA]之后,该图形变为:G{V={A,B}E={BA}}。当连接到节点D和C二者的所有边都被处理时,节点D和C都被移除。节点A保持为它仍然具有边(BA)。
在314移除边和节点之后,过程300确定在当前连接分量中是否存在任何更多路径。如果是,则过程可以循环回到304以处理下一个LPL路径。否则,过程300可以进行到318以确定在图形中是否存在任何更多连接分量。如果是,则过程300可以循环回到304以选择下一个连接分量。否则,过程300可以结束。
在一些实施例中,可能期望将以上形成的表达式分解成子表达式,以便确保中间实体(无论是节点还是边)不会由于矩阵-矩阵乘法而丢失。如果图形实体(即,节点或边)在查询内的某处被引用,则该图形实体可以被认为是中间的。例如,考虑以下查询:
MATCH(A)-[X]->(I)-[Y]->(Z)RETURN I
如果计算出[X]*[Y],则不能检索I。
在一些实施例中,为了确保中间物不丢失,可以为了中间物而检查代数表达式,并且如果存在中间物,则可以将该表达式分解成子表达式,使得中间物将是表达式的源节点或目的地节点(行/列域)。
返回到图2,在一些实施例中,在过程200的210处,代数表达式可以被分解成子表达式。在一些实施例中,可以从过程200中省略框210。在一些实施例中,任何合适的过程可以用于将代数表达式分解成子表达式。例如,在一些实施例中,图5的过程500可以用于将代数表达式分解成子表达式。
转向图5,过程500可以在502通过接收表达式(exp)和从其构建该表达式的路径P开始。
接下来,在504,过程500可以将计数器i设置为0。
然后,在506,过程500可以创建新的空代数表达式AE(i)={}。
在508,过程500接下来可以找到路径P中的第一中间实体(IE)。在一些实施例中,该IE可以是节点或边。
接下来,在510,过程500可以在原始表达式(exp)中定位IE的代表操作数(IO)。例如,在一些实施例中,IO可以是分别对应于节点或边的标记矩阵或关系矩阵。
然后,在512,过程500可以从最左边的操作数开始一直将表达式(exp)的所有操作数复制到操作数IO,并且将它们放在AE(i)中。
在514,过程500接下来可以从表达式(exp)中移除AE(i),并且从路径P中移除所扫描的实体(节点和边)。
接下来,518可以确定在路径P中是否存在任何剩余的中间实体(即,路径P未完成)。如果路径P没有完成,则过程500可以在518递增i,并且循环回到506以处理下一个中间实体。否则,过程可以在520确定表达式(exp)是否为空。如果不是,则过程可以创建新代数表达式AE(i+1)并且将其设置为等于表达式(exp):AE(i+1)=exp。
例如,考虑上述[X]*[Y]、X行/列域(A,I)和Y行/列域(I,Z)的示例表达式。回想不丢失I是所希望的。
过程500可以在502处通过接收表达式[X]*[Y]和从其构造该表达式的路径P((A)-[X]->(I)-[Y]->(Z))开始。
接下来,在504,过程500可以将i设置为0。
然后,在506,过程500可以创建新的空代数表达式:AE(0)={}。
在508,过程500找到路径P中的第一中间实体(IE)。在这种情况下,第一中间实体是[X]。
接下来,在510,过程500可以在表达式(exp)中找到IE的代表操作数(IO)。在这种情况下,IO是[X]。
然后,在512,过程500可以将[X]添加到AE(0):AE(0)={X}。
在514,过程500然后可以从表达式(exp)中移除AE(0)(其等于[X])并且从路径P中移除扫描的实体。
接下来,在516,过程500可以确定是否存在任何更多的中间实体(即,路径P是否完成)。在该示例中,由于不再存在中间实体,所以过程500分支到520,在那里它确定表达式(exp)不为空(它包含[Y])。因此,在522,过程500设置AE(1)={Y}。
过程500然后在524结束。
返回图2,在210处将任何表达式分解为子表达式之后,过程200可以在212处评估表达式和/或子表达式。表达式和/或子表达式可以用任何合适的方式来被评估。例如,在一些实施例中,任何合适的硬件处理器可以基于表达式和/或子表达式中标识的任何合适的矩阵的内容来执行矩阵-矩阵乘法。
最后,在214,过程200可以标识并且返回与在202接收到的查询中所指示的结果子句相对应的结果。
转向图7,示出可以根据所公开的主题的一些实施例所使用的用于解析图形数据库查询的硬件的示例700。如图所示,硬件700可以包括服务器702、通信网络704和/或一个或多个用户设备706,诸如用户设备708和710。
服务器702可以是用于存储信息、数据库和/或程序的任何合适的服务器。例如,在一些实施例中,服务器702可以存储图形数据库,该图形数据库指示图形上的节点和边之间的关系。在一些实施例中,服务器702可以响应于与图形数据库相关的查询,如上文结合图1至图6所述。在一些实施例中,可以省略服务器702。
在一些实施例中,通信网络704可以是一个或多个有线和/或无线网络的任何合适的组合。例如,通信网络704可以包括因特网、内联网、广域网(WAN)、局域网(LAN)、无线网络、数字用户线(DSL)网络、帧中继网络、异步传输模式(ATM)网络、虚拟专用网络(VPN)和/或任何其它适当的通信网络中的任何一个或多个。用户设备706可以通过一个或多个通信链路(例如,通信链路712)连接到通信网络704,该通信网络可以通过一个或多个通信链路(例如,通信链路714)链接到服务器702。通信链路可以是适合于在用户设备706和服务器702之间传达数据的任何通信链路,诸如网络链路、拨号链路、无线链路、硬连线链路、任何其他合适的通信链路、或这些链路的任何合适的组合。
用户设备706可以包括适合于存储图形数据库和/或向存储图形数据库的服务器702传送查询的任何一个或多个用户设备。例如,在一些实施例中,用户设备706可以包括移动电话、平板计算机、台式计算机、膝上型计算机和/或任何其他合适类型的用户设备。
尽管服务器702被示出为一个设备,但是在一些实施例中,可以使用任何合适数量的设备来执行由服务器702执行的功能。例如,在一些实施例中,多个设备可以用于实现由服务器702执行的功能。
尽管在图7中示出两个用户设备708和710以避免使附图过于复杂,但是在一些实施例中可以使用任何合适数量的用户设备和/或任何合适类型的用户设备。
在一些实施例中,服务器702和用户设备706可以使用任何合适的硬件来实现。例如,在一些实施例中,设备702和706可以使用任何合适的通用计算机或专用计算机来实现。例如,移动电话可以使用专用计算机来实现。任何这样的通用计算机或专用计算机可以包括任何合适的硬件。例如,如图8的示例硬件800中所示,这样的硬件可以包括硬件处理器802、存储器和/或存储装置804、输入设备控制器806、输入设备808、显示器/音频驱动器810、显示器和音频输出电路812、通信接口814、天线816和总线818。
硬件处理器802可以包括任何合适的硬件处理器,诸如微处理器、微控制器、数字信号处理器、专用逻辑和/或在一些实施例中用于控制通用计算机或专用计算机的功能的任何其他合适的电路。在一些实施例中,硬件处理器802可以由存储在诸如服务器702的服务器的存储器和/或存储装置中的服务器程序控制。例如,在一些实施例中,服务器程序可以使硬件处理器802将接收到的与图形数据库相关的查询转换为表达式,对表达式进行评估,返回与查询相对应的信息,和/或执行任何其它合适的功能。在一些实施例中,硬件处理器802可以由存储在用户设备706的存储器和/或存储装置804中的计算机程序控制。例如,计算机程序可以使硬件处理器802使用以上结合图1至图6描述的技术将与图数据库相关的查询传送到存储图形数据库的服务器、对与存储在用户设备706上的图形数据库相关的查询做出响应、和/或执行任何其它适当功能。
在一些实施例中,存储器和/或存储装置804可以是用于存储程序、数据和/或任何其它合适的信息的任何合适的存储器和/或存储装置。例如,存储器和/或存储装置804可以包括随机存取存储器、只读存储器、闪存、硬盘存储装置、光学介质和/或任何其他合适的存储器。
在一些实施例中,输入设备控制器806可以是用于控制和接收来自一个或多个输入设备808的输入的任何合适的电路。例如,输入设备控制器806可以是用于从触摸屏、从键盘、从一个或多个按钮、从语音识别电路、从麦克风、从相机、从光学传感器、从加速度计、从温度传感器、从近场传感器、从压力传感器、从编码器和/或任何其他类型的输入设备接收输入的电路。
在一些实施例中,显示器/音频驱动器810可以是用于控制和驱动到一个或多个显示器/音频输出设备812的输出的任何合适的电路。例如,显示器/音频驱动器810可以是用于驱动触摸屏、平板显示器、阴极射线管显示器、投影仪、一个或多个扬声器和/或任何其它合适的显示和/或呈现设备的电路。
通信接口814可以是用于与一个或多个通信网络(例如,计算机网络704)对接的任何合适的电路。例如,接口814可以包括网络接口卡电路、无线通信电路和/或任何其他合适类型的通信网络电路。
在一些实施例中,天线816可以是用于与通信网络(例如,通信网络704)无线通信的任何合适的一个或多个天线。在一些实施例中,可以省略天线816。
在一些实施例中,总线818可以是用于在两个或更多个组件802、804、806、810和814之间通信的任何合适的机制。
根据一些实施例,任何其它合适的组件可以被包括在硬件800中。
在一些实施例中,图1至图5的过程的上述框中的至少一些可以以不限于结合附图示出和描述的顺序和序列的任何顺序或序列来执行或进行。而且,图1至图5的上述框中的一些框可以在适当的情况下基本上同时或并行地执行或实施,以减少等待时间和处理时间。另外或替代地,可以省略图1到5的过程的上述框中的一些框。
在一些实施例中,任何合适的计算机可读介质可以用于存储用于执行本文的功能和/或过程的指令。例如,在一些实施例中,计算机可读介质可以是暂时性的或非暂时性的。例如,非暂时性计算机可读介质可以包括介质,诸如非暂时性形式的磁介质(诸如硬盘、软盘和/或任何其他合适的磁介质)、非暂时性形式的光学介质(诸如压缩盘、数字视频盘、蓝光盘和/或任何其他合适的光学介质)、非暂时性形式的半导体介质(诸如闪存、电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和/或任何其他合适的半导体介质)、在传输期间不短暂或缺乏任何永久性的外观的任何合适的介质和/或任何合适的有形介质。作为另一示例,暂时性计算机可读介质可以包括网络上的信号、电线中的信号、导体中的信号、光纤中的信号、电路中的信号、传输期间短暂且缺乏任何持久的外观的任何合适的介质中的信号、和/或任何合适的无形介质中的信号。
尽管在此以密码查询语言提供可以在一些实施例中使用的查询的示例,但是在一些实施例中可以使用任何合适的查询语言。例如,在一些实施例中,可以使用Graphql、Cypher、OpenCypher、Sparql、Gremlin和/或任何其它合适的查询语言中的任何一个或多个。
因此,提供了用于解析图形数据库查询的方法、***和介质。
尽管在上述说明性实施例中描述和说明了本发明,但是应当理解,本公开仅通过示例的方式进行,并且在不脱离本发明的精神和范围的情况下,可以对本发明的实现细节进行各种改变,本发明的精神和范围仅由所附权利要求限定。所公开的实施例的特征可以以各种方式组合和重新布置。
Claims (21)
1.一种用于解析数据库查询的方法,包括:
标识与所述数据库查询相对应的查询图形中的连接分量;
确定针对所述连接分量的最长路径长度;
选择具有所述最长路径长度的路径;
建立针对所述路径的代数表达式;
使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及
基于所述解来响应所述查询。
2.根据权利要求1所述的方法,还包括:
将所述查询图形划分成包括所述连接分量的多个连接分量。
3.根据权利要求1所述的方法,其中,
所述连接分量是不相交搜索模式。
4.根据权利要求1所述的方法,其中,
通过使所述连接分量具有大于或等于所述查询图形中的任何其它连接分量的长度来标识所述连接分量。
5.根据权利要求1所述的方法,其中,
所述最长路径长度是大于针对所述查询图形的任何其他路径长度的路径长度,并且
所述路径长度是在不重访节点的情况下在所述查询图形中遍历的连续边的计数。
6.根据权利要求1所述的方法,其中,建立针对所述路径的所述代数表达式包括:
创建空表达式;
针对所述路径上的每条边:
如果所述边被反转,则交换对所述路径的源节点的指定和对所述路径的目的地节点的指定;
如果所述源节点被标记,则获得由所述源节点所表示的标记矩阵,并且添加所述标记矩阵作为所述表达式的最右边的操作数;
检索由所述源节点所表示的表示类型矩阵;
如果所述边被反转,则转置所述表示类型矩阵;以及
添加所述表示类型矩阵作为所述表达式的最右边的操作数;
针对所述路径上的最后边,如果最后节点的目的地节点被标记,则添加所述目的地节点的标记矩阵加到所述表达式的最右边的操作数;以及
将所述表达式的源节点设置为所述路径的第一节点,并且将所述表达式的目的地节点设置为所述路径的最后节点。
7.根据权利要求1所述的方法,还包括:
从所述连接分量移除路径的边和在所述路径中没有边的任何节点。
8.一种用于解析数据库查询的***,包括:
存储器;
至少一个硬件处理器,其被耦合到所述存储器并且共同地被配置为:
标识与所述数据库查询相对应的查询图形中的连接分量;
确定针对所述连接分量的最长路径长度;
选择具有所述最长路径长度的路径;
建立针对所述路径的代数表达式;
使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及
基于所述解来响应所述查询。
9.根据权利要求8所述的***,其中,所述至少一个处理器还被共同地配置为:
将所述查询图形划分成包括所述连接分量的多个连接分量。
10.根据权利要求8所述的***,其中,
所述连接分量是不相交搜索模式。
11.根据权利要求8所述的***,其中,
通过使所述连接分量具有大于或等于所述查询图形中的任何其它连接分量的长度来标识所述连接分量。
12.根据权利要求8所述的***,其中,
所述最长路径长度是大于针对所述查询图形的任何其他路径长度的路径长度,并且
所述路径长度是在不重访节点的情况下在所述查询图形中遍历的连续边的计数。
13.根据权利要求8所述的***,其中,建立针对所述路径的所述代数表达式包括:
创建空表达式;
针对所述路径上的每条边:
如果所述边被反转,则交换对所述路径的源节点的指定和对所述路径的目的地节点的指定;
如果所述源节点被标记,则获得由所述源节点所表示的标记矩阵,并且添加所述标记矩阵作为所述表达式的最右边的操作数;
检索由所述源节点所表示的表示类型矩阵;
如果所述边被反转,则转置所述表示类型矩阵;以及
添加所述表示类型矩阵作为所述表达式的最右边的操作数;
针对所述路径上的最后边,如果最后节点的目的地节点被标记,则添加所述目的地节点的标记矩阵加到所述表达式的最右边的操作数;以及
将所述表达式的源节点设置为所述路径的第一节点,并且将所述表达式的目的地节点设置为所述路径的最后节点。
14.根据权利要求8所述的***,其中,所述至少一个处理器还被共同地配置为:
从所述连接分量移除路径的边和在所述路径中没有边的任何节点。
15.一种包含计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由处理器执行时使所述处理器执行用于解析数据库查询的方法,所述方法包括:
标识与所述数据库查询相对应的查询图形中的连接分量;
确定针对所述连接分量的最长路径长度;
选择具有所述最长路径长度的路径;
建立针对所述路径的代数表达式;
使用矩阵-矩阵乘法来求解所述代数表达式以提供解;以及
基于所述解来响应所述查询。
16.根据权利要求15所述的非暂时性计算机可读介质,其中,
所述方法还包括将所述查询图形划分成包括所述连接分量的多个连接分量。
17.根据权利要求15所述的非暂时性计算机可读介质,其中,
所述连接分量是不相交搜索模式。
18.根据权利要求15所述的非暂时性计算机可读介质,其中,
通过使所述连接分量具有大于或等于所述查询图形中的任何其它连接分量的长度来标识所述连接分量。
19.根据权利要求15所述的非暂时性计算机可读介质,其中,
所述最长路径长度是大于所述查询图形的任何其他路径长度的路径长度,并且
所述路径长度是在不重访节点的情况下在所述查询图形中遍历的连续边的计数。
20.根据权利要求15所述的非暂时性计算机可读介质,其中,建立针对所述路径的所述代数表达式包括:
创建空表达式;
针对所述路径上的每条边:
如果所述边被反转,则交换对所述路径的源节点的指定和对所述路径的目的地节点的指定;
如果所述源节点被标记,则获得由所述源节点所表示的标记矩阵,并且添加所述标记矩阵作为所述表达式的最右边的操作数;
检索由所述源节点所表示的表示类型矩阵;
如果所述边被反转,则转置所述表示类型矩阵;以及
添加所述表示类型矩阵作为所述表达式的最右边的操作数;
针对所述路径上的最后边,如果最后节点的目的地节点被标记,则添加所述目的地节点的标记矩阵加到所述表达式的最右边的操作数;以及
将所述表达式的源节点设置为所述路径的第一节点,并且将所述表达式的目的地节点设置为所述路径的最后节点。
21.根据权利要求15所述的非暂时性计算机可读介质,其中,
所述方法还包括从所述连接分量移除路径的边和在所述路径中没有边的任何节点。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962847211P | 2019-05-13 | 2019-05-13 | |
US62/847,211 | 2019-05-13 | ||
US201962854316P | 2019-05-29 | 2019-05-29 | |
US62/854,316 | 2019-05-29 | ||
US16/454,993 | 2019-06-27 | ||
US16/454,993 US10621235B1 (en) | 2019-05-13 | 2019-06-27 | Methods, systems, and media for resolving database queries using algebraic expressions using matrix-matrix multiplication |
PCT/IL2020/050413 WO2020230116A1 (en) | 2019-05-13 | 2020-04-06 | Methods, systems, and media for resolving graph database queries |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114127705A true CN114127705A (zh) | 2022-03-01 |
CN114127705B CN114127705B (zh) | 2023-05-23 |
Family
ID=70223447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080035842.4A Active CN114127705B (zh) | 2019-05-13 | 2020-04-06 | 用于解析图形数据库查询的方法、***和介质 |
Country Status (8)
Country | Link |
---|---|
US (3) | US10621235B1 (zh) |
EP (1) | EP3970030A4 (zh) |
KR (1) | KR102615661B1 (zh) |
CN (1) | CN114127705B (zh) |
AU (1) | AU2020276417A1 (zh) |
CA (1) | CA3140362C (zh) |
IL (1) | IL288050B1 (zh) |
WO (1) | WO2020230116A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210303574A1 (en) * | 2020-03-31 | 2021-09-30 | Paul Geoffrey Brown | Matrix-related operations in relational databases systems including massively parallel processing systems |
KR102615660B1 (ko) | 2023-07-17 | 2023-12-19 | (주)인포시즈 | 그래프 데이터베이스에 기반한 데이터 관계 추적 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램 |
KR102614051B1 (ko) | 2023-07-17 | 2023-12-14 | (주)인포시즈 | 그래프 데이터베이스를 이용한 이상 징후 탐지 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130232171A1 (en) * | 2011-07-13 | 2013-09-05 | Linkedln Corporation | Method and system for semantic search against a document collection |
CN105210058A (zh) * | 2012-12-14 | 2015-12-30 | 微软技术许可有限责任公司 | 使用多个引擎来进行图查询处理 |
CN107111617A (zh) * | 2014-12-19 | 2017-08-29 | 微软技术许可有限责任公司 | 数据库中的图处理 |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2710548B2 (ja) * | 1993-03-17 | 1998-02-10 | インターナショナル・ビジネス・マシーンズ・コーポレイション | データを検索する方法およびブール代数文表現と図形表現を互いに変換する方法 |
JP2002351898A (ja) * | 2001-05-23 | 2002-12-06 | Internatl Business Mach Corp <Ibm> | グラフ構造データの処理方法、処理システムおよびプログラム |
US7082433B2 (en) * | 2002-07-20 | 2006-07-25 | Microsoft Corporation | Translation of object queries involving inheritence |
US7103613B2 (en) * | 2003-05-14 | 2006-09-05 | International Business Machines Corporation | Object oriented query root leaf inheritance to relational join translator method, system, article of manufacture, and computer program product |
US7991755B2 (en) * | 2004-12-17 | 2011-08-02 | International Business Machines Corporation | Dynamically ranking nodes and labels in a hyperlinked database |
US7580918B2 (en) * | 2006-03-03 | 2009-08-25 | Adobe Systems Incorporated | System and method of efficiently representing and searching directed acyclic graph structures in databases |
US9727604B2 (en) * | 2006-03-10 | 2017-08-08 | International Business Machines Corporation | Generating code for an integrated data system |
US7991769B2 (en) * | 2006-07-07 | 2011-08-02 | Yahoo! Inc. | System and method for budgeted generalization search in hierarchies |
US8671091B2 (en) * | 2006-08-02 | 2014-03-11 | Hewlett-Packard Development Company, L.P. | Optimizing snowflake schema queries |
US7984012B2 (en) * | 2006-11-02 | 2011-07-19 | D-Wave Systems Inc. | Graph embedding techniques |
US7844608B2 (en) * | 2006-12-15 | 2010-11-30 | Yahoo! Inc. | Clustered query support for a database query engine |
WO2008087960A1 (ja) * | 2007-01-17 | 2008-07-24 | Scigineer, Inc. | サーバ装置、情報処理装置、および情報処理方法 |
JP5278535B2 (ja) * | 2009-03-19 | 2013-09-04 | 富士通株式会社 | データベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法 |
US8364629B2 (en) * | 2009-07-02 | 2013-01-29 | Palo Alto Research Center Incorporated | Depth-first search for target value problems |
US8515975B1 (en) * | 2009-12-07 | 2013-08-20 | Google Inc. | Search entity transition matrix and applications of the transition matrix |
KR101296683B1 (ko) * | 2011-03-23 | 2013-08-14 | 연세대학교 산학협력단 | 데이터 스트림에서의 다중 조인 질의 처리를 위한 2 페이즈 수행 방법 |
US8825651B1 (en) * | 2011-06-30 | 2014-09-02 | Crimson Corporation | Determining a group of related products on a computing device |
US9158847B1 (en) * | 2011-07-19 | 2015-10-13 | Kyndi Inc. | Cognitive memory encoding networks for fast semantic indexing storage and retrieval |
JP5866922B2 (ja) * | 2011-09-22 | 2016-02-24 | 富士ゼロックス株式会社 | 検索装置及びプログラム |
US8645339B2 (en) * | 2011-11-11 | 2014-02-04 | International Business Machines Corporation | Method and system for managing and querying large graphs |
US20130173653A1 (en) * | 2011-12-30 | 2013-07-04 | Microsoft Corporation | Path composition for planning |
US9411890B2 (en) * | 2012-04-04 | 2016-08-09 | Google Inc. | Graph-based search queries using web content metadata |
US9286396B2 (en) * | 2013-07-26 | 2016-03-15 | Microsoft Technology Licensing, Llc | Query expansion and query-document matching using path-constrained random walks |
US9348947B2 (en) * | 2013-07-26 | 2016-05-24 | Helynx, Inc. | Systems and methods for visualizing and manipulating graph databases |
US20150169758A1 (en) * | 2013-12-17 | 2015-06-18 | Luigi ASSOM | Multi-partite graph database |
WO2015100549A1 (zh) * | 2013-12-30 | 2015-07-09 | 华为技术有限公司 | 一种图数据查询方法及装置 |
EP3029607A1 (en) * | 2014-12-05 | 2016-06-08 | PLANET AI GmbH | Method for text recognition and computer program product |
US20160328443A1 (en) * | 2015-05-06 | 2016-11-10 | Vero Analytics, Inc. | Knowledge Graph Based Query Generation |
US20160335371A1 (en) * | 2015-05-15 | 2016-11-17 | General Electric Company | System and method for querying graphs distributed over multiple machines |
US10007852B2 (en) * | 2015-05-29 | 2018-06-26 | Bae Systems Information And Electronic Systems Integration Inc. | Methods and apparatuses for performing object tracking using graphs |
US10061715B2 (en) * | 2015-06-02 | 2018-08-28 | Hong Kong Baptist University | Structure-preserving subgraph queries |
US10810257B2 (en) * | 2015-08-27 | 2020-10-20 | Oracle International Corporation | Fast processing of path-finding queries in large graph databases |
US9330138B1 (en) * | 2015-09-18 | 2016-05-03 | Linkedin Corporation | Translating queries into graph queries using primitives |
US9436760B1 (en) * | 2016-02-05 | 2016-09-06 | Quid, Inc. | Measuring accuracy of semantic graphs with exogenous datasets |
WO2017178902A1 (en) * | 2016-04-11 | 2017-10-19 | Kpit Technologies Limited | Graph database for diagnostics and system health monitoring |
US9558265B1 (en) * | 2016-05-12 | 2017-01-31 | Quid, Inc. | Facilitating targeted analysis via graph generation based on an influencing parameter |
US9710544B1 (en) * | 2016-05-19 | 2017-07-18 | Quid, Inc. | Pivoting from a graph of semantic similarity of documents to a derivative graph of relationships between entities mentioned in the documents |
US11068459B2 (en) * | 2016-05-27 | 2021-07-20 | Dynactionize N.V. | Computer implemented and computer controlled method, computer program product and platform for arranging data for processing and storage at a data storage engine |
US20180336202A1 (en) * | 2017-05-18 | 2018-11-22 | 0934781 B.C. Ltd | System and method to represent documents for search in a graph |
US11023526B2 (en) * | 2017-06-02 | 2021-06-01 | International Business Machines Corporation | System and method for graph search enhancement |
US10268646B2 (en) * | 2017-06-06 | 2019-04-23 | Facebook, Inc. | Tensor-based deep relevance model for search on online social networks |
CN108874954A (zh) * | 2018-06-04 | 2018-11-23 | 深圳市华傲数据技术有限公司 | 一种数据库查询的优化方法、介质及设备 |
US11016965B2 (en) * | 2019-01-22 | 2021-05-25 | International Business Machines Corporation | Graphical user interface for defining atomic query for querying knowledge graph databases |
-
2019
- 2019-06-27 US US16/454,993 patent/US10621235B1/en active Active
-
2020
- 2020-04-06 IL IL288050A patent/IL288050B1/en unknown
- 2020-04-06 EP EP20805663.0A patent/EP3970030A4/en active Pending
- 2020-04-06 KR KR1020217040825A patent/KR102615661B1/ko active IP Right Grant
- 2020-04-06 WO PCT/IL2020/050413 patent/WO2020230116A1/en unknown
- 2020-04-06 CA CA3140362A patent/CA3140362C/en active Active
- 2020-04-06 CN CN202080035842.4A patent/CN114127705B/zh active Active
- 2020-04-06 AU AU2020276417A patent/AU2020276417A1/en active Pending
- 2020-04-10 US US16/845,949 patent/US11416550B2/en active Active
-
2022
- 2022-08-12 US US17/887,217 patent/US20230195794A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130232171A1 (en) * | 2011-07-13 | 2013-09-05 | Linkedln Corporation | Method and system for semantic search against a document collection |
CN105210058A (zh) * | 2012-12-14 | 2015-12-30 | 微软技术许可有限责任公司 | 使用多个引擎来进行图查询处理 |
CN107111617A (zh) * | 2014-12-19 | 2017-08-29 | 微软技术许可有限责任公司 | 数据库中的图处理 |
Also Published As
Publication number | Publication date |
---|---|
US20230195794A1 (en) | 2023-06-22 |
IL288050A (en) | 2022-01-01 |
WO2020230116A1 (en) | 2020-11-19 |
CA3140362C (en) | 2023-01-31 |
US11416550B2 (en) | 2022-08-16 |
IL288050B1 (en) | 2024-05-01 |
EP3970030A4 (en) | 2023-06-28 |
KR20220100791A (ko) | 2022-07-18 |
KR102615661B1 (ko) | 2023-12-20 |
CN114127705B (zh) | 2023-05-23 |
AU2020276417A1 (en) | 2022-01-20 |
EP3970030A1 (en) | 2022-03-23 |
CA3140362A1 (en) | 2020-11-19 |
US20200410004A1 (en) | 2020-12-31 |
US10621235B1 (en) | 2020-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Viard et al. | Computing maximal cliques in link streams | |
CN114127705B (zh) | 用于解析图形数据库查询的方法、***和介质 | |
TWI497325B (zh) | 用於在圖形資料串流中物件之分類方法 | |
US20150310644A1 (en) | Efficient representations of graphs with multiple edge types | |
Hellmuth et al. | The mathematics of xenology: Di-cographs, symbolic ultrametrics, 2-structures and tree-representable systems of binary relations | |
Isaac et al. | A closer look at the tropical cryptography | |
Viard et al. | Enumerating maximal cliques in link streams with durations | |
Coll et al. | Symplectic meanders | |
Rößler | Stochastic Taylor expansions for the expectation of functionals of diffusion processes | |
Loukides et al. | All-pairs suffix/prefix in optimal time using Aho-Corasick space | |
Allen et al. | SIS epidemic models with multiple pathogen strains | |
Fuentes-Sepúlveda et al. | Implementing the topological model succinctly | |
Salem et al. | Compact and noncompact solutions to generalized Sturm–Liouville and Langevin equation with Caputo–Hadamard fractional derivative | |
Rößler | Stochastic Taylor expansions for functionals of diffusion processes | |
Zhang et al. | Drawing from hats by noise-based logic | |
Ota et al. | Dynamic construction of an antidictionary with linear complexity | |
Bell | Experimental statistics for Mirzakhani’s Theorem | |
Huang et al. | Recursive and parallel constructions of independent spanning trees in alternating group networks | |
Memon et al. | Visual analysis of heterogeneous networks | |
Radford | Biproducts and Kashina's examples | |
Roy et al. | Cellular automata machines for graph theoretic problems | |
Mahdavi-Amiri et al. | Real and integer Wedderburn rank reduction formulas for matrix decompositions | |
Bermúdez et al. | Symplectic forms and products by generators | |
Bodine et al. | Spectrally arbitrary patterns over finite fields | |
Ayupov et al. | Enveloping-algebras and derivations of Baer JB-algebras |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |