买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】数据库中的图处理_微软技术许可有限责任公司_201480084094.3 

申请/专利权人:微软技术许可有限责任公司

申请日:2014-12-19

公开(公告)日:2021-06-08

公开(公告)号:CN107111617B

主分类号:G06F16/22(20190101)

分类号:G06F16/22(20190101);G06F16/28(20190101);G06F16/242(20190101);G06F16/2455(20190101)

优先权:

专利状态码:有效-授权

法律状态:2021.06.08#授权;2017.09.22#实质审查的生效;2017.08.29#公开

摘要:本文所描述的主题涉及用于实现图处理的数据库中间件。提出了图数据和底层关系数据库或SQL数据库之间的中间件。图中的节点的局部属性和拓扑信息可以存储在数据库中的单个节点表中,从而不再需要物理联接表。中间件可以有效地将图查询转换成对相关表的SQL查询。中间件可以使用不考虑数据库查询引擎的拓扑知识来优化转换后的查询。

主权项:1.一种计算机实现的用于图处理的系统,包括:图映射器,被配置为将表示图的数据存储到关系数据库中的第一表中,所述图中的每个节点具有单值属性和多值属性,所述多值属性是非局部属性并且包含对至少一个相邻节点的引用,所述映射器被配置为通过以下方式将每个节点存储在所述第一表中的相应记录中:将所述单值属性存储在单值字段中,以及将所述多值属性存储在多值字段中;查询转换器,被配置为:接收关于所述图的图查询,所述查询包括从第一节点到与所述第一节点相邻的第二节点的遍历,将所述图查询变换成对所述第一表和第二表的结构化查询语言SQL查询,以及利用所述SQL查询,从所述第一表检索所述第一节点的所述多值属性并且从所述第二表获取所述第二节点的数据,以及所述图映射器还被配置为:针对所述图中的每个节点,将邻接列表存储在所述多值字段中,所述邻接列表包含对所述至少一个相邻节点的所述引用;将所述邻接列表转换为表示拓扑信息的临时表;以及使用所述临时表来定位所述相应记录。

全文数据:数据库中的图处理背景技术[0001]图(graph数据正变得无所不在。如已知的,图可以具有两个或更多个节点(或实体),每个节点具有一个或多个局部属性。此外,图中的节点可以与图中的一个或多个其他节点具有关联或关系。两个节点之间的关联可以被称为“边”。边可以是有向的或无向的。对于由边连接的两个节点,一个节点称为另一节点的“相邻节点”或“邻居节点”。[0002]在各种应用中,有必要在数据库中存储和查询这些图数据。诸如关系数据库等很多传统的数据库已经在汇总数据方面取得成功。然而,这些传统的数据库在处理图方面存在困难,因为图数据的性质与列表数据的性质完全不同。例如,图遍历是图处理中的常见和基本操作。给定源节点,图遍历返回与源节点相邻的一个或多个节点的数据。在关系数据库中,数据通常被规范化以避免冗余和更新异常。然而,图中的节点是高度连接的,并且通常呈现多对多关系。在数据规范化的情况下,必须使用联接表来表示两个节点之间的多对多关系,其中两个列分别引用两个节点。[0003]这样的组织意味着节点的局部属性与图拓扑分离。也就是说,边信息必须与节点信息分开存储。因此,对于从节点到其邻居的每次遍历,数据库的查询引擎必须执行附加联接以查找联接表从而获得与节点相关联的拓扑信息,这将对高速缓存局部性locality产生负面影响并且降低系统性能。发明内容[0004]可以在一个物理记录中将节点的邻接列表和属性共同定位,以获得用于图遍历的高速缓存局部性。然而,这由于与节点相关联的所有属性都将被复制而不能通过解规范化来在传统的表中实现,这不仅会导致严重的空间消耗,而且将每个邻居引用放在单独的记录中。如果节点具有多个邻接列表,每个邻接列表描述一个邻居类别,则情况会更糟。[0005]在本文中描述的主题的实现中,提供底层数据库和图之间的中间件层,以使数据库诸如关系数据库能够实现有效和高效的图处理。在一个实现中,节点的邻接列表可以被表示并且存储在关系表中用于该节点的记录的特殊字段中。取决于底层数据库,内建的或用户定义的数据类型可以用于表示邻接列表。以这种方式,图数据可以作为包含节点的局部属性和图拓扑二者的特殊表格形式被存储,而不需要附加物理联接表。[0006]在查询阶段,中间件可以将图查询转换成诸如对相关的物理表的结构化查询语言“SQL”)查询等表查询。对这些表的查询语义可以与SQL完全兼容,从而提供互操作性。具体地,作为基本运算符,可以通过动态地检索和解释源节点的邻接列表并且创建表示拓扑信息的临时联接表来完成图遍历。通过利用高速缓存局部性的优点,可以有效地实现临时联接表与汇聚表之间的连接。以这种方式,可以有效地执行图查询。此外,在一个实现中,可以通过考虑忽略关系数据库的查询引擎或优化器的拓扑知识来进一步优化转换后的表查询。[0007]本发明内容被提供以便以简化的形式介绍一些概念的选择,这些概念在下面的详细描述中进一步描述。本发明内容不旨在标识所要求保护的主题的主要特征或基本特征,也不旨在用于限制所要求保护的主题的范围。附图说明[0008]图1示出了其中可以实现本文中描述的主题的一个或多个实现的计算环境的框图;[0009]图2示出了在本文中描述的主题的一个实现中的用于数据库图处理的系统的框图;[0010]图3示出了在本文中描述的主题的一个实现中的用于将图数据存储到数据库中的方法的流程图;[0011]图4示出了在本文中描述的主题的一个实现中的用于图查询的方法的流程图;[0012]图5示出了在本文中描述的主题的一个实现中由用户定义的函数创建的临时联接表的不意图;[0013]图6示出了在本文中描述的主题的一个实现中的用于分解图模式的方法的流程图;[00M]图7示出了在本文中描述的主题的一个实现中的图模式分解的示意图;[0015]图8示出了在本文中描述的主题的一个实现中的子模式的连接的示意图;[0016]图9示出了在本文中描述的主题的一个实现中的图映射器的框图;以及[0017]图10示出了在本文中描述的主题的一个实现中的查询转换器的框图。具体实施方式[0018]现在将参考若干示例实现来讨论本文中描述的主题。应当理解,这些实现仅是为了使本领域技术人员能够更好地理解并且从而实现本文中描述的主题,而不是暗示对主题范围的任何限制。[0019]如本文中使用的,术语“包括”及其变体将被视为开放术语,意思是“包括但不限于”。术语“或”应当被视为“和或”,除非上下文清楚地另外表示。术语“基于”将被视为“至少部分基于”。术语“一个实现”和“实现”将被视为“至少一个实现”。术语“另一实现”将被视为“至少一个其他实现”。术语“第一”、“第二”、“第三”等可以用于指代不同或相同的对象。下面可以包括其他明确和隐含的定义。[0020]图1示出了其中可以实现本文中描述的主题的一个或多个实现的计算环境100的示例。计算环境100不旨在对本文中描述的主题的使用范围或功能提出任何限制,因为各种实现可以在多种通用或专用计算环境中实现。[0021]参考图1,计算环境100包括至少一个处理单元或处理器)110和存储器120。处理单元110执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力。存储器120可以是易失性存储器例如,寄存器、高速缓存、RAM、非易失性存储器例如,R0M、EEPR0M、闪存)、或这两者的某种组合。[0022]存储器120存储被称为“图转换器”170的系统或模块的至少一部分,用于使得数据库(例如,关系数据库)能够支持高效的图处理。在一个实现中,图转换器170可以被实现为例如图和底层数据库表之间的中间件。这仅是说明性的,而不暗示对本文中描述的主题的范围的任何限制。例如,在另一实现中,图转换器170可以至少部分地被实现为硬件和或固件模块。在一个实现中,例如,可以在底层数据库的内核中实现图转换器170。[0023]计算环境100可以具有附加的部件或特征。在图1所示的示例中,计算环境100包括存储装置130、一个或多个输入设备140、一个或多个输出设备150、以及一个或多个通信连接160。诸如总线、控制器、或网络等互连机构未示出)互连计算环境100的部件。通常,操作系统软件未示出)为在计算环境100中执行的其他软件提供操作环境,并且协调计算环境100的部件的活动。[0024]存储装置130可以是可移除的或不可移除的,并且可以包括计算机可读存储介质,诸如闪存驱动器、磁盘、磁带或盒式磁带、00-1?麗工0-1^、0¥0、或者可以用于存储信息并且可以在计算环境100内访问的任何其它介质。存储装置130可以存储用于图转换器170的指令的至少一部分。[0025]输入设备140可以是各种不同输入设备中的一个或多个。例如,输入设备140可以包括用户设备,诸如鼠标、键盘、轨迹球等。输入设备140可以实现一个或多个自然用户界面技术,诸如语音识别、触摸和触笔识别、与输入设备140接触以及与输入设备140相邻的手势的识别、空气手势的识别、头部和眼睛跟踪、声音和语音识别、感测用户大脑活动、以及机器智能。作为其他示例,输入设备140可以包括扫描设备;网络适配器;CDDVD读取器;或向计算环境100提供输入的另一设备。输出设备150可以是显示器、打印机、扬声器、⑶DVD写入器、网络适配器、或者从计算环境100提供输出的另一设备。输入设备140和输出设备150可以并入单个系统或设备中,诸如触摸屏或虚拟现实系统。[0026]通信连接160使得能够通过通信介质与另一计算实体通信。此外,计算环境100的部件的功能可以在能够通过有线或无线连接进行通信的单个计算设备或多个计算设备中实现。因此,计算环境100可以使用与一个或多个远程计算设备诸如手持式计算设备、个人计算机、服务器、路由器、网络PC、对等设备或另一公共网络节点)的逻辑连接在网络环境中操作。通信介质在调制数据信号中传送信息诸如数据或计算机可执行指令或请求)。调制数据信号是以编码在信号中的信息的方式设置或改变其特征中的一个或多个的信号。作为示例而非限制,通信介质可以包括用电、光、RF、红外、声学或其他载体实现的有线或无线技术。[0027]可以在计算机可读介质的一般上下文中描述主题的实现,该计算机可读介质可以是存储介质或通信介质。计算机可读存储介质是可以在计算环境内访问的任何可用存储介质,但是术语计算机可读存储介质本身不涉及被传播的信号。作为示例而非限制,利用计算环境100,计算机可读存储介质包括存储器120、存储装置130及其组合。[0028]可以在目标真实处理器或虚拟处理器上的计算环境中执行的计算机可执行指令诸如被包括在程序模块中的那些)的一般上下文中描述主题的实现。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、部件、数据结构等。程序模块的功能可以在各种实现中根据需要在程序模块之间组合或分开。程序模块的计算机可执行指令可以在本地或分布式计算环境中执行。在分布式计算环境中,程序模块可以位于本地和远程计算机存储介质二者中。[0029]图2示出了在本文中描述的主题的一个实现中的图转换器170的示例。图转换器170可以由如上所述的计算机100来实现,例如,在当前已知或将来要开发的任何数据库之上。如本文中使用的,“数据库”是指由于数据规范化要求而不能直接实现有效图处理的任何数据库。这些数据库的示例包括但不限于诸如SQL数据库等关系数据库。下面,将结合SQL数据库讨论一些实现。这仅是为了说明的目的,而没有对本文中描述的主题的范围的任何限制的建议。本文中描述的主题可以用不能直接支持高效的图数据的任何数据库来实施。[0030]参考图2,通常,图转换器170包括两个模块,即图映射器210和查询转换器220。在一个实现中,图映射器210被配置为接收存储图数据并且将图数据存储到在底层数据库中的表230中的请求。[0031]在本公开的上下文中,术语“图数据”是指表示包括多个节点和连接相应节点的一个或多个边的图的数据。节点可以具有一个或多个局部属性。可以为每个属性分配相应数据类型的值。图中的节点可以具有相同或不同的类型。作为示例,在一个应用中,可以有代表客户和雇员的两种类型的节点。雇员节点可以具有一个或多个局部属性,诸如姓名、年龄、经理等。同样,客户可以具有局部属性。具体地,在表230中的每个记录中,局部属性可以在相应字段中仅具有单个值,并且因此可以被称为“单值属性”。[0032]除了局部或单值属性之外,节点可以具有与相同或不同类型的一个或多个其他节点的关联或关系。例如,如果一个雇员和另一雇员在组织中的同一部门工作,则表示这两个雇员的节点可以连接,从而创建指示同事关系的边。作为另一示例,雇员可以与一个或多个客户具有业务关系。因此,表示雇员的节点可以连接到相关客户节点。应当理解,一个节点可以与其他节点具有多个边。因此,图的边或拓扑信息可以被认为是节点的多值属性。[0033]应当理解,在一些情况下,取决于底层数据库的配置,多值属性可以是局部属性。换言之,虽然包含对于相邻节点的引用的邻接列表可以被实现为多值非局部属性,但是可以具有多个可能值的局部属性也可以被处理为多值属性。[0034]图映射器210被配置为将图数据存储在底层数据库中的一个或多个表230其可以被称为“节点表”)中。在节点表230中,每个记录对应于图中的一个节点。例如,在一个实现中,记录可以包括用于存储相应节点的唯一标识符的、作为主键的字段。在一个实现中,标识符可以是数字。可替代地或另外地,标识符可以是任何参考字符、符号或其组合[0035]特别地,在本文中描述的主题的实现中,节点的单值和多值属性存储在单个表中。为此,在一个实现中,表230中的每个记录例如,行对应于图中的节点。记录可以包括一个或多个单值字段,每个单值字段用于存储单值属性。记录还可以具有一个或多个多值字段,每个多值字段用于存储多值属性。以这种方式,局部节点信息和拓扑信息在节点表230中共同定位。结果,不需要创建物理联接表,这有助于更快速和更有效率地进行图查询。下面将参考图3详细描述图映射器210的功能。[0036]查询转换器220被配置为接收和处理关于图数据的图查询。除了其他的以外,图查询可以涉及图遍历操作。给定源节点,图遍历操作检索并且返回图中一个或多个相邻节点的数据。作为示例,图查询可以包括但不限于模式匹配、迭代图处理诸如查找两个节点之间的最短路径和计算图节点的页面排序算法PageRank分数等。在一个实现中,查询转换器220可以支持用户或用户应用可以用来表达图查询的任何合适的图查询语言。通常,图查询语言可以被认为是扩展的SQL语言,以便在节点表上明确表达图模式。下面将讨论查询语目的不例。[0037]应当理解,底层数据库的查询引擎和或优化器可以不直接识别和支持图查询语言。在操作中,具有查询语言的知识的查询转换器220将图查询转换成对相关表230的表查询(例如,SQL查询)。查询语言的知识包括但不限于关于查询语言的规则、约束、语法和或句法的信息。之后,表查询可以由数据库的查询引擎来执行。此外,在一个实现中,查询转换器230可以利用图的拓扑知识(其忽略底层数据库的查询引擎和或优化器来优化转换后的查询。下面将例如参考图4详细描述查询转换器220的功能。[0038]现在参考图3,图3示出了用于将图数据存储到诸如SQL数据库等底层数据库中的方法300的流程图。方法300可以由如上所述的图转换器170中的图映射器210来实现。特别地,为了讨论起见,在下面的描述中可以可互换地使用表达“属性值”和“属性”。[0039]如图所示,方法300在步骤310进入,在步骤310接收存储图数据的请求。如上所述,图包括多个节点。每个节点具有至少一个单值属性和至少一个多值属性。单值属性指示节点的局部属性。多值属性可以是指示与节点相关的拓扑信息的非局部属性。更具体地,在一个实现中,多值属性可以用于指示图中与当前节点相邻的一个或多个其他节点。如上所述,如果它们在图中直接连接或相关联,则一个节点与另一节点相邻。具体地,如上所述,图中的节点可以具有或可以不具有一个或多个多值局部属性。也就是说,多值属性不一定是非局部属性。[0040]在本文中描述的主题的实现中,节点的单值和多值属性分别在步骤320和330存储到表节点表230中。具体地,在步骤320,将每个单值属性的值存储到节点表230中的相应单值字段中。在步骤330,将每个多值属性的值存储到相应的多值字段中。[0041]在一个实现中,可以将多值非局部属性的值实现为包含到相邻节点的引用的邻接列表。例如,引用可以是相邻节点的标识符。在一个实现中,相邻节点的标识符用作节点表中用于存储该相邻节点的主键。作为示例,假定标识符为“Γ的雇员与标识符为“11”和“13”的雇员相邻。因此,表示雇员“Γ的同事关系的多值属性可以实现为邻接列表Ul,13}。标识符“11”和“13”是邻接列表的原子值。除了或代替标识符,对于相邻节点的引用可以被实现为指针等。[0042]在一个实现中,邻接列表可以被格式化为由底层数据库支持的内建数据类型。例如,在某个SQL数据库中,支持数组类型。在这种情况下,节点的邻接列表可以作为数组存储在多值字段中。然而,在其他情况下,多值属性不能由底层数据库直接支持。此时,图映射器210可以生成邻接列表中的多个原子值的表示,其中表示具有由数据库支持的数据类型并且因此可以存储到表230中。例如,在一个实现中,图映射器210可以生成邻接列表中的标识符的字符串表不。例如,标识符由字符串中的预定义的分隔符或占位符分隔。在一些实现中,字符串表示可以是纯文本字符串。可替代的,在一些实现中,可以使用二进制表示来存储邻接列表。[0043]如果多值属性中的相邻节点的类型与另一多值属性中的相邻节点的类型不同,则这两个多值属性具有不同的类型。在一个实现中,不同类型的多值属性可以存储在单独的多值字段中。也就是说,节点的记录可以具有多于一个多值字段。仍然考虑上面讨论的示例,对于每个雇员,节点表230中的相应记录至少具有两个多值字段,一个多值字段用于存储多值属性“同事”(雇员-雇员),而另一多值字段用于存储多值属性“客户”(雇员-客户),其中多值属性“同事”和“客户”彼此具有不同的类型。[0044]此外应当理解,给定节点,其相邻节点可以存储在相同的节点表中,或者在不同的节点表中。例如,对于多值属性“同事”,源节点和汇聚节点都存储在用于雇员节点的同一表中。对于多值属性“客户”,源节点是雇员节点,而汇聚节点是客户节点。在这种情况下,由邻接列表标识的源节点及其相邻节点存储在不同的节点表中。具体地,应当理解,在一些情况下,一些节点可以与其他节点没有关系或边。在这种情况下,例如,多值属性的值可以设置为“空NULL”。[0045]在一个实现中,在步骤330,图映射器210可以为一个或多个多值字段创建注释。注释可以包含可以由查询转换器220在处理图查询时获得和解释的信息。例如,在一个实现中,图映射器210可以接收指示一个或多个多值属性的用户输入作为非局部属性。这样的用户输入可以被包括在图查询中。在该实现中,可以基于用户输入来创建注释以指示多值字段的使用。也就是说,注释规定相关联的字段是用于存储多值非局部属性的多值字段。注释还可以规定相关联的字段是用于存储节点的多值局部属性的多值字段。在一个实现中,可以通过在相关联的注释中包括预定义的关键字来指示字段的使用。作为示例,可以在注释中使用关键字“边”或任何其他合适的关键字。[0046]另外地或可替代地,在一个实现中,注释可以指定其中存储有在邻接列表中指示的节点的汇聚节点表。例如,在上面讨论的示例中,存储多值属性“同事”的多值字段的注释可以指示相邻节点雇员节点存储在用于雇员节点的表中,而存储多值属性“客户”的多值字段的注释可以指示相邻节点客户节点存储在用于客户节点的表中。[0047]以上注释被描述仅用于说明的目的,而不暗示对本文中描述的主题的范围的任何限制。在一个实现中,注释可以规定任何其他合适的信息。此外,在一个实现中,还可以生成用于单值字段的注释。[0048]应当理解,尽管步骤320在图3中被示出为在步骤330之前执行,但是这仅是为了说明的目的,而没有暗示对本文中描述的主题的范围的任何限制。单值和多值属性可以以任何合适的顺序或并行地存储。例如,在一个实现中,可以使用以下SQL语句来创建用于存储雇员节点的节点表,其中单值和多值属性可以一次存储到表中。[0050]在本示例中,名为“雇员节点”的所创建的表有五个字段。字段“节点ID”用于存储用作主键的雇员节点的标识符。字段“姓名”是用于存储作为雇员姓名的单值属性的单值字段。字段“客户”、“同事”和“经理”是用于存储相应多值属性的多值字段。如上所述,多值属性的值可以被实现为可以由底层数据库的内建类型(如果有的话或用户定义的表示(例如,二进制表示来表示的邻接列表。[0051]在本示例中,为每个字段创建在括号中指示的注释。例如,用于多值字段“客户”的注释“[ColumnRole:Edge,Reference:ClientNode]”规定当前字段用于存储多值属性。注释还规定,邻接列表中的节点存储在名为“客户节点”的表中。在上面的示例中,值为“边”或“属性”的关键字“ColumnRole”用于指示字段的作用。如上所述,任何其它预定义的关键字和或值也是可能的。此外,在本示例中,单值字段也与注释相关联。在替代实现中,可以仅为多值属性创建注释。这些注释将被数据库引擎忽略,但是由图映射器210存储和处理作为元数据。注释可以由查询转换器220在查询转换中访问和解释,这将在稍后讨论。[0052]作为示例,可以由以上示例语句创建的表如下所示。[0053][0054]~在一个实现中,方法300可以进行到步骤340,在步骤340可以创建用于一个或多个节点表230的视图。当应用需要不同的表示以适应其业务逻辑时,视图很有用。例如,在图转换器170中,通常存在多个节点表,每个节点表表示不同的节点类型。在每个节点表中,可以存在用于存储邻接列表的多个多值字段,每个多值字段表示不同类型的多值属性。此外,一些应用可以仅关注图拓扑并且忽略这些类型。例如,原始的页面排序算法分析图拓扑,并且仅查看节点和边。[0055]为了促进这样的应用,在一个实施例中,可以在步骤340创建视图,以将所有节点联合为一个节点表,并且将节点的所有邻接列表联合成一个列表。也就是说,在视图中,存在一个联合多值字段,其包含关于所有多值属性的信息,例如,以邻接列表的形式。在该实现中,用户应用可以在视图上执行图查询。因此,查询转换器220可以例如将图查询转换成对一个或多个相关的关系表的SQL查询。[0056]现在将讨论图查询的处理。图4示出了在本文中描述的主题的一个实现中的用于图查询的方法400的流程图。在一个实现中,方法400可以由图2所示的图转换器170中的查询转换器230来实现。[0057]方法400在步骤410进入,在步骤410接收关于图数据的图查询。如上所述,图包括多个节点,并且图中的至少一些节点可以具有单值属性和多值属性。对于每个这样的节点,单值和多值属性存储在单个节点表230中的不同字段中。[0058]在步骤410接收到的图查询可以涉及图遍历。例如,在一个实现中,图查询本身可以是从源节点到汇聚节点的遍历。源和汇聚节点在图中彼此相邻。如上所述,源节点和汇聚节点可以具有或可以不具有相同类型。或者,图查询可以是复杂的图操作,包括但不限于模式匹配、迭代图处理等。本领域技术人员将理解,复杂的图操作可以分解成一系列图遍历。因此,在下面的讨论中,为了说明的目的将描述图遍历。下面将参考图6讨论高级图操作的分解和处理。[0059]查询转换器220可以使得用户或用户应用能够使用图查询语言来表达图查询。例如,在一个实现中,图查询语言可以是扩展的SQL语言,使得用户可以通过节点表明确地表达图模式。作为示例,图遍历可以如下表示:[0060]NodeTablei-[Ει]-···_[Εκ-1]-NodeTableK[0061]其中“NodeTablei”(i=l,...,k表示节点表的别名。节点表的别名通过命名的边连接,例如以“-临]”-“的形式,其中”是表示指向汇聚节点表的邻接列表的源节点表的字段。应当理解,以上示例被描述仅用于说明的目的,而没有对本文中描述的主题的范围提出任何限制。可以结合本文中描述的主题的实现来开发和使用任何其他合适的图查询语言。[0062]响应于图查询的接收,查询转换器220将图查询转换成表查询,诸如由一个或多个SQL语句组成的SQL查询,以定位汇聚节点并且获得汇聚节点的数据。具体地,在步骤420,查询转换器220可以使用转换后的SQL查询访问存储源节点的节点表230称为“源表”),以检索对应于源节点的记录。所检索的记录至少包含存储源节点的多值属性的多值字段。在一个实现中,多值属性可以被实现为包含对于相邻节点的引用的邻接列表,如上所述。特别地,在步骤420检索的邻接列表中的节点与汇聚节点具有相同的类型。在一个实现中,查询转换器220可以基于相关联的注释来定位相关的多值字段,如上所述。[0063]在步骤430,汇聚节点位于存储汇聚节点的数据的汇聚表中,从而获得汇聚节点的数据。检索至少部分地基于多值非局部属性来进行,例如以在步骤420检索的源节点的邻接列表的形式。在一个实现中,可以使用用户定义的函数UDF或者系统提供的函数来实现。以下仅为了说明的目的来讨论UDF。具体地,查询转换器220操作以对在步骤420获得的多值属性应用UDF从而提取邻接列表中的原子值。[0064]在一个实现中,可以调用UDF以基于源节点的检索到的多值属性来创建使源节点与其相邻节点相关联的联接表。作为示例,在一个实现中,可以使用以下示例代码片段来定义名为“Transpose”的UDF:[0065][0066]该代码片段将UDF定义为枚举器,查询引擎重复地调用枚举器以迭代整个列表并且将来自列表的每个元素插入到一列表中。由Transpose返回的表具有例如名为“Sink”的单个列。[0067]图5图示示出了UDF如何工作的示意图。在本示例中,交叉应用CROSSAPPLY运算符与UDF结合使用,以将所有检索到的节点记录转换成使检索到的节点与其相邻节点相关联的两列表。具体地,在调用500中,CROSSAPPLY运算符用作嵌套循环联接,并且从外部表EmployeeNode510为每个记录或行调用一次UDFTransposeClients。如上所述,“客户”列中的每个字段可以存储邻接列表的二进制表示。由CROSSAPPLY运算符对UDF进行的每次调用将导致使源节点与邻接列表中的相邻节点之一相关联的记录。由多个这样的调用产生的记录可以被级联为联接表520。[0068]如图5所示,由UDF和CROSSAPPLY运算符创建的联接表520具有来自源节点表的列“EmployeeNode”和包含汇聚表中的相邻节点的主键的“Sink”列。在所示示例中,仅投影两个列。在其他实现中,可以通过UDF投影多个多值字段以创建具有更多列的联接表。[0069]在一个实现中,可以通过使用转换后的SQL查询中的联接表520和汇聚表(图中未示出)之间的联接从汇聚表中检索汇聚节点的数据。使用UDFTranspose从雇员节点到客户节点的示例性完整查询遍历如下所示:[0070][0071]由CROSSAPPLY运算符返回的〈NodelD,Sink〉对使雇员节点与其相邻节点相关联。然后,通过使用名为“ClientNode”的汇聚节点表和联接表之间的联接,检索汇聚节点的记录。[0072]在上述SQL语句的物理执行中,满足条件enode.Name=“JohnDoe”的来自表EmployeeNode的雇员节点可以通过表扫描或索引查找来检索,这取决于数据库查询优化器所做的决定。然后,执行CROSSAPPLY运算符的执行。CROSSAPPLY运算符为来自表EmployeeNode的每个满足的节点行调用UDFTranspose。最后,汇聚表ClientNode和Transpose之间的联接使用来自邻接列表的客户节点的标识符来定位他们的记录。[0073]应当理解,在本文中描述的主题的实现中,节点记录通常不超过几个磁盘页或存储器页。此外,当从源表检索到时,节点记录将其加载到片上高速缓存中。因此,评估UDF通常只消耗处理器计算。与传统的物理联接表相比,这样的高速缓存局部性确保了高效率。[0074]此外,在图查询被转换成对关系表的SQL查询的那些实现中,SQL查询优化器可以产生执行高效的计划。例如,可以使用散列联接或嵌套循环联接来执行检索客户节点的以上转换后的SQL查询中的最终联接。散列联接是有效的,特别是当需要检索大量客户节点以及扫描表和构建散列表的分摊成本小于随机查找的成本时。[0075]具体地,在一个实现中,由UDF创建的联接表520可以是在查询运行时的临时联接表。也就是说,联接表520不会在底层存储器中持续保存。实际上,在一个实现中,联接表520可以在执行中被流水线化。也就是说,可以在联接表520和汇聚表之间的联接中使用之后,将联接表520中的每个记录去除。以这种方式,可以进一步提高查询效率,而不会浪费资源。[0076]本文中描述的主题的实现可应用于各种类型的图查询。现在将描述图模式匹配作为示例。图中的模式是由图中的一个或多个路径组成的子图。例如,路径是通过边连接的节点表的序列。在操作中,用户应用可以输入模式,并且图转换器170返回图中匹配输入模式的一个或多个模式。为此,查询转换器220可以将模式分解为一系列子模式,并且然后将每个子模式转换成CROSSAPPLY运算符的序列,并进行联接,如以上参考图4所述。[0077]在一个实现中,匹配子句可以以简单的方式转换成一系列常规表联接。例如,如上所述,可以通过将存储邻接列表的每个多值列规范化为两列表来完成转换。但是,这种简单的转换可能不会导致优化的SQL查询。为了利用高速缓存局部性,在一个实现中,查询转换器220在转换中搜索模式的最佳分解。图6示出了在本文中描述的主题的一个实现中的用于图模式的最佳分解的方法600的流程图。[0078]方法600在步骤610进入,在步骤610接收对图模式匹配的请求。在一个实现中,用户可以使用由查询转换器220支持的图查询语言来输入模式匹配查询。作为示例,在一个实现中,图匹配可以表达为具有指定的图模式的添加的MATCH子句的SELECT-FROM-WHERE查询块。路径可以表达为-[EdgeName]_,其中EdgeName是表示指向汇聚节点表的邻接列表的源节点表的列。作为示例,图5所示的节点表上的示例查询如下:[0079][0080]在本示例中,FROM子句照常处理节点表和常规表,并且为每个表分配别名。在MATCH子句中使用节点表的别名来指定模式。在本示例中,模式是连接两个雇员节点和一个客户节点的三角形,其在图7中被描绘模式700。应当理解,上述示例被讨论仅为了说明的目的,而没有对本文中描述的主题的范围提出任何限制。图模式匹配可以以其他合适的方式来表达。[0081]方法600进行到步骤620,在步骤620将规定的模式分解为一个或多个子模式,从而获得候选分解方案。通常,可以根据要求和应用来选择子模式。在一个实现中,可以使用一高度树one-heighttree作为基本分解子模式来确保高速缓存局部性。如上所述,节点的邻接列表和局部属性在节点表中共同定位。当节点记录被加载到片上高速缓存中时,其相邻节点的标识符可以由CROSSAPPLY运算符来重构,这主要涉及处理器计算。因此,如果选择一高度树作为基本分解子模式,则可以通过根节点表的单次扫描或查找来对子模式进行评估,而不需进行其他数据访问。也就是说,通过使用一高度树来覆盖整个图模式,与其他分解方案相比,查询的执行可以利用高速缓存局部性并且有效地避免了不必要的连接。当然,没有必要使用一高度树作为基本分解子模式。可以使用任何其他合适的结构诸如单个边作为子模式。[0082]作为示例,图7示出了模式分解的示例。在上述示例图模式匹配中指示的模式700被分解成两个子模式710和720。子模式710和720中的每个是一高度树。分解后的子模式710和720的转换后的SQL查询如下:[0083][0084]仍然参考图6,方法600进行到步骤630以确定在步骤620确定的候选分解方案的成本。在一个实现中,成本包括与候选分解产生的各个子模式相关联的子模式成本。在一个实现中,图中的子模式的基数可以用于测量与该子模式相关联的各个成本。该基数定义为通过匹配图中的子模式所返回的结果的数目。[0085]如上所述,在一个实现中,子模式可以是一高度树。在这个实现中,根实例的数目是满足谓词如果有的话的相应节点表中的行数。与根实例相关联的叶子实例的数目可以由根和叶子之间的平均程度来确定。具体地,如果一高度树子模式中有多个叶子,则来自不同分支的叶子实例将导致结果表中的笛卡尔乘积。为了讨论,一高度树子模式被表不为〈[li,...,ln],其中r表不根,而h表不叶子。一高度树模式的输出表的大小是:[0086][0087]其中Rr表示根r的节点表,pi,...,pm表示与根r相关联的或者联接的或者分离的谓词,,dr—h表示从图中的根r到叶子I1的平均程度。[0088]在一个实现中,|0plpmRrI可以由估计节点表大小和谓词选择性的底层数据库来给出。两种类型的节点之间的平均程度CKr^l1是可以由图转换器170维持的图统计量。它可以通过对图计算一次以及周期性地重新计算,例如,响应于数据分布的动态变化。[0089]除了子模式成本之外,要在步骤630确定的成本可以包括与两个或多个子模式的连接相关联的连接成本。为了便于讨论,将描述两个子模式的连接,其中一高度树用作子模式。可以通过两种类型的联接来连接两个子模式,如图8所示。[0090]第一类型的联接如图8中的810所示将子模式710的叶子连接到另一子模式720的根。在物理上,它是存储一个节点表的多值属性相邻列表的列与存储另一节点表的主键的列之间的联接。子模式710的基数可以是已知的,如上所述。联接之后的结果大小由以下各项来确定:(1邻接列表中有多少个元素在联接中幸存,以及2从这些幸存的节点开始,有多少个新节点可以在子模式720的分支之后达到。[0091]假定每个邻接列表中的每个元素都指向目标类型的有效节点。则来自邻接列表的节点只能在不满足子模式720的根上的谓词的情况下才能被消除。消除率由谓词的选择性给出,其可以通过底层数据库的查询优化器来获得。另外,新的可访问节点的数目由子模式720的分支的平均程度确定。这些参数是图统计量,并且可以由图转换器170收集。[0092]第一类型联接的结果基数可以正式地描述如下。令是在和r2上联接的两个一高度树子模式。连接成本可以如下测量:[0093][0094]第二类型的联接连接来自两个子模式的两个叶子,如图8中的连接820所示。它可以被认为是两个邻接列表的交叉点。估计交叉点的基数需要两个列表的数据分布。然而,这种知识在底层数据库中不能立即可用,例如,如果邻接表以二进制格式编码。在一个实现中,信息可以由图转换器170明确地维护。[0095]为此,可以使用采样来构建节点表的邻接列表列的直方图。更具体地,可以从节点表米样小部分的节点,并且将它们的目标邻接列表转换成两列表例如,图5中的表520,边的源和汇聚节点之间的关系的表格表示。然后可以利用底层数据库的查询优化器来计算第二类型的联接的基数作为连接成本。[0096]返回图6,在步骤640,查询转换器220检查是否考虑了所有可能的候选分解方案。应当理解,在实践中,通常有多种方式将图模式分解为子模式。方法600例如通过搜索算法来列举各种分解方案,以便选择最优分解方案,使得相应的表查询能够被查询引擎有效率地执行。[0097]具体地,在一个实现中,图的拓扑知识可以用于确定在步骤640有多少候选分解方案可用。如上所述,MATCH子句中的图模式可以由图中的一个或多个路径定义。这与SQL中的表连接图类似。但是,与在搜索最优执行计划时可以由数据库查询优化器分解为不同子表达式的表连接图不同,数据库优化器无法更改转换后的CR0SSAPPLY序列,因为图的语义将被查询引擎忽略。[0098]图的拓扑知识可以用于优化表查询。作为示例,这种知识包括反向边。已知,图节点通常是高度连接的。在某些情况下,通常两个节点通过有向边相互指向彼此。在这种情况下,当需要检索两个节点时,从源节点到汇聚节点的遍历等效于从汇聚节点到源节点的通过后向边的遍历。作为示例,图遍历NodeTablei-[Edgei]_NodeTable2可以由查询转换器220转换成以下SQL查询语句:[0099]NodeTablelASNi[0100]CROSSAPPLYTransposeNi.EdgeiASEi[0101]JOINNodeTable2ASN2ONEi-Sink=N2-NodeID[0102]假定表NodeTable2包含指向表NodeTable1中的节点的多值字段Edge2。则遍历图NodeTable〗-[Edge2]-NodeTablei可以转换成以下SQL查询:[0103]NodeTable2ASN2[0104]CROSSAPPLYTransposeN2-Edge2ASE2[0105]JOINNodeTablelASNiONE2-Sink=Ni-NodeID[0106]可以理解,上述两个SQL查询语义上彼此相当。然而,底层数据库(例如,SQL数据库)的查询优化器并不知道这样的等价性,并且在SQL查询优化阶段无法将查询从一种形式重写为另一种形式,从而限制候选执行计划的空间。[0107]当转换成表查询时,图转换器170更具体地,查询转换器220可以考虑这样的等同性。特别地,可以基于模式中的边的反向边来获得至少一个分解方案。为了讨论的目的,参考图7所示的示例。如果确定从节点702到节点704的遍历在语义上等同于从节点704到节点702的遍历,则可以通过反转从节点702到704的有向边来使得更多的候选分解方案可用。以这种方式,可以获得更好的分解方案,使得可以由查询引擎有效地处理对关系表的结果查询。[0108]仍然参考图6,如果在步骤640确定存在尚未被考虑的剩余候选分解方案,则方法600返回到步骤620以获得其中之一并且在步骤630计算相关联的成本。另一方面,如果考虑了所有可能的候选分解方案,则方法600进行到步骤650,在步骤650基于成本来选择候选分解方案之一。例如,在一个实现中,可以选择具有足够低的成本例如,低于门限)的候选分解方案。具体地,在一个实现中,可以在步骤650选择最小化成本的候选分解方案。然后在步骤660,根据在步骤650选择的分解方案来分解模式,从而获得子模式的集合。[0109]除了模式分解以外,或代替模式分解,拓扑知识可以用于促进其他图查询的优化。例如,除了作为图处理的结构单元的图模式匹配之外,另一种类型的常见图处理是迭代图处理。迭代图处理是图计算模型,它为每个节点分配状态并且使用节点邻居的状态持续更新它。计算在固定次数的迭代之后或一些参数收敛之后终止。迭代图处理的示例包括但不限于最短路径、页面排序等。[0110]作为示例,最短路径算法旨在找到两个节点之间的最短路径。在一个实现中,查询转换器220可以使用两个表来优化最短路径查询。特别地,查询转换器220可以维护用于从节点Ostart开始的路径的名为FromSourcesink,dist的表、以及用于在以节点Oend结尾的路径的名为ToSinksource,dist的表。在每一轮迭代中,扩展来自其中一个的路径。在迭代中选择表取决于诸如表大小等参数。当然,在另一实现中,可以使用更复杂的参数诸如邻域统计用于决策。[0111]查询转换器220可以操作以选择发现较少路径的遍历方向。一旦选择了方向,扩展查询、即FromSource或ToSink和AllNodes之间的联接可以与MIN聚合相结合以适应预聚合优化。在一轮迭代结束时,将FromSource和ToSink联接。一旦该联接产生某个某些)结果,则迭代终止。以这种方式,代替填充所有路径,该执行仅填充从Ostart开始或以Oend结尾的路径。[0112]此外,与上述的模式分解类似,寻找最短路径可以从Ostart向前追踪或从Oend向后追踪。通过表FromSourcesink,dist和ToSinksource,dist,可以选择导致稀疏区域的方向,以便执行可以访问更少的节点。从查询处理的角度来看,它相当于选择导致更少联接选择性的联接顺序。[0113]图9示出了在本文中描述的主题的一个实现中的图映射器210的框图。如图所示,在一个实现中,图映射器210包括请求接收单元910,被配置为接收存储表示包括多个节点的图的数据的请求,节点中的至少一个具有单值属性和多值属性。多值属性可以是非局部属性,并且包括对于至少一个相邻节点的引用。[0114]数据存储在数据库中的表中,其中表中的每个记录对应于一个节点。为此,图映射器210可以包括被配置为将单值属性存储在单值字段中的单值属性存储单元920和被配置为将多值属性存储在多值字段中的多值属性存储单元930。在一个实现中,多值属性存储单元930被配置为在不同的多值字段中存储不同类型的多值属性。[0115]在一个实现中,图映射器210包括注释生成单元,被配置为生成用于多值字段的注释,注释指示多值字段用于存储多值属性。可以基于指示一个或多个多值属性是非局部属性的用户输入来创建注释。例如,用户输入可以被包括在图查询中。在一个实现中,注释还指示存储至少一个相邻节点的汇聚表。[0116]在一个实现中,多值属性包括多个原子值。图映射器210可以包括被配置为生成由数据库支持的数据类型中的多个原子值的表示的表示生成单元。在该实现中,多值属性存储单元930被配置为将所生成的表示存储在多值字段中。[0117]在一个实现中,多值属性存储单元930被配置为在不同的多值字段中存储不同类型的多值属性。[0118]在一个实现中,图映射器210包括被配置为生成用于图的至少一个视图的视图生成单元,视图包括包含第一和第二多值属性的联合多值字段。[0119]图10示出了在本文中描述的主题的一个实现中的查询转换器220的框图。查询转换器220包括图查询接收单元1010,被配置为接收关于表示包括多个节点的图的数据的图查询,图查询涉及从源节点到与源节点相邻的汇聚节点的遍历;被配置为从关系数据库中的源表检索与源节点相对应的记录的属性检索单元1020,记录包含存储源节点的多值非局部属性的多值字段,多值非局部属性包括对源节点的至少一个相邻节点的引用;以及被配置为基于源节点的多值非局部属性来从汇聚表获得汇聚节点的数据的数据获取单元1030。[0120]在一个实现中,数据获取单元1030包括被配置为创建使源节点和对至少一个相邻节点的引用相关联的联接表的联接表创建单元。在该实现中,可以生成具有联接表和汇聚表之间的联接的表查询。在一个实现中,数据获取单元1030被配置为根据多值字段的注释识别多值字段用于存储多值非局部属性,并且被配置为通过关于源节点的多值非局部属性调用预定义的函数诸如UDF或系统定义的函数来创建联接表。另外地或可替代地,在一个实现中,数据获取单元1030被配置为通过在记录被用于联接表和汇聚表之间的联接中之后,去除联接表中的记录来流水线联接表。当然,永久联接表也是可能的。[0121]具体地,在一个实现中,图查询被转换成对源表和汇聚表的表查询。然后,转换后的表查询执行源节点的多值非局部属性的检索和汇聚节点的数据的获取。[0122]在一个实现中,图查询涉及要在图中匹配的模式。查询转换器220可以包括:被配置为获得模式的多个候选分解方案的候选获取单元,候选分解方案中的每个导致多个子模式;被配置为确定每个候选分解方案的成本的成本确定单元,成本包括与候选分解方案产生的子模式相关联的子模式成本以及与子模式的连接相关联的连接成本;被配置为选择成本低于预定门限的候选分解方案之一例如,具有最低成本的候选分解方案的分解方案选择单元;以及被配置为根据所选择的候选分解方案来分解模式的分解单元。[0123]在一个实现中,成本确定单元被配置为通过确定图中的子模式的基数来确定与子模式相关联的子模式成本。在一个实现中,候选获取单元被配置为基于模式中的边的反向边来获得候选分解方案中的至少一个。[0124]在一个实现中,图查询涉及对于图的迭代处理。查询转换器220可以包括:被配置为获得关于图的拓扑知识的拓扑知识获取单元,拓扑知识对于数据库是不可用的;以及被配置为至少部分地基于拓扑知识来优化迭代处理的查询优化单元。[0125]本文中描述的功能至少部分地由一个或多个硬件逻辑部件来执行。例如但不限于,可以使用的说明性类型的硬件逻辑部件包括现场可编程门阵列FPGA、专用集成电路ASIC、专用标准产品ASSP、片上系统系统SOC、复杂可编程逻辑器件CPLD等。[0126]本文中描述的主题的各种实现可以在硬件或专用电路、软件、逻辑或其任何组合中实现。一些方面可以在硬件中实现,而其他方面可以在可以由控制器、微处理器或其他计算设备执行的固件或软件中实现。虽然本文中描述的主题的实现的各个方面被示出和描述为框图、流程图或使用某种其他图形表示来示出和描述,但是应当理解,作为非限制性示例,本文中描述的框、装置、系统、技术或方法可以在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备、或者其某种组合中实现。[0127]作为示例,可以在目标真实或虚拟处理器上的设备中执行的机器可执行指令诸如被包括在程序模块中的那些)的一般上下文中描述主题的实现。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、部件、数据结构等。程序模块的功能可以在各种实现中根据需要在程序模块之间组合或分开。程序模块的机器可执行指令可以在本地或分布式设备中执行。在分布式设备中,程序模块可以位于本地和远程存储介质中。[0128]用于执行本文中描述的主题的方法的程序代码可以以一种或多种编程语言的任何组合来编写。这些程序代码可以被提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器或控制器,使得程序代码在由处理器或控制器执行引起在流程图和或框图中规定的功能操作被实现。程序代码可以完全在机器上执行,部分地在机器上执行,作为独立的软件包执行,部分地在机器上并且部分地在远程机器上执行,或者完全在远程机器或服务器上执行。[0129]在本公开的上下文中,机器可读介质可以是可以包含或存储由或结合指令执行系统、装置或设备使用的程序的任何有形介质。机器可读介质可以是机器可读信号介质或机器可读存储介质。机器可读介质可以包括但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或装置、或者上述的任何合适的组合。机器可读存储介质的更具体的示例将包括具有一条或多条电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器RAM、只读存储器ROM、可擦除可编程读取EPROM或闪速存储器)、光纤、便携式光盘只读存储器CD-ROM、光存储器件、磁存储器件、或者上述的任何合适的组合。[0130]此外,虽然以特定顺序描绘操作,但是这不应当被理解为要求以所示的特定顺序或按顺序执行此类操作,也不应当被理解为执行所有所示的操作以获得期望的结果。在某些情况下,多任务和并行处理可能是有利的。同样地,虽然上述讨论中包含若干具体的实现细节,但是这些不应当被解释为对本文中描述的主题的范围的限制,而是作为对可以特定于特定实现的特征的描述。在单独实现的上下文中描述的某些特征也可以在单个实现中以组合方式实现。相反,在单个实现的上下文中描述的各种特征也可以分开地或以任何合适的子组合在多个实现中实现。[0131]虽然已经以特定于结构特征和或方法动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上述具体特征或动作。相反,上述具体特征和动作被公开作为实现权利要求的示例形式。

权利要求:1.一种计算机实现的系统,包括:图映射器,被配置为将表示图的数据存储到关系数据库中的第一表中,所述图中的每个节点具有单值属性和多值属性,所述多值属性是非局部属性并且包含对至少一个相邻节点的引用,所述映射器被配置为通过以下方式将每个节点存储在所述第一表中的相应记录中:将所述单值属性存储在单值字段中,以及将所述多值属性存储在多值字段中;以及查询转换器,被配置为:接收关于所述图的图查询,所述查询包括从第一节点到与所述第一节点相邻的第二节点的遍历,以及将所述图查询变换成对所述第一表和第二表的结构化查询语言(SQL查询,所述SQL查询从所述第一表检索所述第一节点的所述多值属性并且从所述第二表获取所述第二节点的数据。2.根据权利要求1所述的系统,其中所述查询转换器被配置为生成所述SQL查询,所述SQL查询对于所述第一节点的所述多值属性调用预定义的函数以创建临时联接表,所述联接表使所述第一节点与所述至少一个相邻节点相关联。3.根据权利要求2所述的系统,其中所述查询转换器被配置为生成所述SQL查询,所述SQL查询包括所述临时联接表与所述第二表之间的联接。4.根据权利要求1所述的系统,其中所述图查询包括要在所述图中匹配的模式,并且其中所述查询转换器被配置为:获取用于所述模式的分解的多个候选方案,所述候选方案中的每个候选方案产生多个子模式;确定用于所述候选方案中的每个候选方案的成本,所述成本包括与从所述候选方案产生的各个子模式相关联的子模式成本以及与所述子模式的连接相关联的连接成本;以及根据所述候选方案中具有最小化成本的候选方案来分解所述模式。5.根据权利要求1所述的系统,其中所述多值属性包括包含对所述至少一个相邻节点的所述引用的邻接列表。6.根据权利要求5所述的系统,其中所述邻接列表是第一邻接列表并且所述多值字段是第一多值字段,其中所述图中的每个节点还具有与所述第一邻接列表不同类型的第二邻接列表,并且其中所述图映射器还被配置为:对于所述图中的每个节点,将所述第二邻接列表存储在相应记录中的第二多值字段中,所述第二多值字段与所述第一多值字段分离。7.—种计算机实现的方法,包括:接收存储表示包括多个节点的图的数据的请求,所述节点中的至少一个节点具有单值属性和多值属性,所述多值属性是非局部属性并且包括对至少一个相邻节点的引用;以及将所述数据存储在关系数据库中的表中,所述表中的每个记录对应于所述节点中的一个节点,所述存储包括通过以下方式将所述节点中的所述至少一个节点存储在所述相应记录中:将所述单值属性存储在单值字段中,以及将所述多值属性存储在多值字段中。8.根据权利要求7所述的方法,还包括:接收指示所述多值属性是非局部属性的用户输入;基于所述用户输入来生成用于所述多值字段的注释,所述注释指示所述多值字段被用于存储所述多值属性。9.根据权利要求8所述的方法,其中所述注释还指示存储所述至少一个相邻节点的汇聚表。10.根据权利要求7所述的方法,其中所述多值属性包括多个原子值,并且其中存储所述多值属性包括:生成具有由所述关系数据库支持的数据类型的所述多个原子值的表示;以及将所生成的表示存储在所述多值字段中。11.根据权利要求7所述的方法,其中所述多值属性是第一多值属性并且所述多值字段是第一多值字段,其中所述节点中的所述至少一个节点还具有与所述第一多值属性不同类型的第二多值属性,并且其中存储所述数据还包括:将所述第二多值属性存储在所述相应记录中的第二多值字段中,所述第二多值字段与所述第一多值字段分离。12.根据权利要求11所述的方法,还包括:生成用于所述图的视图,所述视图包括包含所述第一多值属性和所述第二多值属性的联合多值字段。13.—种计算机实现的方法,包括:接收关于表示包括多个节点的图的数据的图查询,所述图查询涉及从源节点到与所述源节点相邻的汇聚节点的遍历;从关系数据库中的源表检索与所述源节点相对应的记录,所述记录包含存储所述源节点的多值非局部属性的多值字段,所述多值非局部属性包括对所述源节点的至少一个相邻节点的引用;以及基于所述源节点的所述多值非局部属性来从汇聚表获取所述汇聚节点的数据。14.根据权利要求13所述的方法,其中获取所述汇聚节点的所述数据包括:创建使所述源节点与对所述至少一个相邻节点的所述引用相关联的联接表;以及通过所述联接表与所述汇聚表之间的联接来获取所述汇聚节点的数据。15.根据权利要求14所述的方法,其中创建所述联接表包括:根据用于所述多值字段的注释来识别所述多值字段被用于存储所述多值非局部属性;以及通过关于所述源节点的所述多值非局部属性调用预定义的函数来创建所述联接表。16.根据权利要求14所述的方法,还包括:响应于接收到所述图查询,将所述图查询转换成对所述源表和所述汇聚表的表查询以用于所述检索和所述获取。17.根据权利要求13所述的方法,其中所述图查询包括要在所述图中匹配的模式,所述方法还包括:获取用于所述模式的分解的多个候选方案,所述候选方案中的每个候选方案产生所述模式的多个子模式;确定用于所述候选方案中的每个候选方案的成本,所述成本包括与从所述候选方案产生的各个子模式相关联的子模式成本以及与所述子模式的连接相关联的连接成本;选择所述候选方案中具有低于预定义的门限的所述成本的候选方案;以及根据所选择的候选方案来分解所述模式。18.根据权利要求17所述的方法,其中确定所述成本包括:通过计算子模式在所述图中的基数来确定与所述子模式相关联的子模式成本。19.根据权利要求17所述的方法,其中获取所述多个候选方案包括:基于用于所述模式中的边的反向边来获取所述候选方案中的至少一个候选方案。20.根据权利要求13所述的方法,其中所述图查询涉及对于所述图的迭代处理,所述方法还包括:获取关于所述图的拓扑知识,所述拓扑知识与所述关系数据库隔离;以及至少部分基于所述拓扑知识来优化所述迭代处理。

百度查询: 微软技术许可有限责任公司 数据库中的图处理

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。