一种基于分组关联表的图数据存取方法和装置与流程

文档序号:16693411发布日期:2019-01-22 19:11阅读:214来源:国知局
一种基于分组关联表的图数据存取方法和装置与流程

本发明涉及数据处理领域,具体涉及一种基于分组关联表的图数据存取方法和装置。



背景技术:

图是计算机科学中一种常用的数据结构,是一种比线性表和树更为复杂的数据结构。在图中,任意两个顶点之间都可以存在联系。若两个顶点之间最多只有一条边,这样的图称为简单图;若存在两个顶点之间有多于一条边,则这样的图称为多重图。

存储图数据最常见的数据结构有:邻接表和关联矩阵。邻接表的特征是用线性表保存每个顶点的邻接顶点集合;关联矩阵则是用矩阵存储每个顶点的关联边。我们也可以用线性表保存每个顶点的关联边集合,称之为关联表。因此,使用邻接表无法保存多重图的完整拓扑信息,用关联矩阵或关联表则可以保存多重图的完整拓扑信息。

在图中进行遍历查询时,需要从一个顶点遍历到相邻顶点。关联表存储的是点和边的关联信息,通过关联表,从指定顶点能够获得关联边。但还需要通过边属性表中边的顶点信息,才能获得指定顶点的邻接顶点。由于顶点的邻接顶点信息和关联边信息没有聚集存储,因此,用关联矩阵或关联表存储图的拓扑信息,会导致图的遍历查询需要访问两个数据结构:关联表和边属性表,因此查询效率较低。

目前,已经有多种图数据的存取方法被提出。例如,专利cn104615677b给出了一种图数据存取方法及系统,主要针对分布式文件系统存储图数据时一般没有存储图的模式信息的问题,该图数据存取方法为:将待存储的图数据信息分成边数据信息与顶点数据信息,并分别存储边数据信息与顶点数据信息。其中,边数据信息包括边所连接的顶点标识符;顶点数据信息包括一个或多个顶点属性信息,顶点属性信息包括顶点属性数据的定位信息以及顶点属性解析信息的定位信息。该专利借助数据字典,在一定程度上能够对图数据进行高效存储和读取,提高了图数据的存储效率,减少了存储空间要求。然而,虽然提供了图数据的数据字典,但它主要着重于点和边的属性信息,没有对图的拓扑信息重点关注,如果需要查询拓扑信息还需要根据点和边的数据生成拓扑数据。由于点的邻接、关联数据也没有聚集存储,因此会影响查询遍历的效率。

专利cn105787020a给出了一种图数据划分方法及装置、专利cn106649441a给出了一种图数据的重划分方法及系统、专利cn107193896a给出了一种基于簇的图数据划分方法,上述三个专利均是针对在分布式数据平台中存储大图数据,需要对图数据进行划分的问题,给出了不同的划分方法,将图数据分别存储到各个计算节点上。将一个大图划分为多个子图,并通过合适的划分方法,在对图进行查询和分析时,能够减少计算节点之间的通信,从而达到提高图计算效率的目的。然而,由于图数据库中一般存储的都是点和边上含有属性的属性图,若将属性数据和拓扑数据聚集存储,会导致图数据的存储规模膨胀,从而给图的划分提出了更高的要求;而且,如果对图的属性数据一同进行划分,则无法在属性数据上建立统一的倒排索引,也会影响图数据库的查询效率。

鉴于此,克服上述现有技术所存在的缺陷是本技术领域亟待解决的问题。



技术实现要素:

本发明需要解决的技术问题是:

传统方案中通常采用关联表存储拓扑数据,无法将点的关联边信息和邻接点信息聚集存储,使得在图的遍历查询中需访问两个数据存储结构才能获取指定顶点的邻接顶点,降低了遍历查询效率;同时对不同类型数据的存储分配不够明确,无法根据查询需求快速访问相应的数据存储结构,影响图的遍历查询性能;

本发明通过如下技术方案达到上述目的:

第一方面,本发明提供了一种基于分组关联表的图数据存取方法,包括:

采用属性表存储图的属性数据,采用分组关联表存储图的拓扑数据;其中,所述拓扑数据中包含图中各顶点的邻接顶点和关联边信息;

对拓扑数据和属性数据分别设置不同的内存调度优先级;其中,所述拓扑数据的内存调度优先级高于所述属性数据;

根据不同的查询要求,选用相应的数据存储结构进行图数据信息的读取。

优选的,所述采用分组关联表存储图的拓扑数据,具体包括:

采用关联表存储图中顶点和边的关联信息,得到每个顶点的关联边集合;

在所述关联表中,对指定顶点的关联边按目的顶点进行分组,得到每个顶点的邻接顶点集合,形成分组关联表。

优选的,除所述拓扑数据外,所述分组关联表中还存储有图中顶点和边的关键属性和/或常用属性,则在形成所述分组关联表后,所述方法还包括:通过内嵌方式,将图中顶点和边的关键属性和/或常用属性存储至所述分组关联表中。

优选的,当所述分组关联表中内嵌存储有图中顶点和边的关键属性和/或常用属性时,所述顶点和边的关键属性和/或常用属性具有与所述拓扑数据相同的内存调度优先级。

优选的,所述顶点和边的关键属性包括顶点和边的标签和/或类别属性信息。

优选的,所述对拓扑数据和属性数据分别设置不同的内存调度优先级,具体为:所述拓扑数据永久存在于内存或分布式缓存系统中;所述属性数据保存在文件系统、分布式文件系统、关系数据库或分布式数据库系统中,在遍历需要时调度到所述内存或所述分布式缓存系统中。

优选的,所述根据不同的查询要求,选用相应的数据存储结构进行图数据相应信息的读取查询,具体为:

在需要拓扑数据和属性数据的遍历查询中,访问所述分组关联表与所述属性表共同完成图的遍历查询;

在不需要属性数据的遍历查询中,访问所述分组关联表,通过读取指定顶点的邻接顶点进行图的遍历查询;

在不需要属性数据的拓扑查询中,访问所述分组关联表,通过读取指定顶点的邻接顶点和关联边获取图的拓扑信息。

优选的,所述分组关联表在单机环境或分布式环境下实现。

优选的,采用key-value结构,利用面向对象编程语言以及映射和集合来实现图的分组关联表。

第二方面,本发明还提供了一种基于分组关联表的图数据存取装置,用于实现第一方面所述的基于分组关联表的图数据存取方法,所述装置包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9任一所述的基于分组关联表的图数据存取方法。

本发明的有益效果是:

本发明提供了一种基于分组关联表的图数据存取方法和装置,仅通过分组关联表即可完整地存储图中点的邻接点信息以及关联边信息,则在不使用属性信息的遍历查询中,仅访问分组关联表这一数据存储结构即可完成图的遍历查询,从而大大提高了图的遍历查询效率;同时,将属性数据和拓扑数据分开存储,并根据权重设置不同的内存调度优先级,则在进行遍历查询时,可根据不同的查询要求访问相应的数据存储结构,进一步提高了图的遍历查询性能。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种基于分组关联表的图数据存取方法的流程图;

图2为图1中所示步骤201的具体实施流程图;

图3为本发明实施例提供的多重图g的关系图;

图4为本发明实施例提供的多重图g中的边信息;

图5为本发明实施例提供的用于存储多重图g的分组关联表;

图6为本发明实施例提供的一种基于分组关联表的图数据存取装置的架构图。

【具体实施方式】

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。

实施例1:

本发明实施例提供了一种基于分组关联表的图数据存取方法,如图1,具体包括以下步骤:

步骤201,采用属性表存储图的属性数据,采用分组关联表存储图的拓扑数据;其中,所述拓扑数据中包含图中各顶点的邻接顶点和关联边信息。

图数据可分为属性数据和拓扑数据两类,所述属性数据与所述拓扑数据采用不同的数据存储结构进行分开存储;其中,图中点和边的属性数据由属性表存储,可通过key-value形式实现存储,也可通过链接或链表的方式实现存储。而图的拓扑数据采用分组关联表存储,也可通过key-value形式实现,分组关联表可存储图的完整拓扑信息。在本发明实施例中,可在单机环境下实现多重图的分组关联表,也可在分布式环境下实现多重图的分组关联表,从而实现大规模图数据库的存储。

步骤202,对拓扑数据和属性数据分别设置不同的内存调度优先级;其中,所述拓扑数据的内存调度优先级高于所述属性数据。

图的拓扑数据和属性数据在图的遍历查询中的作用权重是不同的,拓扑数据在图的遍历查询中使用较多,而属性数据在图的遍历查询中使用较少。假设将属性数据与拓扑数据均永久存储于内存或分布式缓存系统中,属性数据使用较少,但会长时间占用内存,会在一定程度上影响查询效率;假设将属性数据与拓扑数据均存放于内存以外的文件系统中,在遍历需要时再进行调度,由于拓扑数据使用较多,遍历时需要经常调度,这在一定程度上也会影响查询效率。

在本发明实施例中,将图的拓扑数据和属性数据分开存储后,便可对图的拓扑数据和属性数据设置不同的内存调度优先级。由于图的拓扑数据在图的遍历查询发挥作用大,因此可设置较高的内存调度优先级;而大部分属性数据在图的遍历查询作用较小,因此可设置较低的内存调度优先级。具体来讲,在大规模图数据库中,图的拓扑数据可永久存在于内存或分布式缓存系统中,则在图的遍历中可直接读取所述拓扑数据;而图的大部分属性数据可保存在文件系统、分布式文件系统、关系数据库或分布式数据库系统中,在遍历需要时才调度到所述内存或所述分布式缓存系统中,从而进行信息的读取。如此一来,便可有效利用系统内存,进一步提高遍历查询的效率。

步骤203,根据不同的查询要求,选用相应的数据存储结构进行图数据相关信息的读取。在前述步骤中,将图的数据分为属性数据和拓扑数据,并使用不同的数据存储结构进行存储,在进行遍历查询时,有时既需要拓扑数据又需要属性数据,有时只需要拓扑数据;查询拓扑数据时,有时只需进行点到邻接点的遍历,有时还需进行关联边信息。当查询要求不同时,需要访问的数据存储结构及需要读取的信息也就不同。

本发明提供的一种基于分组关联表的图数据存取方法中,仅通过分组关联表这一个数据存储结构,即可完整地存储顶点和顶点之间的邻接信息以及顶点和边之间的关联信息,还可内嵌存储顶点和边的关键属性和/或常用属性,则在大部分情况下,仅通过访问分组关联表这一数据存储结构即可完成图的遍历查询,从而大大提高了图的遍历查询效率;同时,将属性数据和拓扑数据分开存储,并根据权重设置不同的内存调度优先级,则在进行遍历查询时,可根据不同的查询要求访问相应的数据存储结构,进一步提高了图的遍历查询性能。

参考图2,在本发明实施例中,所述步骤201中对于拓扑数据的存储具体又包括以下步骤:

步骤2011,采用关联表存储图中顶点和边的关联信息,得到每个顶点的关联边集合。在多重图中,同一个起点和终点之间,可能存在超过一条的边,为保存完整的拓扑信息,首先使用关联表存储图的拓扑数据。在一个起点对象中,记录从它出发的所有关联边集合。

步骤2012,在所述关联表中,对指定顶点的关联边按目的顶点进行分组,得到每个顶点的邻接顶点集合,形成分组关联表。由所述步骤2011得到的关联表只能保存点的关联边信息,在图的遍历查询中,需要分两步才可获取指定顶点的邻接顶点:首先获取指定顶点的关联边标识符,然后找到指定关联边记录,从关联边记录中获得目的顶点,汇总得到指定顶点的邻接顶点集合,这大幅降低了图数据的遍历查询效率。因此,在得到关联表后,还需对图中指定顶点的关联边集合按目的顶点进行分组,从而得到能存储多重图的完整拓扑信息的分组关联边数据结构,即分组关联表。如此一来,使得所述分组关联表中不仅存储有指定顶点的关联边集合,还存储有指定顶点的邻接顶点集合。因此,在进行图的遍历查询时,对指定图的指定顶点,只需要一次方法调用就可以获得其邻接顶点;同样只需要一次方法调用,就可以获得其关联边,可实现多重图高效的遍历查询。

结合本发明实施例,还存在一种优选的实现方案,除所述拓扑数据外,所述分组关联表中还存储有图中顶点和边的关键属性和/或常用属性。在本发明实施例中,图的属性数据是和拓扑数据是分开存储的,但为了进一步提高图的遍历查询性能,对图中顶点和边的少量关键属性和/或常用属性,通过内嵌编码的性能,存储到在所述分组关联表中。所述关键属性可以是指图中顶点和边的标签信息和/或类别属性信息,所述常用属性是指在图的遍历查询中某些常用的点和边的属性信息;其中,所述关键属性与所述常用属性可由用户根据实际应用需要自行选择添加。则在所述步骤2022之后,还包括以下步骤:

步骤2013,通过内嵌方式,将图中顶点和边的关键属性和/或常用属性存储至所述分组关联表中。如果将这部分关键属性和/或常用属性存储至所述分组关联表中,则在所述属性数据的存储中,所述属性表中可只存储除这部分关键属性和/或常用属性以外的属性数据,避免重复存储。

其中,当所述分组关联表中内嵌存储有图中顶点和边的关键属性和/或常用属性时,在所述步骤202中,所述顶点和边的关键属性和/或常用属性设置与所述拓扑数据相同的内存调度优先级。而内存调度优先级较低的所述大部分属性数据,是指除顶点和边的少量关键属性和/或常用属性以外的属性数据,即不常用的属性数据。

在所述步骤203中,对于图的遍历查询具体可分为以下三种常见的情况:

第一种,在需要拓扑数据和属性数据的遍历查询中,访问所述分组关联表与所述属性表共同完成图的遍历查询。例如,在社交网络中进行关系人查找时,需要查找指定人员认识的多层关系人,即需要查找拓扑数据,并且在查找过程中需要对关系人按某些属性进行筛选,比如需要按关系人的毕业学校进行筛选,即需要查找属性数据。这种情况下就需要同时访问分组关联表和属性表,才能完成遍历查询。

第二种,在不需要属性数据的遍历查询中,访问所述分组关联表,通过读取指定顶点的邻接顶点进行图的遍历查询。所述分组关联表中保存了图的完整拓扑信息,在图中进行遍历查询时,可以只访问所述分组关联表来读取指定顶点的邻接顶点进行遍历。同时,由于所述分组关联表具有较高的内存调度优先级,所述分组关联表中图的拓扑数据可永久存在于内存或分布式缓存系统中。因此大部分情况下,在图的遍历中可直接由系统内存中读取所述拓扑数据,而不用读写文件系统、分布式文件系统、关系数据库或分布式数据库系统等,从而可以高效地完成图的遍历查询。

在优选方案中,所述分组关联表中还用内嵌的方式保存顶点和边的关键属性和/或常用属性。这是由于除了涉及拓扑信息,有时在遍历过程中往往还会使用顶点或边的一些属性对遍历结果进行筛选,最基本的是使用点和边的类别标签进行筛选。根据实际遍历查询需求,在所述分组关联表中内嵌存储这部分属性信息后,在大部分情况下,仍可以不访问图的属性数据存储结构,就可以完成图的遍历查询。比如,在社交网络中进行关系人查找时,需要查找指定人员认识的多层关系人。如果图数据库中的顶点都是人员顶点,并且查找没有涉及到关系人的其他属性,则通过访问所述分组关联表中的拓扑数据就可以完成多层关系人查找;如果图数据库中混存了不同类别的顶点,此时在所述分组关联表中内嵌存储顶点的类别标签后,则仍可以只通过访问所述分组关联表完成关系人查找。比如,如果需要查找多层的女性关系人,则在分组关联表中,需要对人员节点内嵌一个“性别”属性,如此一来即可不用访问属性表,直接通过访问所述分组关联表即可完成遍历查找。

第三种,在不需要属性数据的拓扑查询中,访问所述分组关联表,通过读取指定顶点的邻接顶点和关联边获取图的拓扑信息。通过所述分组关联表,不仅可获取指定顶点的邻接点集合,还可获取指定顶点的关联边集合。在上述第二种遍历查询下,可以只读取指定顶点的邻接顶点进行遍历,而在需要获取关联边信息时,还可在所述分组关联表中读取指定顶点的关联边。比如,如果只进行图的拓扑查询或变换,此时无需访问图的属性数据存储结构,而仅通过访问所述分组关联表中的拓扑数据,即可获取指定顶点的邻接点集合与关联边集合,从而获取图的完整拓扑信息,完成图的拓扑查询或变换,例如求最短路径、网页节点数据库中进行pagerank运算等。

假设存在一个多重图g,如图3所示,图g包括6个顶点和11条有向边,其中,v1-v6为图g中6个顶点的标识符,e1-e11为图g中的11条有向边标识符。图是一个由顶点集合和边集合构成的有序二元组,顶点代表实体,又被称为节点,边用来表示实体间的关系。图g的点集合中包含了图中每个顶点的标识符和属性信息,图g的边集合中包含了图中每条边的标识符、每条边的起点标识符和终点标识符以及每条边的属性信息。其中,各条边的边信息如图4所示,对于图中每条有向边,分别对应有起始点,比如,有向边e1的起点和终点分别为顶点v1和顶点v2,有向边e4的起点和终点分别为顶点v2和顶点v3。

对于图的拓扑数据的存储,首先根据图g的点集合和边集合信息,参照所述步骤2011,以每个顶点作为起点,记录从该起点出发的所有关联边,以关联表形式存储。比如,参考图3和图4,对于顶点v1,以v1为起点的有向边有e1,e2,e3,e11,则顶点v1的关联边集合为{e1,e2,e3,e11},对于其他各顶点,也采用相同的方法存储有顶点对应的关联边信息。其次,参照所述步骤2012,根据终点的不同,对于每个顶点的关联边集合进行分组,形成分组关联表;当起点和终点之间存在多条边时,这个分组中存储了多条有向边;当起点和终点之间仅存在一条边时,这个分组中只存储一条有向边。如图5所示,在顶点v1的关联边集合{e1,e2,e3,e11}中,有向边e1,e2,e3均是以顶点v2作为终点,因此作为一组有向边;仅有向边e11是以顶点v5作为终点,单独作为一组有向边,以此类推,其他各点的关联边集合也按照该原则进行分组。如此一来,所述分组关联表中不仅存储有各顶点的关联边信息,还存储了各顶点的邻接顶点信息,实现了点的邻接数据和关联数据的聚集存储。

在本发明实施例中,可采用key-value结构,利用面向对象编程语言以及映射和集合来实现图的分组关联表。实现用到的类定义如下:

上述edge类保存了一条有向边对象,其中,成员变量v1是起点标识符,成员变量v2是终点标识符。

上述groupedincidence类保存了一个顶点的分组关联边信息,其中,成员变量incidence用一个映射保存了一个关联边分组。incidence的key,是这组关联边的目的顶点标识符;incidence的value,则是具有相同起点和终点的有向边的标识符结合。

上述类graph保存了一个图的完整信息。其中,成员变量vertices使用一个映射保存了图的顶点属性信息,使用的vertex类只保存顶点的属性信息,类定义省略;成员变量edges使用映射保存了边属性信息;图的顶点属性信息和边属性信息均为图的属性数据,可通过属性表保存。成员变量incidences使用映射,通过分组关联表,保存了图的完整拓扑信息。其中,方法getadjacentvertices用来获取指定顶点的邻接点集合;通过分组关联表incidences,可以快速获得各顶点的所有邻接点的标识符集合,从而实现图数据库中高效的遍历查询。方法getincidentedges用来获取指定顶点的关联边集合,通过合并分组的方式,能够得到指定顶点的所有关联边集合,满足图数据库查询的需要。

在本发明实施例中,将属性数据和拓扑数据分开存储,属性数据采用传统的属性表来存储;对于拓扑数据,首先采用关联表存储图中每个顶点的关联边集合,再对每个顶点的关联边集合按边的目的顶点划分,形成分组关联表,使分组关联表中存有每个顶点的邻接顶点和关联边信息,同时还可内嵌存储部分关键属性和/或常用属性,以进一步提高遍历查询性能。由于拓扑数据和属性数据在图的遍历查询中的作用权重不同,因此对拓扑数据设置较高的内存调度优先级,最终根据不同的遍历查询要求,访问相应的数据存储结构,完成图的遍历或信息查询,有效提高了遍历查询效率。

实施例2:

在实施例1提供了一种基于分组关联表的图数据存取方法后,本发明实施例还提供了一种运用上述方法进行基于分组关联表的图数据存取的装置,如图6所示,为本发明实施例的基于分组关联表的图数据存取装置的架构示意图。所述图数据存取装置包括一个或多个处理器21以及存储器22。其中,图6中以一个处理器21为例。

处理器21和存储器22可以通过总线或者其他方式连接,图6中以通过总线连接为例。

存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的基于分组关联表的图数据存取方法以及对应的程序指令/模块。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行基于分组关联表的图数据存取装置的各种功能应用以及数据处理,即实现实施例1的基于分组关联表的图数据存取方法。

存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于分组关联表的图数据存取方法,例如,执行以上描述的图1和图2所示的各个步骤。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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