CN106462625A - 针对大型图表的实时所保存查询更新 - Google Patents
针对大型图表的实时所保存查询更新 Download PDFInfo
- Publication number
- CN106462625A CN106462625A CN201580030355.8A CN201580030355A CN106462625A CN 106462625 A CN106462625 A CN 106462625A CN 201580030355 A CN201580030355 A CN 201580030355A CN 106462625 A CN106462625 A CN 106462625A
- Authority
- CN
- China
- Prior art keywords
- constraint
- inquiry
- node
- preserved
- state
- 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
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2393—Updating materialised views
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了一种用于响应于图表更新而自动地更新用于图表的所保存的查询结果的系统。所述系统能够响应于对数据图表的更新而识别目标约束。目标约束指定数据图表中的包括在更新中所指定的边缘的路径。系统能够通过经由路径遍历图表来确定用于目标约束的状态,并且基于所述状态确定用于包括约束的第一查询的经叠缩的定义指示成员节点是响应于第一查询。系统然后能够根据经叠缩的定义使用在遍历期间所识别的成员节点来更新用于第一查询的所保存的查询结果。
Description
相关申请的交叉引用
本申请要求2014年6月17日提交的题为“REAL-TIME SAVED-QUERY UPDATES FOR ALARGE GRAPH”的美国非临时专利申请No.14/306,969的优先权,该专利申请的全部内容通过引用合并于此。
背景技术
基于大型图表的知识库表示与世界有关的实际信息。例如,在数据图表中,可将实体(诸如人、地点、短语、单词、类别、事实、东西、概念等)存储为节点,并且节点之间的边缘(edge)可指示实体之间的关系。这样的数据图表的基本单元可以是包括两个节点或实体以及边缘标签的三元组。第一节点有时被称为源或主语节点(subject node),并且第二节点有时称为目标或对象节点(object node)。当然,除识别主语、谓语以及对象之外,三元组进一步可包括附加信息,诸如与实体和/或关系有关的元数据。
用户可以定义用于图表的查询或集合。集合或查询定义节点必须满足以响应于查询而成为节点集合的成员的约束。所述约束通常指定节点必须或不必具有什么关系以成为查询结果的成员,例如集合的成员。这样的查询(即,集合)在搜索、数据挖掘、广告定向、推荐系统等中被广泛地使用,并且成员资格常常被存储,因为计算成员资格在大型图表中是昂贵的。但是随着节点和关系被添加到图表或从图表删除,所保存的成员可能变得过时,尤其是在被频繁地更新的大型图表中。
发明内容
某些实施方式使得系统能够随着边缘被更新(例如,随着三元组被添加到基于图表的数据存储或从其删除)而实时地更新所保存的查询结果。实时可以包括短延迟(例如,小于一分钟),以允许系统按三元组的源节点将更新分组。查询可由约束定义,其识别节点在图表中必须具有(或不具有)以有资格作为用于所保存的查询的结果的性质或关系。所保存的查询可由约束表达式定义,其是被逻辑操作结合的一系列约束,换言之,约束的布尔表达式。所述系统可包括被按边缘索引的约束的索引。所述系统可使用索引来确定哪些约束与来自已更新三元组的边缘匹配,因此识别用于所述三元组的目标约束。所述系统使用目标约束来高效地确定哪些所存储的查询结果受到更新的影响以及所述更新是否导致对结果的改变。通过按主语将更新分组,系统可再使用在识别和评估受到更新影响的查询结果时的工作,例如在图表中的向前和向后行进。
可以在包括至少一个处理器和一个或多个存储器的系统中体现本公开的一个方面。一个或多个存储器可存储包括被边缘连接的节点和多个所保存的查询的数据图表,每个查询由将被满足以实现在用于查询的查询结果中的成员资格的一个或多个约束来定义,每个约束指定边缘中的至少一个。一个或多个存储器还可存储指令,所述指令在被所述至少一个处理器执行时使得计算机系统执行操作。所述操作可包括响应于利用源节点、更新边缘以及目标节点来更新数据图表的操作而识别目标约束,所述目标约束指定包括更新边缘的路径,并且所述目标约束属于所述多个所保存的查询的第一所保存的查询。所述操作还可包括评估用于成员节点的目标约束以通过经由目标约束的路径遍历图表来确定用于目标约束的状态,基于所述状态来确定用于第一所保存的查询的经叠缩(collapsed)的定义是否指示成员节点是响应于或不响应于第一所保存的查询,以及在经叠缩的定义指示成员节点是响应或不响应的情况下根据经叠缩的定义而利用成员节点来更新第一所保存的查询的所保存的查询结果。
所述系统可以包括以下特征中的一个或多个。例如,目标约束可以是第一目标约束,并且所述操作还可包括识别属于第一所保存的查询的第二目标约束,所述第二目标约束指定包括更新边缘的路径,所述第二目标约束具有比第一目标约束的路径长度更长的路径长度;以及将用于第二目标约束的状态设置成指示第二目标约束未解算的状态。此外,所述状态可以是第一状态,并且所述操作还可包括基于第一状态而确定用于第一所保存的查询的经叠缩的定义未能指示成员节点是响应于或不响应于第一所保存的查询,评估用于成员节点的第二目标约束以通过经由第二目标约束的路径遍历图表来确定用于第二目标约束的第二状态,基于第一状态和第二状态而确定用于第一查询的经叠缩的定义是否指示成员节点是响应于或不响应于第一所保存的查询,以及在经叠缩的定义指示成员节点是响应或不响应的情况下根据经叠缩的定义而利用成员节点来更新第一所保存的查询的所保存的查询结果。
作为另一示例,一个或多个存储器还可按边缘来存储约束的索引,所述索引被用来识别目标约束。作为另一示例,所述操作还可包括存储数据图表的遍历的结果,并且使用所存储的结果来评估指定包括目标约束路径的路径的第二目标约束。作为另一示例,更新可以是第一更新,并且所述操作可包括存储数图表的遍历的结果,并且当对数据图表的后续更新包括与第一更新的源节点不同的源节点时删除所存储的结果。
作为另一示例,目标约束可以是第一目标约束,并且状态可以是第一状态且所述操作可包括将图表的遍历的结果存储在存储器中;识别用于第一查询的第二目标约束,所述第二目标约束具有包括第一目标约束的路径的路径;以及在评估第二目标约束时使用所存储的遍历的结果以确定用于第二目标约束的第二状态。所述操作可进一步包括基于第一状态和第二状态而确定用于第一所保存的查询的经叠缩的定义是否指示成员节点是响应于或不响应于第一所保存的查询,以及在经叠缩的定义指示成员节点是响应或不响应的情况下根据经叠缩的定义而利用成员节点来更新第一所保存的查询的所保存的查询结果。
作为另一示例,目标约束可以是第一目标约束,并且所述操作还可包括识别多个目标约束,所述第一目标约束是所述多个目标约束中的一个,所述多个目标约束是用于至少两个查询,并且所述第一所保存的查询是所述至少两个查询中的一个。所述操作还可包括智能地评估所述多个目标约束以便以较长的路径长度延迟针对目标约束的遍历。
在另一方面,一种计算机实现方法包括使用至少一个处理器来识别目标约束,所述目标约束指定包括在对数据图表的更新中所指定的边缘的数据图表中的路径,所述识别被所述更新触发;以及使用所述至少一个处理器通过经由路径遍历图表来确定用于目标约束的状态。所述方法还包括基于所述状态而确定用于包括约束的第一查询的经叠缩的定义指示成员节点响应于第一查询;以及根据经叠缩的定义使用在遍历期间所识别的成员节点来更新用于第一查询的所保存的查询结果。在某些实施方式中,使用多个约束的索引来识别目标约束,所述索引是按边缘来组织的。当更新包括在源节点与目标节点之间添加更新边缘时,根据经叠缩的定义来更新所保存的查询结果包括向所保存的查询结果添加成员节点。当更新包括在源节点与目标节点之间移除更新边缘时,根据经叠缩的定义来更新所保存的查询结果包括保持保存的查询结果。
本方法可以包括以下特征中的一个或多个。例如,所述目标约束可以是第一目标约束,并且所述方法进一步包括:识别属于第一查询的第二目标约束,所述第二目标约束指定包括更新边缘的路径,所述第二目标约束具有比第一目标约束的路径长度更长的路径长度;以及将用于第二目标约束的状态设置成指示第二目标约束未解算的状态。在某些实施方式中,所述状态可以是第一状态,并且所述方法进一步包括基于第一状态而确定用于第一查询的经叠缩的定义未能指示成员节点是响应于或不响应于第一查询,评估用于成员节点的第二目标约束以通过经由第二目标约束的路径遍历图表来确定用于第二目标约束的第二状态,基于第一状态和第二状态来确定用于第一查询的经叠缩的定义指示成员节点响应于第一查询;以及根据经叠缩的定义而利用成员节点来更新第一查询的所保存的查询结果。
作为另一示例,目标约束可以是第一目标约束,并且状态可以是第一状态且所述方法还包括存储图表的遍历的结果;识别用于第一查询的第二目标约束,所述第二目标约束具有包括第一目标约束的所述路径的路径;以及在评估第二目标约束时使用所存储的遍历的结果以确定用于第二目标约束的第二状态。在这样的实施方式中,确定用于第一查询的经叠缩的定义指示成员节点响应于第一查询是基于第一状态和第二状态。
作为另一示例,所述方法还可包括按源节点将对数据图表的多个更新分组,所述多个更新在相互的五分钟内发生,并且对数据图表的更新是所述多个更新中的一个,其中,识别目标约束是在分组之后实时地发生。
在另一方面,一种方法包括使用至少一个处理器来识别目标约束,所述目标约束响应于利用源节点、更新边缘以及目标节点来更新数据图表的操作而指定包括更新边缘的数据图表中的路径。所述方法还包括使用所述至少一个处理器通过经由路径遍历图表来确定用于目标约束的状态;基于所述状态来确定用于包括约束的第一查询的经叠缩的定义指示成员节点不响应于第一查询;以及根据经叠缩的定义使用在遍历期间所识别的成员节点来更新用于第一查询的所保存的查询结果。
在某些实施方式中,更新是在源节点与目标节点之间移除更新边缘,并且根据经叠缩的定义来更新所保存的查询结果包括从所保存的查询结果移除成员节点。在某些实施方式中,更新是在源节点与目标节点之间添加更新边缘,并且根据经叠缩的定义来更新所保存的查询结果包括保持所保存的查询结果。
在另一一般方面,在非暂时性计算机可读存储设备上体现的计算机程序产品包括指令,所述指令在被形成于基板中的至少一个处理器执行时使得计算设备执行所公开的方法、操作或过程中的任何一种。另一一般方面包括一种用于实时地更新所保存的查询结果的系统和/或方法,基本上如结合图中的至少一个所示出和/或描述的那样,如在权利要求中更全面地阐述的。
可以将本文描述的主题的实施方式中的一个或多个实现成从而实现以下优点中的一个或多个。作为一个示例,所述系统可实时地更新所保存的查询结果,意味着用以更新所保存的查询结果的过程在更新的几分钟内开始,并且被更新触发,而不是等待周期性离线批次过程来更新成员资格。实施方式能够快速地且高效地评估目标约束,使得对所保存的查询结果的实时更新成为可能。换言之,所述系统通过使用图表更新中的信息来识别受影响查询中的最小数目的附加约束以评估图表更新并将图标更新分组在一起以再使用先前工作的结果来使保持所保存的查询的正确结果所需的附加查找的数量最小化。根据本描述和附图以及根据权利要求,其它特征将变得显而易见。
附图说明
图1图示出根据某些实施方式的示例系统。
图2图示出以实体作为节点并以关系作为节点之间的边缘的示例数据图表的表示。
图3图示出根据所公开的实施方式的所保存的查询与查询边缘索引的示例。
图4图示出根据所公开的实施方式的用于实时地高效地更新查询成员资格的示例过程的流程图。
图5图示出根据所公开的实施方式的用于在向图表添加边缘之后智能地评估约束的示例过程的流程图。
图6图示出根据所公开的实施方式的用于在从图表删除边缘之后智能地评估约束的示例过程的流程图。
图7图示出在图2的数据图表中删除边缘之后实时地更新查询成员资格的示例。
图8图示出在图2的数据图表中添加边缘之后实时地更新查询成员资格的示例。
图9示出了可以用来实现所述技术的计算机设备的示例。
图10示出了可以用来实现所述技术的分布式计算机设备的示例。
各种图中的相同参考标号指示相同元件。
具体实施方式
图8是根据示例实施方式的系统100的框图。系统100响应于数据图表中的边缘更新而实时地更新所保存的查询结果。图1的系统是一个示例实施方式,并且可使用其它配置和应用。虽然系统100可以用来在任何数据图表中保持所存储的查询结果是新的,但系统100尤其对大型图表是有用的,因为用以确定这样的图表中的查询结果的处理时间常常是成本过高且时间过高的。
系统100可以是采取许多不同设备的形式的计算设备。例如,系统100可以是标准服务器、这样的服务器的群组、客户端-服务器系统或机架式服务器系统。另外,可在个人计算机中实现系统100。系统100可以是如图9中所描绘的计算机设备900或如图10中所描绘的计算机设备1000的示例。
系统100可包括图表引擎110和所保存查询的引擎(saved query engine)150。在某些实施方式中,图表引擎110和所保存查询的引擎150可以各自是单独的计算设备,或者其可共享组件,诸如处理器和存储器。例如,图表引擎110和所保存查询的引擎150可在个人计算机、服务器、计算机的一个或多个逻辑分区等中实现。在某些实施方式中,图表引擎110和所保存查询的引擎150中的一个或多个可以是在一系列计算设备(诸如服务器群组,诸如图10中所描绘的计算机设备1000)中实现的分布式系统。
系统100可包括基于图表的数据存储190。基于图表的数据存储是以节点和边缘的形式存储信息的数据图表,节点通过边缘被连接。数据图表中的节点可表示实体,诸如人、地点、项、词语、短语、思想、主题、抽象概念、具体元素、其它适当东西或这些的任何组合或实体的性质。因此可将节点称为实体,并且反之亦然。图表中的实体可通过边缘彼此相关,所述边缘可表示实体之间的关系。例如,数据图表可具有与Abraham Lincoln相对应的实体,并且数据图表可具有Abraham Lincoln实体与President实体之间的职业关系和Abraham Lincoln实体与Lawyer实体之间的另一这样的关系。索引引擎可保持基于图表的数据存储190以允许搜索引擎搜索数据图表,例如通过图表中的一个或多个关系或路径来寻找与其它实体有关的实体。在某些实施方式中,可将索引引擎和/或搜索引擎包括在图表引擎110中。基于图表的数据存储190可包括用于从数据存储搜索并检索数据的索引或某种其它方法。
基于图表的数据存储190可包括可以通过其创建图表(诸如图2中所示的图表200)的信息。如本文所使用的,可将对数据图表的引用视为对数据图表的索引的参考,并且反之亦然。可将数据图表的节点称为实体,并且可将边缘称为两个实体之间的关系。如本文所使用的,实体可指代人、地点或东西的物理实施例或者物理实体的表示,例如文本或指代实体的其它信息。例如,实体可以是法国的物理地点或者指代法国的抽象概念。图表引擎110可包括用户接口,其允许用户(例如客户端170的用户)在基于图表的数据存储190中搜素、更新并且另外保持信息。图表引擎110还可包括更新基于图表的数据存储190的批次或离线过程。图表引擎110可以是具有其自己的硬件处理器113和存储器114的单独计算设备,或者其可与系统100的其它组件共享一个或多个硬件处理器和存储器。
系统100还可包括所保存的查询140。查询是由可以是一个约束或约束的布尔表达式的约束表达式来定义的。约束表达式定义查询,并且因此可称为查询或集合定义。约束表达式表示基于图表的数据存储190中的实体必须满足以便被视为可对查询进行响应且被包括在查询结果中(即,作为查询结果的成员)的条件。在这样的意义上,可将查询视为集合和可对集合的查询成员进行响应的实体。因此,可将所保存的查询140称为所保存的集合成员资格。
约束与图表中的路径相关联。所述路径常常具有一的长度,但是也可具有更长的长度。所述约束可包括逻辑算子,诸如等号(==)、不等号(!=),并且可指定或者可不指定目标节点。具有一的路径长度的约束的示例是parent!=NULL(意味着必须用父边缘(parent edge)将节点连接到另一节点),sibling==NULL(意味着节点不可具有兄弟边缘(sibling edge)),并且parent==“John Doe”(其意味着必须用父边缘将节点连接到JohnDoe节点)。约束还可包括更长的路径,诸如alumni.parent.occupation==“President”。满足此约束的节点将是通过alumni关系连接到第一目标节点的节点,第一目标节点通过parent关系连接到第二目标节点,并且第二目标节点通过occupation关系连接到President节点。可使用其它逻辑算子(诸如和(&&)或(||)等)将约束组合成约束表达式。
系统100可可选地包括查询边缘索引145。查询边缘索引145可按边缘将所保存的查询140中的约束编索引。查询边缘索引145可在确定哪些所保存的查询潜在地受到对基于图表的数据存储190的更新的影响时改善处理时间,但是系统100还可仅仅从所保存的查询140读取约束以确定哪些所保存的查询潜在地受到影响。
图3图示出根据所公开的实施例的可被存储在所保存的查询140和查询边缘索引145中的信息的示例。所保存的查询340可包括查询标识符305,其可包括查询的名称。每个查询可由可使用逻辑算子被组合成约束表达式315的一个或多个约束130来定义。约束310可表示一的路径长度(例如occupation==“President”)或者更长的长度(例如alumni.parent.birthyear.chinese_zodiac==“ox”)。为了使实体被认为可对查询进行响应,约束表达式315必须针对实体评估为TRUE。
在所保存的查询340中图示出五个所保存的查询的示例。查询Q1图示出不指定目标节点的约束。例如,约束deathyear==NULL指示满足此约束的节点将不具有deathyear边缘。另一方面,如果所保存的查询是针对已去世的总统,则所述约束可以是deathyear!=NULL,意味着满足此约束的节点必须与另一节点具有deathyearrelationship,但是所述节点是什么没有关系。查询Q5图示出在约束表达式中具有仅一个约束的所保存的查询。
图3还图示出示例查询边缘索引345。查询边缘索引345是可选的,并且实施方式可不包括查询边缘索引345。查询边缘索引345按边缘存储用于每个所保存的查询的约束。因此,例如,在查询边缘索引345中存在occupation条目。用于occupation条目的每个约束包括用于约束的查询标识符和约束本身。具有一的路径长度的约束当然与跟路径相关联的边缘条目相关联。因此,来自查询Q1的occupation==“President”约束被包括在用于职业边缘的条目中。如果职业边缘在具有较长路径长度的约束中发生,则该约束还可被包括在边缘条目中。因此,例如,在职业条目下还包括来查询Q3的alumni.spouse.occupation==“President”的约束。此约束还被包括在用于alumni边缘和spouse边缘的条目中。因此,当在基于图表的数据存储中更新(例如,添加或删除)边缘时,系统可使用查询边缘索引345来快速地从潜在地受到更新影响的所保存的查询来识别所有所保存的查询和目标约束。当然,在没有查询边缘索引345的实施方式中,系统可检查所保存的查询340以获取相同信息。
返回图1,系统100还包括所保存的查询结果160。所保存的查询结果160识别可对在所保存的查询140中所识别的查询进行响应的基于图表的数据存储190中的实体。虽然不需要使每个所保存的查询在所保存的查询结果160中具有对应的成员,但由于用以确定用于大型数据图表中的所有节点的查询结果的处理时间的长度,所保存的查询140中的许多(如果不是全部的话)查询具有被保存在所保存的查询结果160中的关联结果。系统因此可以使用整个基于图像的数据存储190来确定查询结果中的成员资格一次,并且随着发生对基于图表的数据存储190的更新而更新成员资格。所保存的查询结果160可具有各种格式。作为一个示例,可将每个所保存的查询表示为基于图表的数据存储190中的节点,并且可对所保存的查询进行响应的实体可与用于所保存的查询的节点共享边缘。因此在某些实施方式中,所保存的查询结果160可以是基于图表的数据存储190的子集。这样的实施方式在图2的图表200中被图示为First Families节点,并且边缘将节点连接到图表200中的其它节点。作为另一示例,所保存的查询结果160可以是文件或数据库,其使查询标识符与可对查询(例如,所保存的查询结果)进行响应的节点的标识符相关。
基于图表的数据存储190、所保存的查询结果160、所保存的查询140以及查询边缘索引145被存储在被配置成以半永久性或非临时形式存储数据的有形计算机可读储存器(例如,磁盘、闪存、高速缓冲存储器或这些的组合)上。在某些实施方式中,基于图表的数据存储190、所保存的查询结果160、所保存的查询140以及查询边缘索引145可被存储在各种存储器的组合中和/或可被跨多个物理或逻辑计算设备以分布式方式存储。
系统100可包括所保存查询的引擎150。所保存查询的引擎150可包括一个或多个硬件处理器153,其被配置成执行一个或多个机器可执行指令或各件软件、固件或其组合以接收所保存的查询140并随着基于图表的数据存储190被更新而更新所保存的查询结果160。所保存查询的引擎150可具有其自己的处理器和存储器,或者其可与系统100的其它组件共享一个或多个处理器和存储器。所保存查询的引擎150可收集对基于图表的数据存储190的更新,使用该更新来识别受更新影响的所保存的查询,并且修改受影响查询的所保存结果(例如,成员资格)(如果需要的话)。为了以高效方式处理对基于图表的数据存储190的更新,所保存查询的引擎150可存储并再使用图表查找的结果。所保存查询的引擎150可将先前图表查找的结果存储在临时查找结果147中。在某些实施方式中,先前的查找可被源节点(例如,查找从其开始的节点)存储。图表查找是在图表中的向前或向后行进,从源节点开始,跟随满足查找标准的所有可能路径。由于图表中的行进可能是耗费时间的,所以将与所更新的边缘有关的行进保存以供再使用可以显著地改善所保存查询的引擎150在确定对所保存的查询结果160的更新时的性能。在某些实施方式中,可在用于更新的源节点改变时删除临时查找结果147。因此,在其中系统将更新按源节点分组的实施方式中,可以跨更新使用先前的查找。在某些实施方式中,所保存查询的引擎150可包括例如从客户端170接收查询定义的所保存查询的用户界面(UI)。所保存查询的引擎150可使用基于图表的数据存储190来以离线方式确定所保存的查询结果,所述所保存的查询结果用于新录入的所保存的查询。
系统100还可包括为了简洁起见而未示出的其它组件。例如,系统100可包括用以创建并保持基于图表的数据存储190的索引引擎。索引引擎可从例如一个或多个服务器获取内容,并且使用该内容来保持基于图表的数据存储190。在某些实施方式中,服务器可以是web服务器、专用网络上的服务器或可被索引引擎访问的其它源。索引引擎可以是一个或多个单独计算设备,并且在某些实施方式中图表引擎110可包括用于基于图表的数据存储190的索引引擎。系统100还可包括搜索引擎,其使用基于图表的数据存储190来使用常规或其它信息检索技术确定用于查询的搜索结果。在某些实施方式中,搜索引擎还可使用所保存的查询结果160来确定搜索结果。
系统100可通过网络180与客户端170通信。例如,网络180可以是互联网,或者网络180可以是使用例如网关设备、桥接器、交换机等来实现的有线或无线局域网(LAN)、广域网(WAN)等。经由网络180,图表引擎110和/或所保存查询的引擎150可与客户端170通信并向/从客户端70发射数据。
图4图示出根据所公开的实施方式的用于实时地高效地更新所保存的查询结果的示例过程400的流程图。过程400可由系统(诸如图1的系统100)执行。系统可使用过程400随着对基于图表的数据存储的更新发生而实时地更新所保存的查询结果,而不是等待周期性批次或离线更新过程。这使得系统能够避免所存储的查询成员资格中的陈旧性。在某些实施方式中,过程400可由所保存查询的引擎执行。
过程400然后可从系统接收识别源节点、边缘以及目标节点的图表更新开始(405)。在某些实施方式中,系统可接收图表更新并按源节点将更新分组,使得涉及到相同源节点的所有更新被分组在一起。例如,系统可具有例如至多一分钟的短延迟,在该延迟中将收集更新,而不是在对图表的更新发生之后立即运行。这样,系统可以利用涉及到相同源节点的多个更新。系统可选择所分组的更新中的更新中的一个或多个以用于处理。例如,针对涉及到相同源节点的更新,系统可并行地执行过程400。系统然后可识别潜在地受到更新影响的约束,也称为目标约束(410)。目标约束是指定包括在已更新三元组中所识别的边缘的路径的约束。
一旦系统已识别了目标约束(例如,识别对图表的更新中的边缘的约束),则系统可确定用于每个目标约束的状态(415)。约束的状态是TRUE、FALSE以及UNKNOWN。TRUE的状态指示存在满足基于图表的数据存储中的约束的至少一个方式。例如,如果基于图表的数据存储中的节点使用所添加的边缘的满足约束或者甚至在删除边缘之后满足约束,则满足约束。作为另一示例,如果约束是否定,则子图的不存在(尽管所添加的边缘可满足约束)。在具有向后查找的约束的情况下(例如,所添加的边缘的源节点在约束中是中间节点),向后查找可意味着该约束针对超过一个节点具有TRUE的状态。将相对于图7和8来更详细地对此进行解释。用于边缘的FALSE的状态意味着已更新边缘不满足约束。UNKNOWN的状态指示需要附加查找。系统可针对具有多跳的约束延迟图像查找以实现效率,例如,如果约束是被OR算子连接的约束串中的一个且其它约束具有较短路径或所保存的查找结果的话。由于多跳图表查找是昂贵的,所以当约束被与短路径约束析取地(disjunctively)组合时延迟较长路径约束中的较长图表查找可节省处理时间。例如,查询Q2包括被析取地组合的三个约束(例如,利用OR算子)。前两个约束涉及到二的路径长度,而最后一个涉及到三的路径长度。如果添加边缘的源节点使得第一约束为TRUE,则不需要较长路径的查找。因此,系统可将具有较长路径的约束的状态设置成UNKNOWN,并且只有当图表查找未能与前两个约束中的一个匹配时才执行查找。在某些实施方式中,系统可使用智能选择过程,诸如图5的过程500或图6的过程600。
一旦目标约束已被评估并指派状态,则系统可针对目标约束中的至少一个查找用于所保存的查询的查询定义并使用于查询的约束表达式叠缩(collapse)(420)。例如,图3的查询Q2在其约束表达式中具有三个约束。如果parent.occupation==“President”约束是对于Jack Doe节点而言具有TRUE的状态的目标约束,则系统将针对约束表达式中的第一约束代替第一约束的状态,并确定约束表达式是否可以被解算(resolve)。例如,使用上述示例使C2的查询定义叠缩将看起来像(TRUE||spouse.occupation==“President”||parent.parent.occupation==“President)。C2的经叠缩的查询定义解算成TRUE,因为约束的析取中的一个约束是TRUE。
系统可确定经叠缩的约束表达式是解算成TRUE还是FALSE(425)。如上所述,这可在一系列析取约束中的一个约束是TRUE时发生。在这样的情况下,系统不需要评估其它约束,因为具有TRUE状态的一个约束足以使得约束表达式为TRUE。同样地,如果一系列析取约束中的一个约束为FALSE,则系统不需要评估其它约束。如果约束表达式并未解算成TRUE或FALSE(425,否),则系统可选择约束表达式中的未解算的约束中的一个或多个约束并确定用于未解算的约束的状态(440)。在某些实施方式中,系统可使用智能选择过程,诸如图5的过程500或图6的过程600。该系统然后可使用针对约束中的一个或多个确定的状态来使约束表达式(420)叠缩。步骤420至440因此表示约束、图表查找的迭代评估,并使得约束表达式叠缩以确定哪些节点是受到图表更新的影响的查询结果的成员。这样的迭代过程允许系统在图表中执行最小查找,减少了在确定哪些所保存的查询结果受到图表更新的影响方面花费的处理时间。
如果约束表达式解算成TRUE或FALSE(425,是),则系统可针对查询更新所存储的成员资格(430)。为了针对其中约束表达式解算成TRUE的所添加的边缘来更新成员资格,如果源节点在用于查询的所保存的结果中不存在的话,系统可向所保存的查询结果添加适当的源节点。为了针对其中约束表达式解算成FALSE的已删除的边缘更新成员资格,如果适当的源节点在所保存的查询结果中存在的话,系统可将所述适当的源节点从所保存的查询结果移除。否则,系统可保持查询结果,或者换言之,适当查询结果保持其原来的样子,因为结果不受已更新三元组的影响。
如果存在具有目标约束的其它查询(435,是),则系统可针对其余目标约束中的一个或多个选择另一查询并针对该查询重复步骤420至440。否则,过程400结束,系统响应于对图表的更新,对受影响的所保存的查询结果做出了更新。
图5图示出根据所公开的实施方式的用于在向图表添加边缘之后智能地选择和评估约束的示例过程500的流程图。过程500可由系统的所保存查询的引擎作为图4的步骤415和440的一部分而执行。系统可使用过程500来智能地选择用于评估的约束并再使用针对其它约束而执行的图表遍历来更高效地确定在对基于图表的数据存储的更新之后对所保存的查询结果的改变。系统可针对用于具有至少一个目标约束的查询的约束表达式中的约束运行过程500。过程500可通过确定更新边缘是否是约束中的唯一边缘开始(505)。换言之,如果图表更新中的边缘与约束中的唯一边缘匹配(505,是),则系统不需要执行任何图表查找,并且可以将成员节点设置成更新的源节点并将成员目标节点设置成更新的对象节点(510)。成员节点是作为包括被评估的约束的查询结果中的节点集合的潜在成员的节点。成员目标节点是经由在约束中所指定的路径从成员节点到达的节点。在具有单个边缘的约束中,已更新的三元组的源节点是成员节点,并且已更新的三元组的目标节点是成员目标节点,因为经由已更新三元组的边缘从已更新三元组的源节点到达的任何其它节点不受更新的影响。换言之,成员资格不改变,并且不需要使系统再验证此成员资格。类似地,如果更新中的边缘是具有长于一的路径长度的约束中的第一边缘,则更新的源节点仍然是唯一的潜在成员节点,因为任何图表查找将仅包括从更新中的源节点开始的在图表中的向前行进。在这样的情况下,已更新三元组的目标节点不是成员目标节点。在这样的情况下通过经由在约束中所指定的路径从对象节点向一个或多个目标成员节点遍历图表来识别成员目标节点。如果系统不能跟随在约束中所指定的路径到达至少一个成员目标节点,则用于成员节点的成员目标节点是NULL,意味着图表不包括可从成员节点到与约束中的路径匹配的任何其它节点的路径。
成员节点并不始终是所添加的三元组的源节点。例如,当所添加的三元组中的边缘不是约束路径中的第一边缘时,图表查找将涉及到从已更新的三元组的源节点开始向后行进,并且成员节点将是在向后行进时到达的一个或多个节点。在这样的情况下的成员目标节点将是经由所添加的三元组从成员节点到达的节点,如下面将更详细地解释的。
系统可基于遍历针对每个成员节点设定约束的状态(550)。成员节点是否满足约束取决于针对成员节点所识别的成员目标节点。例如,如果成员节点与满足约束的至少一个成员目标节点相关联,则约束的状态对于该成员节点而言为TRUE,否则其为FALSE。按设计,成员目标节点是经由图表更新从成员节点到达的节点(例如,图表更新的源、边缘以及目标节点)。这可导致系统遍历至每个成员节点的零个、一个或更多成员目标节点。只要一个成员目标节点与约束条件匹配,用于成员节点的约束的状态就为TRUE。一旦系统设定了约束的状态,则过程500针对该约束结束。
如果更新边缘不是约束中的唯一边缘(505,否),则系统可确定约束是否包括单个边缘查找(515)。单个边缘包括其中更新的边缘是具有二的路径长度的约束的一部分的约束。例如,如果图表更新是<Jack Doe,parent,Jane Doe>且约束是alumni.parent==”Jane Doe”,则系统可考虑此单个边缘查找,因为alumni边缘只需要向后遍历以找到成员节点。在这样的示例中,成员目标节点是“Jane Doe”且不需要向前遍历。同样地,如果约束是parent.occupation==“President”,则系统可考虑此单个边缘查找,因为成员节点是Jack Doe且只需要经由occupation边缘从Jane Doe的向前查找以识别成员目标节点。如果针对Jane Doe不存在occupation边缘,则系统可将成员目标节点设置成NULL。另外,如果图像更新的边缘是具有三的路径长度的约束的中间边缘,则系统可考虑此单个边缘,例如单个向后边缘和单个向前边缘。例如,如果约束是alumni.parent.occupation==“President”且所添加的三元组是<Jack Doe,parent,Jane Doe>,则所添加的三元组满足约束中的中间边缘,并且系统可经由occupation从Jane Doe边缘遍历一个边缘以确定潜在目标成员节点,并且经由alumni边缘从Jack Doe节点遍历图表以确定成员节点。因此,如果约束是单边缘查找(515,是),则系统可遍历图表以识别成员节点和目标成员节点(520),如刚刚描述的。在某些实施方式中,系统可将查找的结果保存在临时查找表中(545)。这将使得系统能够再使用其它约束的未来评估中的查找的结果。
系统可基于遍历针对每个成员节点设定约束的状态(550)。例如,如果从成员节点开始的图表的遍历指示对于成员节点而言边缘不存在,并且约束包括==NULL条件,则系统可针对成员节点将状态设置成TRUE。如果约束包括!=NULL条件,则系统可针对该成员节点将状态设置成FALSE。如果约束将特定节点指定为目标节点且成员目标节点与在约束中所指定的节点不匹配,则系统将用于成员节点的状态设置成FALSE,并且否则设置为TRUE。例如,如果约束包括==“President”条件且目标成员节点不包括Presiden节点,则系统可将状态设置成FALSE。如果目标成员节点包括President节点,则系统可将状态设置成TRUE。系统可将成员节点与适当的状态配对,使得其可以跟踪哪些成员满足约束。过程500然后对于该约束而言结束。
如果约束不包括单个查找(515,否),则系统可确定约束是否包括具有所存储的查找结果的路径(525)。例如,系统可临时地存储来自先前图表查找的结果,例如在数据存储(诸如图1的临时查找结果147)中。这使得系统能够再使用对先前的约束执行的工作。这在系统按源节点将更新进行分组时是尤其高效的,还使得可以跨对图表的多个更新使用所保存的查找。所保存的查找可包括源节点、跟随的路径以及经由路径到达的任何目标节点。
如果约束包括具有对应的所保存的查找结果的路径(525,是),则系统可使用所保存的查找结果来确定用于约束的成员节点和成员目标节点(530)。如上文所指示的,成员节点是作为可以潜在地满足约束并且因此潜在地可对查询(例如,所保存的查询结果中的节点集合的潜在成员)进行响应的节点的节点。每个所保存的查找结果可包括源节点和经由所保存的路径从源节点到达的任何目标节点。所保存的查找中的源节点可以是成员节点,或者可用来根据约束确定成员节点。例如,如果图表更新是<Bill Clinton,occupation,President>,并且被评估的约束是alumni.parent.occupation==“President”且所保存的查找包括经由parent边缘从Bill Clinton开始的向后查找,则Chelsea Clinton可以是保存在临时查找结果中的目标节点。因此,当评估约束alumni.parent.occupation时,系统可只须评估经由alumni路径从Chelsea Clinton开始的路径以确定成员节点,例如使用图2的示例图表的Columbia和Stanford。另一方面,如果被评估的约束是parent.occupation,则用于Bill Clinton->parent的所保存的查找的目标节点Chelsea Clinton是成员节点。当遍历图表时,系统可能需要执行向前和向后行进,如上文在步骤515中关于单个边缘查找所述。向前和向后行进本身可包括多于单个查找。在某些情况下,约束可包括被保存的向后行进和未被保存的向前行进,或者反之亦然。因此,使用来自先前图表行进的所保存的查找结果可包括附加图表查找以确定成员节点或成员目标节点,这取决于哪个行进被保存。系统可基于遍历针对被识别的每个成员节点设定约束的状态(550),如上所述。
如果约束不包括所保存的查找(525,否),则系统可确定约束是否具有针对查询定义的最小未解算的路径长度(535)。例如,图3的查询Q4包括具有五的路径长度的两个约束和具有三的路径长度的一个约束。在某些实施方式中,系统可使用约束表达式的结构来确定约束是否针对约束表达式的特定部分具有最小未解算的路径长度。因此,例如,如果表达式是约束的析取系列,则系统可确定约束是否具有该系列的约束中的约束的最小路径长度。如果过程500仅在评估目标约束时被调用(例如,图4的步骤415),则系统可确定约束是否是用于所保存的查询(而不是全查询定义)的目标约束的最短路径长度。如果系统确定约束具有最小路径长度(535,是),则系统可遍历图表以识别成员节点及其各自的成员目标节点(如果有的话)。如上所述,这可包括图表中的向前行进和向后行进两者。系统可保存在遍历期间实现的查找的结果(545),使得结果可以被再使用。系统可针对每个成员节点设定约束的状态(550),如前所述。
如果系统确定约束不具有最小路径(535,否),则系统可将约束的状态设置成UNKNOWN(555)。这意味着系统将等待在稍后的时间评估约束,如果需要这样的评估的的话。以这样的方式,系统可推迟更加复杂的遍历,如果不需要这样的遍历以解算特定成员节点对所保存的查询的响应性的话。
如图5中所示的过程500是智能地评估约束的一个示例。当然,在某些实施方式中,系统可在遇到每个约束时全面地评估每个约束,根据需要保存任何图表遍历的结果。在这样的实施方式中,系统可使用所保存的查找(如果可用的话)(例如,步骤525和530),并且否则遍历图表(例如,步骤540)且保存遍历的结果(545),不会将状态设置成UNKNOWN。另外,根据本公开可显而易见的是,在优化约束评估时可使用其它变体,例如始终执行具有二的长度的查找而不仅仅是作为步骤515的一部分的单个查找等。此外,应理解的是在某些实施方式中,可作为识别成员节点和/或成员目标节点的一部分来执行设置用于成员节点的约束的状态(步骤550)。因此,图5中所示的步骤的顺序仅仅是示例的,并且实施方式不限于所示的顺序。
图6图示出根据所公开的实施方式的用于在从图表删除边缘之后智能地选择和评估约束的示例过程600的流程图。过程600可由系统的所保存查询的引擎作为图4的步骤415或440的一部分而执行。系统可使用过程600来智能地选择用于评估的约束并再使用针对其它约束所执行的图表遍历来更高效地确定在对基于图表的数据存储的更新之后对所保存的查询结果的改变。系统可针对用于具有至少一个目标约束的所保存的查询的约束表达式中的约束运行过程600。过程600可通过确定已删除的边缘是否是约束中的唯一边缘开始(605)。换言之,如果图表更新中的边缘与约束中的唯一边缘匹配(605,是),则系统可以将成员节点设置成已删除边缘的源节点,并且寻找成员目标节点(610)。不同于所添加的三元组,已删除的三元组的目标节点不是有效的成员目标节点,因为在图表中不再存在边缘。因此,系统可从成员节点(例如,来自已删除的三元组的源节点)开始遍历图表以确定其是否被与约束边缘匹配的边缘连接到另一节点。例如,如果已删除的三元组是<Jack Doe,parent,John Doe>且约束是parent!=NULL,则系统可确定是否存在从Jack Doe到除JohnDoe之外的节点的另一parent边缘。如果存在,则另一节点是成员目标节点。系统可基于遍历来设置用于成员节点的约束的状态(650)。如到图表的添加的情况一样,成员节点是否满足约束对于成员节点而言取决于所识别的成员目标节点或者识别成员目标节点的失败。继续上述示例,如果成员节点并未经由parent关系与至少一个其它节点相关联,则成员目标节点是NULL,并且约束parent!=NULL未被满足且将接收到FALSE的状态。一旦系统设定了约束的状态,则过程600针对该约束结束。
如果更新边缘不是约束中的唯一边缘(605,否),则系统可确定约束是否包括单个边缘查找(615)。类似于所添加的三元组,用于已删除三元组的单个边缘包括其中已删除三元组的边缘是具有二的路径长度的约束的约束。但是不同于所添加的三元组,其中已删除三元组的边缘是约束的中间边缘的约束不是单个边缘查找。这是因为已删除的三元组不再满足中间边缘要求。替代地,系统需要执行向后查找以识别所有潜在的成员节点(如果有的话)并完成向前查找,跟随由三个边缘规定的路径,以确定任何可能的成员目标节点。因此,要求至少三个边缘的向前查找,并且这样的约束可能不满足单个边缘查找。如果约束是单个边缘查找(615,是),则系统可遍历图表以识别成员节点和目标成员节点(620),如刚刚描述的。在某些实施方式中,系统可将查找的结果保存在临时查找表中(645)。这将使得系统能够再使用其它约束的未来评估中的查找的结果。系统可基于遍历以及所识别的成员目标节点来设置用于每个成员节点的约束的状态(650)。系统可将成员节点与适当的状态配对,使得其可以跟踪哪些成员满足约束。过程600然后对于该约束而言结束。
如果约束不包括单个查找(615,否),则系统可确定约束是否包括具有所存储的查找结果的路径(625)。例如,系统可临时地存储来自先前图表查找的结果,例如在数据存储(诸如图1的临时查找结果147)中。这使得系统能够再使用针对先前的约束执行的工作,并且当系统按源节点将更新分组时是尤其高效的,使得可以跨对图表的多个更新使用所保存的查找。所保存的查找可包括源节点、跟随的路径以及经由路径到达的任何目标节点。系统可在图表更新的源节点改变时删除任何所保存的查找。
如果约束包括具有所保存的查找(625,是),则系统可使用所保存的查找的目标节点来确定用于约束的成员节点和成员目标节点(630),如上文关于图5所讨论的,只是不能使用所删除的边缘来遍历图表。系统可基于遍历针对被识别的每个成员节点和成员目标节点设定约束的状态(650),如上所述。
如果约束不包括所保存的查找(5 625,否),则系统可确定约束是否具有针对查询定义的最小未解算的路径长度(635),如上文关于图5所述。如果系统确定约束具有最小路径长度(635,是),则系统可遍历图表以识别成员节点和成员目标节点,适当地如上文关于图5所述,只是遍历包括首先完成任何向后行进以识别成员节点并使用在约束中所指定的路径从每个成员节点开始完成向前行进以识别潜在的成员目标节点。当然,当针对约束存在超过一个成员节点时,可以使约束针对一个成员节点具有TRUE的状态且针对另一成员节点具有FALSE的状态。系统可保存在遍历期间实现的向后和向前查找的结果(645),使得结果可以被再使用。系统可针对每个成员节点设定约束的状态(650),如前所述。
如果系统确定约束不具有最小路径(635,否),则系统可将约束的状态设置成UNKNOWN(655)。这意味着系统将等待在稍后的时间评估约束,如果需要这样的评估的的话。以这样的方式,如果不需要此遍历以解算特定成员节点对所保存的查询的响应性,系统可推迟更加复杂的遍历。
类似于过程500,如图6中所示的过程600是一个示例,并且实施方式可将步骤组合、将步骤重新排序、仅执行某些步骤等,并且实施方式不限于所示的顺序或步骤。
图7和8图示出使用图2的数据图表和图3的示例所保存的查询340来实时地更新查询成员资格的示例。在图7的示例中,将图2的三元组<Duke,alumni,Jack Doe>从图表200删除。因此,已更新三元组是<Duke,alumni,Jack Doe>。在某些实施方式中,系统可响应于更新而更新受删除影响的所保存的查询结果,并且在某些实施方式中,系统可将在短时间段(例如小于5分钟)内发生的更新分组,并且然后基于更新的群组而更新所保存的查询结果。分组可由已更新三元组的源节点完成。在实施方式中,更新触发更新所保存的查询结果的过程。因此,所保存的查询结果实时地发生。
在接受到已删除三元组之后,系统可识别目标约束。如上文所指示的,目标约束是包括由已删除三元组识别的边缘的约束。在某些实施方式中,系统可使用索引(诸如图3的查询边缘索引345)来识别目标约束。例如,使用索引345,系统可找到用于索引中的alumni边缘的条目,并且将用于alumni边缘的条目识别为目标约束。在在某些实施方式中,系统可读取所保存的查询340并寻找包括alumni边缘的约束。基于图2的图表200和所保存的查询340及可选地查询边缘索引345,系统可识别目标约束705。系统然后可评估目标约束。在某些实施方式中,系统可智能地评估约束。例如,用于查询Q3的两个约束每个具有三的路径长度-因此,它们每个都是用于查询Q3的目标约束的最短路径长度,并且系统可遍历图表以确定成员节点和用于每个成员节点的约束的状态。由于已删除三元组的边缘是alumi且alumni是查询Q3中的每个目标约束的第一边缘,所以成员节点是Duke,已删除三元组的源节点。因此,遍历用于这些约束的图表涉及到在图表中从Duke节点开始的向前行进。
使用图2的图表,Duke节点包括仅一个alumni边缘,因为<Duke,alumni,Jack Doe>边缘被删除。因此,在评估第一约束时,系统跟随alumni至John Doe节点。John Doe节点与Jack Doe节点具有parent关系,但是Jack Doe节点不具有occupation边缘。因此,系统将成员目标节点指派给NULL。由于约束alumni.parent.occupation==“President”指示用于成员资格的条件是President的成员目标节点,则NULL的成员目标节点未能满足约束,因此系统针对Duke成员节点将约束的状态设置成FALSE。应理解的是图2的图表是无向图。在某些实施方式中,图表可以是有向的,例如parent边缘可仅从子节点通向父节点(例如,仅从Jack Doe到John Doe)。在这样的图表中,系统将不会看到从Jack Doe节点引出的parent关系,其仍将导致NULL的成员目标节点和针对此约束的FALSE的状态。
系统然后可针对查询Q3评估第二约束。Duke节点与John Doe节点具有alumni关系,该John Doe节点与Jane Doe节点具有spouse关系。Jane Doe节点与President节点具有occupation关系,使得成员目标节点President为Duke的成员节点。由于President的成员目标节点与约束中的条件匹配,所以系统将约束alumni.spouse.occupation==“President”的状态针对Duke成员节点设置成TRUE。
系统还可针对查询Q4评估目标约束。目标约束包括具有五的路径长度的两个约束和具有二的路径长度的一个约束。系统可选择alumni.alumni!=NULL约束用于评估,并且将其余两个目标约束的状态设置成UNKNOWN,因为其路径长度较长。由于alumni关系在约束alumni.alumni!=NULL的路径中是第一关系,所以系统可将成员节点设置成Duke,即已删除三元组的源节点。系统可在图表中行进并确定Duke节点与另一节点(John Doe节点)具有alumni关系。在某些实施方式中,系统可使用所保存的图表查找来确定此关系存在。JohnDoe节点与Michigan节点具有alumni关系。因此,成员目标节点是Michigan。由于成员目标节点不是NULL,则约束被满足,并且系统将用于Duke节点的约束的状态设置成TRUE。
最后,系统还可针对查询Q5评估目标约束。此约束仅具有一个边缘,因此系统可经由alumni边缘从Duke节点至John Doe节点遍历图表。这是路径的结尾,因此John Doe节点是成员目标节点。由于按照约束的指定,成员目标节点不是“Jack Doe”,所以系统针对Duke成员节点将用于此约束的状态设置成FALSE。
系统可通过用约束的状态取代查询定义中的约束来使各种查询定义叠缩。这导致图7中的经叠缩的定义710。系统可以评估经叠缩的定义以确定约束表达式是评估为TRUE还是FALSE或者是否需要附加查找。如图7中所示,用于查询Q3的约束表达式针对Duke解算成TRUE,并且用于查询Q5的约束表达式针对Duke解算成FALSE。用于查询Q4的约束表达式并未解算,因为需要附加查找。应注意的是如果alumni.alumni!=NULL约束已被评估为FALSE,则将不需要附加查找,因为用于C4的经叠缩的约束表达式将解算成FALSE。
系统可在715处更新用于已解算查询的所保存的查询结果。由于查询Q5解算成FALSE,并且这是三元组的删除,所以应将Duke节点从Q5查询移除。由于查询Q3解算成TRUE,并且这是三元组的删除,所以不需要改变(例如,删除不影响成员资格),并且系统可保持用于查询Q3的所保存的结果的成员资格。虽然图7图示出对不同所保存的查询中的约束群组操作的评估、叠缩以及更新步骤,但应理解的是在某些实施方式中系统可一次一个查询地评估、叠缩以及更新成员资格。例如,系统可以评估用于查询Q3的约束、叠缩用于Q3的查询定义、并且然后在评估Q4的约束之前更新Q3的成员资格、叠缩Q4的查询定义等。因此,实施方式不限于在图7中举例说明的序列。
由于查询Q4尚未被解算,所以系统可评估具有UNKNOWN状态的约束或并非查询中的目标约束的约束。在图7的示例中,存在要评估的两个约束,每个约束具有相同的路径长度。系统因此可从Duke节点开始跟随在alumni.parent.birthyear.chinese_zodiac==“ox”约束中所识别的路径而开始在图表中行进。由于这样的路径在具有删除的图2的图表中不存在,所以成员目标节点是NULL,其不满足约束,并且系统针对Duke成员节点将约束的状态设置成FALSE。系统可能已保存了查找的结果,例如指示这样的路径不存在,并且系统可再使用那些结果来确定对于Duke节点而言也不满足alumni.parent.birthyear.chinese_zodiac==“dog”约束。因此,系统还可针对Duke节点将此约束的状态设置成FALSE。系统然后可叠缩查询定义并确定其评估为FALSE。由于其评估为FALSE且更新是已删除三元组,所以系统可将Duke节点从Q4所保存的查询结果删除。系统现在已更新受到三元组删除的影响的所保存的查询结果,并且可继续处理群组中的下一三元组,或者可等待对数据图表的另一个更新。
在图8的示例中,三元组<Jack Doe,parent,Jane Doe>已被添加到图2的图表200。因此,已更新三元组是<Jack Doe,parent,Jane Doe>。在某些实施方式中,系统可响应于更新而更新受添加影响的所保存的查询结果,并且在某些实施方式中,系统可将在短时间段(例如小于5分钟)内发生的更新分组,并且然后基于更新的群组而更新所保存的查询结果。分组可由已更新三元组的源节点完成。在没有相对于图7所讨论的删除的情况下,图8的示例使用图2中所示的图表200。因此,图8的示例独立于图7的示例。然而,应理解的是如果删除确实在图8中描绘的事件之前发生,则Duke节点将不是有效的成员节点,因为其与JackDoe的alumni关系将不再存在。
在接收已添加三元组之后,系统可识别目标约束。如上文所指示的,目标约束是包括由已添加三元组识别的边缘的约束。在某些实施方式中,系统可使用索引(诸如图3的查询边缘索引345)来识别目标约束。例如,使用查询边缘索引345,系统可找到用于索引中的parent边缘的条目,并且可将用于parent边缘的条目识别为目标约束。在在某些实施方式中,系统可读取所保存的查询340并寻找包括parent边缘的约束。基于图2的图表200和所保存的查询340及可选地基于查询边缘索引345,系统可识别目标约束805。系统然后可评估目标约束。在某些实施方式中,系统可智能地评估约束。换言之,系统可选择选取具有较小查找路径的约束或者可以再使用所保存的工作以用于评估的约束。例如,用于查询Q2的一个目标约束具有二的路径长度,并且另一个具有三的路径长度。系统可选择具有较短路径长度的约束,或者可选择parent.occupation==“President”约束,因为其涉及到单个边缘查找(已添加三元组满足路径中的第一边缘)。系统可选择等待评估查询Q2的parent.parent.occupation=“President”约束并暂时将此约束的状态设置成UNKNOWN。为了评估parent.occupation==“President”约束,系统可将Jack Doe节点设置为成员节点并跟随新添加parent边缘至Jane Doe节点。约束中的下一边缘是occupation边缘,其通向President节点。也是目标成员节点,并且满足约束的条件,因此系统针对Jack Doe节点将parent.occupation==“President”约束的状态设置成TRUE。在某些实施方式中,系统可在临时查找结果中保存用于parent.occupation路径的成员节点(例如,Jack Doe)和成员目标节点(例如,President)。
系统还可针对查询Q3评估目标约束。用于查询Q3的目标约束包括例如从Jack Doe经由alumni边缘的图表中的单边缘向后行进和经由parent.occupation的向前行进。在某些实施方式中,系统可能能够针对查询Q2从目标约束开始再使用parent.occupation行进以将成员目标节点识别为President。因此,系统可仅执行向后行进以确定用于此约束的成员节点。使用图2的图表200作为示例,系统可跟随alumni边缘Jack Doe节点至Duke节点和Columbia节点两者。因此,系统可识别两个成员节点:Duke和Columbia。由于President的成员目标节点满足约束,则系统可针对成员节点Duke且针对成员节点Columbia设定TRUE的状态。在某些实施方式中,系统可在临时查找结果中保存经由alumni边缘从Jack Doe至Duke和Columbia的向后行进。
系统还可针对查询Q4评估目标约束。两个目标约束的路径长度是相等的,并且对于查询而言是最短的,因此系统可评估每个约束。由于已添加边缘parent不是约束路径中的第一边缘,所以系统使用alumni边缘来执行向后行进。在某些实施方式中,系统可使用临时查找结果来识别用于向后行进的Duke和Columbia成员节点,例如因为系统在针对查询Q3评估目标约束时执行此行进。系统可开始从用于约束alumni,parent.birthyear.chinese_zodiac==“dog”的Jane Doe节点、跟随birthyear边缘至1961节点的向前行进以及跟随chinese_zodiac边缘至ox节点的向前行进。由于这是约束中的路径的结尾,所以ox节点是用于Duke和Columbia的成员节点的成员目标节点。系统可将Duke和Columbia的成员节点与用于thealumni.parent.birthyear.chinese_zodiac路径的ox的成员目标节点一起保存,例如在临时查找结果中。由于ox的目标成员节点不满足此约束,所以系统可针对成员节点Columbia和成员节点Duke设定FALSE的状态。
系统然后可针对Q4查询评估第二约束。在某些实施方式中,系统可使用例如来自临时查找结果的先前查找的结果来识别Columbia和Duke的成员节点及ox的成员目标节点。因此,系统不需要实际上执行在图表中的任何进一步行进以评估alumni,parent.birthyear.chinese_zodiac==“ox”约束,并且可使用所保存的查找来针对Duke和Columbia成员节点将此约束的状态设置成TRUE,因为ox的成员目标节点满足约束。如果系统并未保存查找,则系统可如上所述地遍历图表以识别成员节点和成员目标节点。
系统可使用针对目标约束所确定的状态叠缩查询定义。如图8的经叠缩的定义810所示,查询Q2和Q3在没有进一步查找的情况下叠缩成TRUE。因此,系统可更新查询Q2的成员资格以添加成员节点Jack Doe并更新查询Q3的成员资格以添加成员节点Columbia和Duke,假设成员节点不在相应的查询的所保存的结果中。
用于查询Q4的经叠缩的查询定义并未解算成TRUE或FALSE,而是约束alumni.alumni!=NULL。因此,系统可针对Columbia和Duke的成员节点(其为针对查询定义中的另一约束具有TRUE的状态的成员节点)评估alumni.alumni!=NULL约束。使用图2的图表200作为示例,系统可在Columbia节点处开始,跟随alumni边缘至Jack Doe节点且跟随alumni边缘从Jack Doe至Duke。因此,系统可确定对于成员节点Columbia而言成员目标节点是Duke。由于这满足!=NULL的约束,所以系统可针对Columbia成员节点设定TRUE的状态。系统还可从Duke节点经由alumni边缘至Jack Doe节点且经由另一alumni边缘从JackDoe节点至Columbia节点在图表中行进。因此,对于Duke成员节点而言成员目标节点是Columbia。由于这满足约束,所以系统可针对Duke成员节点将约束的状态设置成TRUE。系统还可以跟随经由alumni边缘从Duke节点至John Doe节点以及经由另一alumni边缘从JohnDoe至Michigan节点的路径。然而,一旦约束的状态是TRUE,则系统不需要行进每个可能的路径。
系统可使用约束的状态来叠缩查询Q4的查询定义,如经叠缩的定义815所图示的。查询定义针对Columbia成员节点和Duke成员节点两者叠缩成TRUE,因此系统可将Columbia和Duke成员节点添加到所保存的查询结果。系统现在已更新受到三元组添加的影响的所保存的查询结果,并且可继续处理群组中的下一个三元组,或者可等待对数据图表的另一更新。
为了易读,上述示例按名称或描述而提及节点和关系。应理解的是在不脱离所公开实施方式的情况下,系统可在数据结构、索引、约束等中使用其它标识符。
图9示出了可与这里描述的技术一起使用的通用计算机设备900(其可以是系统100和/或图1的客户端170)的示例。计算设备900旨在表示各种示例形式的计算设备,诸如膝上计算机、台式计算机、工作站、个人数字助理、蜂窝式电话、智能电话、平板计算机、服务器及其它计算设备(包括可穿戴设备)。这里所示的组件、其连接和关系以及其功能意图仅仅是示例,并不意图限制在本文中描述和/或要求保护的发明的实施方式。
计算设备900包括被经由接口908连接的处理器902、存储器904、存储设备906以及扩展端口910。在某些实施方式中,除了其它组件之外,计算设备900可包括经由接口908被连接的收发机946、通信接口944以及GPS(全球定位系统)接收器模块948。设备900可通过通信接口944无线地进行通信,该通信接口944在必要时可包括数字信号处理电路。组件902、904、906、908、910、940、944、946和948中的每个都可以被安装在公共母板上或适当地以其它方式安装。
处理器902可以处理用于在计算设备900内执行的指令,包括存储在存储器904中或存储设备906上的指令以在外部输入/输出设备(诸如显示器916)上显示用于GUI的图形信息。显示器916可以是监视器或平面触摸屏显示器。在某些实施方式中,可适当地使用多个处理器和/或多个总线以及多个存储器和存储器类型。并且,可连接多个计算设备900,每个设备提供所需操作的各部分(例如,作为服务器群、刀片服务器群组或多处理器系统)。
存储器904存储计算设备900内的信息。在一个实施方式中,存储器904是易失性存储器单元。在另一实施方式中,存储器904是非易失性存储器单元。存储器904还可以是另一形式的计算机可读介质,诸如磁盘或光盘。在某些实施方式中,存储器904可包括通过扩展接口所提供的扩展存储器。
存储设备906能够为计算设备900提供大容量储存器。在一个实施方式中,储存器设备906可以是或包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备或磁带设备、闪存或其它类似固态存储器设备或设备阵列,包含存储区域网或其它配置中的设备。可以在这样的计算机可读介质中有形地体现计算机程序产品。计算机程序产品还可包含在被执行时执行一个或多个方法(诸如上文所述的那些)的指令。计算机或机器可读介质是储存器设备,诸如存储器904、储存器设备906或处理器902上的存储器。
接口908可以是管理用于计算设备900的带宽密集操作的高速控制器或管理较低带宽密集操作的低速控制器或这样的控制器的组合。可提供外部接口940,从而使得能够实现设备900与其它设备的近场通信。在某些实施方式中,控制器908可被耦合到储存器设备906和扩展端口914。可包括各种通信端口(例如,USB、BLUETOOTH、ETHERNET、无线ETHERNET等)的扩展端口可例如通过网络适配器耦合到一个或多个输入/输出设备,诸如键盘、指针设备、扫描仪或联网设备,诸如交换机或路由器。
可用许多不同的形式来实现计算设备900,如图中所示。例如,可将其实现为标准服务器930或者在这样的服务器群组中实现多次。还可将其实现为机架式服务器系统的一部分。另外,其可在个人计算设备(诸如膝上型计算机934、台式计算机932或平板计算机或智能电话936)中实现。整个系统可由相互通信的多个计算设备900构成。其它配置也是可能的。
图10示出了可与这里描述的技术一起使用的通用计算设备1000(其可以是图1的系统100)的示例。计算设备1000旨在表示各种示例形式的大规模数据处理设备,诸如服务器、刀片服务器、数据中心、主机及其它大规模计算设备。计算设备1000可以是具有被一个或多个通信网络互连的多个处理器(可能包括网络附着存储节点)的分布式系统。这里所示的组件、其连接和关系以及其功能意图仅仅是示例,并不意图限制在本文中描述和/或要求保护的发明的实施方式。
分布式计算系统1000可包括任何数目的计算设备1080。计算设备1080可包括通过局域网或广域网、专用光学链路、调制解调器、桥接器、路由器、交换机、有线或无线网络等通信的服务器或机架式服务器、主机等。
在某些实施方式中,每个计算设备可包括多个机架。例如,计算设备1080a包括多个机架1058a至1058n。每个机架可包括一个或多个处理器,诸如处理器1052a至1052n和1062a至1062n。处理器可包括数据处理器、网络附着存储设备及其它计算机控制设备。在某些实施方式中,一个处理器可充当主处理器并控制调度和数据分发任务。处理器可通过一个或多个机架交换机1058被互连,并且一个或多个机架可通过交换机1078被连接。交换机1078可处理多个连接计算设备1000之间的通信。
每个机架可包括存储器(诸如存储器1054和存储器1064)以及储存器(诸如1056和1066)。储存器1056和1066可提供大容量储存器,并且可包括易失性或非易失性储存器,诸如网络附着磁盘、软盘、硬盘、光盘、磁带、闪存或其它类似固态存储器设备或设备阵列,包括存储区域网或其它配置中的设备。储存器1056和1066可在多个处理器、多个机架或多个计算设备之间被共享,并且可包括存储可被处理器中的一个或多个执行的指令的计算机可读介质。存储器1054和1064可包括例如易失性存储器单元、非易失性存储器单元和/或其它形式的计算机可读介质,诸如磁盘或光盘、闪存、高速缓存器、随机存取储器(RAM)、只读存储器(ROM)及其组合。存储器(诸如存储器1054)还可在处理器1052a至1052n之间被共享。可例如跨储存器1056和存储器1054存储数据结构,诸如索引。计算设备1000可包括未示出的其它组件,诸如控制器、总线、输入/输出设备、通信模块等。
整个系统(诸如系统100)可由相互通信的多个计算设备1000构成。例如,设备1080a可与设备1080b、1080c和1080d通信,并且这些可被统称为系统100。作为另一示例,图1的系统100可包括一个或多个计算设备1000作为所保存查询的引擎150。此外,计算设备中的某些可位于在地理上相互接近处,并且其它的可在地理上位于远处。计算设备1000的布局仅仅是示例,并且系统可采取其它布局或配置。
各种实施方式可以包括以一个或多个计算机程序的形式的实施方式,其可以在可编程系统上执行和/或解释,所述可编程系统包括可以以是通专用或用的、被耦合以从存储系统接收数据和指令、以及向其发射数据和指令的至少一个可编程处理器、至少一个输入设备以及至少一个输出设备。
这些计算机程序(也称为程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,并且可以用高级面向过程和/或面向对象的编程语言和/或用汇编/机器语言来实现。如本文所使用的,术语“机器可读介质”、“计算机可读介质”指的是被用来向可编程处理器提供机器指令和/或数据的任何非暂时性计算机程序产品、装置和/或设备(例如,磁盘、光盘、存储器(随机存取储器(RAM)和只读存储器(ROM))、可编程逻辑设备(PLD))。
可以在计算系统中实现这里所述的系统和技术,该计算系统包括后端组件(例如,作为数据服务器),或者其包括中间件组件(例如,应用服务器),或者其包括前端组件(例如,客户端计算机,其具有用户可以通过其与这里所述的系统和技术的实施方式相交互的图形用户界面或web浏览器)或这样的后端、中间件或前端组件的任何组合。可以以用数字数据通信的任何形式或介质(例如,通信网络)将系统的组件互连。通信网络的示例包括局域网(“LAN”)、广域网(“WAN”)以及互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般地相互远离并通常通过通信网络进行交互。客户端和服务器的关系借助于在相应的计算机上运行且相互具有客户-服务器关系的计算机程序发生。
已描述了许多实施方式。然而,应理解的是在不脱离本发明的精神和范围的情况下,可进行各种修改。另外,图中所描绘的逻辑流程不要求所示的特定顺序或连续顺序以实现期望的结果。另外,从所述流程,可提供其它步骤或者可消除步骤,并且还可向所述系统添加或从其移除其它组件。因此,其它实施方式在以下权利要求的范围内。
Claims (21)
1.一种计算机系统,包括:
至少一个处理器;以及
至少一个存储器,所述至少一个存储器存储:
被边缘连接的节点的数据图表,
多个所保存的查询,每个查询由要被满足以获取在用于该查询的查询结果中的成员资格的一个或多个约束来定义,每个约束指定所述边缘中的至少一个,以及
指令,所述指令在被所述至少一个处理器执行时使得所述系统:
响应于利用源节点、更新边缘以及目标节点来更新所述数据图表的操作而识别目标约束,所述目标约束指定包括所述更新边缘的路径,并且所述目标约束属于第一所保存的查询,
评估用于成员节点的所述目标约束以通过经由所述目标约束的所述路径遍历所述图表来确定用于所述目标约束的状态,
基于所述状态来确定用于所述第一所保存的查询的经叠缩的定义是否指示所述成员节点是响应于或不响应于所述第一所保存的查询,以及
在所述经叠缩的定义指示所述成员节点是响应或不响应的情况下,根据所述经叠缩的定义而利用所述成员节点来更新所述第一所保存的查询的所保存的查询结果。
2.根据权利要求1所述的系统,其中,所述存储器进一步存储按边缘对所述约束的索引,所述索引被用来识别所述目标约束。
3.根据权利要求1或2所述的系统,其中,所述目标约束是第一目标约束,并且所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时使得所述系统:
识别属于所述第一所保存的查询的第二目标约束;所述第二目标约束指定包括所述更新边缘的路径;所述第二目标约束具有比所述第一目标约束的路径长度更长的路径长度;以及
将用于所述第二目标约束的状态设置成指示所述第二目标约束未解算的状态。
4.根据权利要求3所述的系统,其中,所述状态是第一状态,并且所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时使得系统:
基于所述第一状态而确定用于所述第一所保存的查询的经叠缩的定义未能指示所述成员节点是响应于或不响应于所述第一所保存的查询;
评估用于所述成员节点的所述第二目标约束以通过经由所述第二目标约束的所述路径遍历所述图表来确定用于所述第二目标约束的第二状态;以及
基于所述第一状态和所述第二状态而确定用于所述第一查询的所述经叠缩的定义是否指示所述成员节点是响应于或不响应于所述第一所保存的查询,以及
在所述经叠缩的定义指示所述成员节点是响应或不响应的情况下,根据所述经叠缩的定义而利用所述成员节点来更新所述第一所保存的查询的所保存的查询结果。
5.根据权利要求1至4中的任一项所述的系统,其中,所述目标约束是第一目标约束,并且所述状态是第一状态,并且所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时,使得所述系统:
将所述图表的所述遍历的结果存储在所述存储器中;
识别用于所述第一查询的第二目标约束,所述第二目标约束具有包括所述第一目标约束的所述路径的路径;
在评估所述第二目标约束时使用所存储的所述遍历的所述结果以确定用于所述第二目标约束的第二状态;
基于所述第一状态和所述第二状态而确定用于所述第一所保存的查询的所述经叠缩的定义是否指示所述成员节点是响应于或不响应于所述第一所保存的查询;以及
在所述经叠缩的定义指示所述成员节点是响应或不响应的情况下根据所述经叠缩的定义而利用所述成员节点来更新所述第一所保存的查询的所保存的查询结果。
6.根据权利要求1至5中的任一项所述的系统,其中,所述更新是第一更新,并且所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时使得所述系统:
存储所述数据图表的所述遍历的结果;以及
当对所述数据图表的后续更新包括与所述第一更新的所述源节点不同的源节点时删除所存储的结果。
7.根据权利要求1至6中的任一项所述的系统,其中,所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时使得所述系统:
存储所述数据图表的所述遍历的结果;以及
使用所存储的结果来评估指定包括所述目标约束的所述路径的路径的第二目标约束。
8.根据权利要求1至7中的任一项所述的系统,其中,所述目标约束是第一目标约束,并且所述存储器进一步存储指令,所述指令在被所述至少一个处理器执行时使得所述系统:
识别多个目标约束,所述第一目标约束是所述多个目标约束中的一个,所述多个目标约束是用于至少两个查询,并且所述第一所保存的查询是所述至少两个查询中的一个;以及
智能地评估所述多个目标约束以便以较长的路径长度延迟针对目标约束的遍历。
9.一种方法,包括:
使用至少一个处理器来识别目标约束,所述目标约束指定数据图表中的包括在对所述数据图表的更新中所指定的边缘的路径,所述识别被所述更新触发;
使用所述至少一个处理器通过经由所述路径遍历所述图表来确定用于所述目标约束的状态;
基于所述状态而确定用于包括所述约束的第一查询的经叠缩的定义指示成员节点是响应于所述第一查询的;以及
根据所述经叠缩的定义使用在所述遍历期间所识别的所述成员节点来更新用于所述第一查询的所保存的查询结果。
10.根据权利要求9所述的方法,其中,使用多个约束的索引来识别所述目标约束,所述索引是按边缘来组织的。
11.根据权利要求9或10所述的方法,其中,所述更新包括在源节点与目标节点之间添加所述更新边缘,并且根据所述经叠缩的定义来更新所保存的查询结果包括向所保存的查询结果添加所述成员节点。
12.根据权利要求9或10所述的方法,其中,所述更新包括在源节点与目标节点之间移除更新边缘,并且根据所述经叠缩的定义来更新所保存的查询结果包括保持所保存的查询结果。
13.根据权利要求9至12中的任一项所述的方法,其中,所述目标约束包括第一目标约束,并且所述方法进一步包括:
识别属于所述第一查询的第二目标约束;所述第二目标约束指定包括所述更新边缘的路径,所述第二目标约束具有比所述第一目标约束的路径长度更长的路径长度;以及
将用于所述第二目标约束的状态设置成指示所述第二目标约束未解算的状态。
14.根据权利要求13所述的方法,其中,所述状态包括第一状态,并且所述方法进一步包括:
基于所述第一状态而确定用于所述第一查询的经叠缩的定义未能指示所述成员节点是响应于还是不响应于所述第一查询;
评估用于所述成员节点的所述第二目标约束以通过经由所述第二目标约束的所述路径遍历所述图表来确定用于所述第二目标约束的第二状态;
基于所述第一状态和所述第二状态来确定用于所述第一查询的所述经叠缩的定义指示所述成员节点是响应于所述第一查询;以及
根据所述经叠缩的定义而利用所述成员节点来更新所述第一查询的所保存的查询结果。
15.根据权利要求9至14中的任一项所述的方法,其中,所述目标约束是第一目标约束,并且所述状态是第一状态,并且所述方法进一步包括:
存储所述图表的所述遍历的结果;
识别用于所述第一查询的第二目标约束,所述第二目标约束具有包括所述第一目标约束的所述路径的路径;以及
在评估所述第二目标约束时使用所存储的所述遍历的结果以确定用于所述第二目标约束的第二状态,
其中,确定用于所述第一查询的所述经叠缩的定义指示所述成员节点是响应于所述第一查询是基于所述第一状态和所述第二状态。
16.根据权利要求9至15中的任一项所述的方法,其中,所述更新是第一更新,并且所述方法进一步包括:
存储所述数据图表的所述遍历的结果;以及
当对所述数据图表的后续更新包括与所述第一更新的源节点不同的源节点时删除所存储的结果。
17.根据权利要求9至16中的任一项所述的方法,所述方法进一步包括:
存储所述数据图表的所述遍历的结果;以及
使用所存储的结果来评估指定包括所述目标约束的所述路径的路径的第二目标约束。
18.根据权利要求9至17中的任一项所述的方法,所述方法进一步包括:
按源节点将对所述数据图表的多个更新进行分组,所述多个更新相互间在五分钟内发生,并且对所述数据图表的所述更新是所述多个更新中的一个,
其中,识别所述目标约束是在所述分组之后实时地发生的。
19.一种方法,包括:
响应于利用源节点、更新边缘以及目标节点来更新数据图表的操作,使用至少一个处理器来识别目标约束,所述目标约束指定包括所述更新边缘的所述数据图表中的路径;
使用所述至少一个处理器通过经由所述路径遍历所述图表来确定用于所述目标约束的状态;
基于所述状态来确定用于包括所述约束的第一查询的经叠缩的定义指示成员节点不响应于所述第一查询;以及
根据所述经叠缩的定义使用在所述遍历期间所识别的所述成员节点来更新用于所述第一查询的所保存的查询结果。
20.根据权利要求19所述的方法,
其中,所述更新是在所述源节点与所述目标节点之间移除所述更新边缘,并且根据所述经叠缩的定义来更新所保存的查询结果包括从所保存的查询结果移除所述成员节点。
21.根据权利要求19所述的方法,
其中,所述更新是在所述源节点与所述目标节点之间添加所述更新边缘,并且根据所述经叠缩的定义来更新所保存的查询结果包括保持所保存的查询结果。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/306,969 US9626407B2 (en) | 2014-06-17 | 2014-06-17 | Real-time saved-query updates for a large graph |
US14/306,969 | 2014-06-17 | ||
PCT/US2015/033967 WO2015195335A1 (en) | 2014-06-17 | 2015-06-03 | Real-time saved-query updates for a large graph |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106462625A true CN106462625A (zh) | 2017-02-22 |
CN106462625B CN106462625B (zh) | 2019-11-22 |
Family
ID=53396616
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580030355.8A Active CN106462625B (zh) | 2014-06-17 | 2015-06-03 | 针对大型图表的实时所保存查询更新 |
Country Status (6)
Country | Link |
---|---|
US (2) | US9626407B2 (zh) |
EP (1) | EP3158466B1 (zh) |
JP (1) | JP6277286B2 (zh) |
CN (1) | CN106462625B (zh) |
RU (1) | RU2645286C1 (zh) |
WO (1) | WO2015195335A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110622156A (zh) * | 2017-05-12 | 2019-12-27 | 华为技术有限公司 | 用于查询大图的增量图计算 |
CN113760971A (zh) * | 2021-11-09 | 2021-12-07 | 通联数据股份公司 | 用于检索图数据库的数据的方法、计算设备和存储介质 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9626407B2 (en) | 2014-06-17 | 2017-04-18 | Google Inc. | Real-time saved-query updates for a large graph |
US10049132B2 (en) * | 2014-06-26 | 2018-08-14 | Excalibur Ip, Llc | Personalizing query rewrites for ad matching |
US10296630B2 (en) | 2014-10-10 | 2019-05-21 | Salesforce.Com, Inc. | Graph representation of data extraction for use with a data repository |
US10162550B2 (en) * | 2014-10-15 | 2018-12-25 | Nec Corporation | Large-scale, dynamic graph storage and processing system |
US11120069B2 (en) | 2016-07-21 | 2021-09-14 | International Business Machines Corporation | Graph-based online image queries |
US10467229B2 (en) | 2016-09-30 | 2019-11-05 | Microsoft Technology Licensing, Llc. | Query-time analytics on graph queries spanning subgraphs |
US10545945B2 (en) * | 2016-10-28 | 2020-01-28 | Microsoft Technology Licensing, Llc | Change monitoring spanning graph queries |
US10402403B2 (en) | 2016-12-15 | 2019-09-03 | Microsoft Technology Licensing, Llc | Utilization of probabilistic characteristics for reduction of graph database traversals |
US10445361B2 (en) | 2016-12-15 | 2019-10-15 | Microsoft Technology Licensing, Llc | Caching of subgraphs and integration of cached subgraphs into graph query results |
US10311050B2 (en) * | 2017-01-23 | 2019-06-04 | International Business Machines Corporation | Crowdsourced discovery of paths in a knowledge graph |
US10242223B2 (en) | 2017-02-27 | 2019-03-26 | Microsoft Technology Licensing, Llc | Access controlled graph query spanning |
US20180260190A1 (en) * | 2017-03-10 | 2018-09-13 | Microsoft Technology Licensing, Llc | Split and merge graphs |
US20180260442A1 (en) * | 2017-03-10 | 2018-09-13 | Microsoft Technology Licensing, Llc | Self-tutoring graph of event data |
US20180285818A1 (en) * | 2017-04-04 | 2018-10-04 | Inersi Inc. | Collaboration platform |
US11243949B2 (en) | 2017-04-21 | 2022-02-08 | Microsoft Technology Licensing, Llc | Query execution across multiple graphs |
US11500867B2 (en) * | 2018-11-07 | 2022-11-15 | International Business Machines Corporation | Identification of multiple foci for topic summaries in a question answering system |
JP7360047B2 (ja) | 2020-02-26 | 2023-10-12 | 富士通株式会社 | 検索処理プログラム、検索処理方法および検索処理装置 |
USD1025348S1 (en) | 2020-04-16 | 2024-04-30 | Intersurgical Ag | Airway device |
US11886433B2 (en) * | 2022-01-10 | 2024-01-30 | Red Hat, Inc. | Dynamic data batching for graph-based structures |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080306906A1 (en) * | 2003-04-30 | 2008-12-11 | International Business Machines Corporation | System for aggregation subquery join elimination |
US20090006314A1 (en) * | 2007-06-28 | 2009-01-01 | International Business Machines Corporation | Index exploitation |
US8688683B2 (en) * | 2009-11-30 | 2014-04-01 | Business Objects Software Ltd. | Query plan reformulation |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6581205B1 (en) | 1998-12-17 | 2003-06-17 | International Business Machines Corporation | Intelligent compilation of materialized view maintenance for query processing systems |
US6826562B1 (en) * | 1999-11-29 | 2004-11-30 | International Business Machines Corporation | Method of simplifying and optimizing scalar subqueries and derived tables that return exactly or at most one tuple |
US7281002B2 (en) | 2004-03-01 | 2007-10-09 | International Business Machine Corporation | Organizing related search results |
US20050235001A1 (en) | 2004-03-31 | 2005-10-20 | Nitzan Peleg | Method and apparatus for refreshing materialized views |
US7877377B2 (en) * | 2004-06-03 | 2011-01-25 | International Business Machines Corporation | Dropping tautological predicates from SQL queries for reusability |
US20060047696A1 (en) * | 2004-08-24 | 2006-03-02 | Microsoft Corporation | Partially materialized views |
US7877350B2 (en) | 2005-06-27 | 2011-01-25 | Ab Initio Technology Llc | Managing metadata for graph-based computations |
US7873627B2 (en) * | 2006-01-18 | 2011-01-18 | Microsoft Corporation | Relational database scalar subquery optimization |
RU2419862C2 (ru) * | 2006-06-01 | 2011-05-27 | Медиарайф Местль Унд Райф Коммуникационс- Унд Информационстехнологиен Оег | Способ управления реляционной системой базы данных |
CN101501687B (zh) | 2006-06-01 | 2013-02-13 | 梅迪尔雷夫默斯特尔和雷夫通信与信息技术Oeg公司 | 控制关系数据库系统的方法 |
US8214895B2 (en) | 2007-09-26 | 2012-07-03 | Microsoft Corporation | Whitelist and blacklist identification data |
US20100318538A1 (en) | 2009-06-12 | 2010-12-16 | Google Inc. | Predictive searching and associated cache management |
WO2011032077A2 (en) | 2009-09-11 | 2011-03-17 | University Of Maryland, College Park | System and method for data management in large data networks |
US9081578B1 (en) | 2011-10-04 | 2015-07-14 | Amazon Technologies, Inc. | System and method for graph conditioning with non-overlapping orderable values for efficient graph evaluation |
US8682932B2 (en) | 2012-02-16 | 2014-03-25 | Oracle International Corporation | Mechanisms for searching enterprise data graphs |
US8484208B1 (en) | 2012-02-16 | 2013-07-09 | Oracle International Corporation | Displaying results of keyword search over enterprise data |
US10031968B2 (en) * | 2012-10-11 | 2018-07-24 | Veveo, Inc. | Method for adaptive conversation state management with filtering operators applied dynamically as part of a conversational interface |
US9031933B2 (en) | 2013-04-03 | 2015-05-12 | International Business Machines Corporation | Method and apparatus for optimizing the evaluation of semantic web queries |
US20140337373A1 (en) | 2013-05-07 | 2014-11-13 | Magnet Systems, Inc. | System for managing graph queries on relationships among entities using graph index |
US10133776B2 (en) * | 2013-06-20 | 2018-11-20 | Oracle International Corporation | Transforming a query by eliminating a subquery |
US9626407B2 (en) | 2014-06-17 | 2017-04-18 | Google Inc. | Real-time saved-query updates for a large graph |
-
2014
- 2014-06-17 US US14/306,969 patent/US9626407B2/en active Active
-
2015
- 2015-06-03 EP EP15729035.4A patent/EP3158466B1/en active Active
- 2015-06-03 WO PCT/US2015/033967 patent/WO2015195335A1/en active Application Filing
- 2015-06-03 JP JP2016560405A patent/JP6277286B2/ja active Active
- 2015-06-03 CN CN201580030355.8A patent/CN106462625B/zh active Active
- 2015-06-03 RU RU2016149782A patent/RU2645286C1/ru active
-
2017
- 2017-04-17 US US15/488,852 patent/US9996581B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080306906A1 (en) * | 2003-04-30 | 2008-12-11 | International Business Machines Corporation | System for aggregation subquery join elimination |
US20090006314A1 (en) * | 2007-06-28 | 2009-01-01 | International Business Machines Corporation | Index exploitation |
US8688683B2 (en) * | 2009-11-30 | 2014-04-01 | Business Objects Software Ltd. | Query plan reformulation |
Non-Patent Citations (1)
Title |
---|
PETER T.WOOD: ""Query languages for graph databases"", 《ACM SIGMOD RECORD》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110622156A (zh) * | 2017-05-12 | 2019-12-27 | 华为技术有限公司 | 用于查询大图的增量图计算 |
CN110622156B (zh) * | 2017-05-12 | 2022-05-31 | 华为技术有限公司 | 用于查询大图的增量图计算方法及设备 |
CN113760971A (zh) * | 2021-11-09 | 2021-12-07 | 通联数据股份公司 | 用于检索图数据库的数据的方法、计算设备和存储介质 |
CN113760971B (zh) * | 2021-11-09 | 2022-02-22 | 通联数据股份公司 | 用于检索图数据库的数据的方法、计算设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20170220636A1 (en) | 2017-08-03 |
RU2645286C1 (ru) | 2018-02-19 |
EP3158466B1 (en) | 2020-04-08 |
US9626407B2 (en) | 2017-04-18 |
JP6277286B2 (ja) | 2018-02-07 |
US20150363461A1 (en) | 2015-12-17 |
WO2015195335A1 (en) | 2015-12-23 |
US9996581B2 (en) | 2018-06-12 |
JP2017522627A (ja) | 2017-08-10 |
EP3158466A1 (en) | 2017-04-26 |
CN106462625B (zh) | 2019-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106462625A (zh) | 针对大型图表的实时所保存查询更新 | |
CN106503789A (zh) | 基于迪杰斯特拉和最大最小蚁群的无环最短路径搜索方法 | |
US11030254B2 (en) | Storage estimation in a data indexing and query system | |
CN107729251A (zh) | 测试用例管理方法及装置 | |
CN107247758B (zh) | 基于银行核心系统的数据处理方法 | |
CN109582289B (zh) | 规则引擎中规则流的处理方法、系统、存储介质和处理器 | |
CN104301233A (zh) | 路由访问方法、路由访问系统及用户终端 | |
CN105224532A (zh) | 数据处理方法及装置 | |
CN107239468A (zh) | 任务节点管理方法及装置 | |
CN105159884A (zh) | 行业词典的建立方法和装置及行业识别方法和装置 | |
CN110674231A (zh) | 一种面向数据湖的用户id集成方法和系统 | |
US11599396B2 (en) | Resegmenting chunks of data based on source type to facilitate load balancing | |
CN110110234A (zh) | 一种大数据实时搜索系统和方法 | |
CN102193988A (zh) | 一种图形数据库节点数据的检索方法及系统 | |
CN111259058B (zh) | 数据挖掘方法、数据挖掘装置和电子设备 | |
CN110263060B (zh) | 一种erp电子附件管理方法及计算机设备 | |
CN106446086A (zh) | 用于云计算环境的树结构操作方法和系统 | |
CN110611591A (zh) | 一种网络拓扑建立方法及装置 | |
CN109885542A (zh) | 项目文件管理方法、装置及存储介质 | |
US20160321575A1 (en) | Scoring entries in a repository of business process models to facilitate searching | |
CN104750822A (zh) | 提供搜索建议的方法和装置 | |
CN107592207B (zh) | 一种网管业务数据管理方法和网管业务数据管理装置 | |
CN106372089B (zh) | 确定词语位置的方法及装置 | |
CN111694919B (zh) | 生成信息的方法、装置、电子设备及计算机可读存储介质 | |
CN117389908B (zh) | 接口自动化测试用例的依赖关系分析方法、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: Google limited liability company Address before: American California Applicant before: Google Inc. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |