CN112287182B - 图数据存储、处理方法、装置及计算机存储介质 - Google Patents
图数据存储、处理方法、装置及计算机存储介质 Download PDFInfo
- Publication number
- CN112287182B CN112287182B CN202011192437.1A CN202011192437A CN112287182B CN 112287182 B CN112287182 B CN 112287182B CN 202011192437 A CN202011192437 A CN 202011192437A CN 112287182 B CN112287182 B CN 112287182B
- Authority
- CN
- China
- Prior art keywords
- vertex
- target
- data
- edge
- partition
- 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.)
- Active
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/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/90335—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种图数据存储、处理方法、装置及计算机存储介质,属于图数据库技术领域。方法包括:获取目标分区中存储的目标顶点的目标顶点顺序号,目标分区中存储有多个顶点,多个顶点分别对应有顶点顺序号;获取目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和另一个顶点的顶点顺序号、以及每条边的方向,得到目标顶点顺序号对应的目标边数据;将目标边数据写入目标分区中的边数据文件,边数据文件用于存储与各个顶点顺序号分别对应的边数据。本申请实施例以顶点所在的分区的分区编号以及该顶点在该分区中的顶点顺序号作为标识,从而减少进行图计算时所需的内存,进而提高计算节点的计算性能。
Description
技术领域
本申请实施例涉及图数据库技术领域,特别涉及一种图数据存储、处理方法、装置及计算机存储介质。
背景技术
图数据库一种采用顶点和边这种图示方式来表征实体以及实体之间的关系的非关系型数据库。其中,图数据库中的顶点指示一个实体,两个顶点之间的边指示这两个实体之间的关系。实体可以表征现实生活中的客体,关系可以表征不同客体之间的联系。图数据库中存储的数据可以称为图数据,该图数据包括顶点的数据和边的数据。其中,顶点的数据用于指示实体的相关信息,边的数据用于指示关系的相关信息。此外,图数据在图数据库中存储方式不同,将会对后续图数据处理带来不同的影响,因此,如何将图数据存储至图数据库是当前研究的热点。
相关技术中,图数据中的顶点的数据和边的数据通常是通过键值方式存储在图数据库中。其中,顶点的键用于指示顶点的ID(identity,身份标识),顶点的值用于指示顶点的属性。边的键用于指示边两端的两个顶点的ID(identity,身份标识),边的值用于指示边的属性。
在按照上述存储图数据的方式组织图数据库后,后续计算节点在进行图数据库的相关计算时,需要先将图数据库中的所有图数据加载到计算节点的内存。这种场景下,如果顶点的ID所占用的存储空间较大,导致顶点自身的键值和顶点所对应的边的键值所占用的存储空间都比较大。如此,加载到内存中的图数据将占用较大的内存空间,从而影响计算节点的计算性能。
发明内容
本申请实施例提供了一种图数据存储、处理方法、装置及计算机存储介质,可以提高计算节点的计算性能。所述技术方案如下:
一方面,提供了一种图数据存储方法,应用于存储有图数据的存储***中的目标节点,所述目标节点为所述存储***中的任一节点,所述方法包括:
获取目标分区中存储的目标顶点的目标顶点顺序号,所述目标分区为所述目标节点上的任一存储分区,所述目标分区中存储有多个顶点,所述多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序,所述目标顶点为所述多个顶点中任一顶点;
获取所述目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,得到所述目标顶点顺序号对应的目标边数据;
将所述目标边数据写入所述目标分区中的边数据文件,所述边数据文件用于存储与各顶点顺序号分别对应的边数据。
可选地,所述边数据文件中的边数据按照相应的顶点顺序号依次存储;
所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储。
可选地,所述边索引文件中存储各边数据的长度的数据类型为32字节的整数数据类型或者64字节的整数数据类型。
可选地,所述方法还包括:
将所述目标顶点顺序号和所述目标顶点的顶点标识之间的对应关系写入所述目标分区中的映射表,所述映射表中存储有与所述多个顶点的顶点标识分别对应顶点顺序号。
可选地,所述方法还包括:
将所述目标顶点的顶点数据写入所述目标分区中的顶点数据文件,所述顶点数据文件中存储有与所述各顶点顺序号分别对应的顶点数据。
可选地,所述顶点数据文件中的顶点数据按照相应顶点顺序号依次存储;
所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照顶点数据相应的顶点顺序号依次存储。
可选地,所述目标顶点的顶点数据包括所述目标顶点的属性。
另一方面、提供了一种图数据处理方法,应用于存储有图数据的存储***中的计算节点,所述方法包括:
确定目标节点的目标分区中存储的边数据文件中待处理的边数据;
根据所述边待处理的边数据进行图数据处理;
其中,所述目标节点为所述存储***中的任一节点,所述目标分区为所述目标节点上的任一存储分区,所述边数据文件中存储有与所述目标分区中存储的多个顶点的顶点顺序号分别对应的边数据,所述边数据中包括相应顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,所述目标分区中任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序。
可选地,所述边数据文件中的边数据按照相应的顶点顺序号依次存储,所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各个边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储;
所述确定目标节点的目标分区中存储的边数据文件中待处理的边数据,包括:
按照所述边索引文件中存储的各边数据的长度,确定所述待处理的边数据。
可选地,在所述图数据处理为迭代处理的情况下,所述待处理的边数据为依据所述各边数据长度依次迭代的当前待处理的边数据。
可选地,,在所述图数据处理为查询处理的情况下,所述待处理的边数据为根据所述各边数据长度和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,所述计算节点中还存储有参考顶点顺序号对应的边数据在所述边数据文件中的位置,所述参考顶点序号为所述目标分区中存储的多个顶点的顶点顺序号中的一个或多个顶点顺序号;
所述当前待处理的边数据为根据所述各边数据长度、所述参考顶点顺序号对应的边数据在所述边数据文件中的位置、以及所述和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,所述目标分区中存储有顶点数据文件,所述顶点数据文件中存储有所述多个顶点的顶点顺序号对应的顶点数据;
所述方法还包括:
根据待查询的目标顶点顺序号从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
可选地,所述多个顶点各自的顶点数据按照相应顶点顺序号依次存储,所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照相应的顶点顺序号依次存储;
所述根据所述目标顶点顺序号从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据,包括:
根据所述目标顶点顺序号和所述索引文件,确定所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置;
根据所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置,从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
可选地,所述目标分区中存储有映射表,所述映射表中存储有与所述多个顶点标识分别对应多个顶点顺序号;
所述根据所述边索引文件,对所述目标分区上存储的图数据进行处理之后,所述方法还包括:
确定图数据处理后得到的顶点的顶点顺序号;
根据所述映射表,获取确定的顶点顺序号对应的顶点标识,将所述顶点标识作为图数据处理结果。
另一方面,提供了一种图数据存储装置,应用于存储有图数据的存储***中的目标节点,所述目标节点为所述存储***中的任一节点,所述装置包括:
获取模块,用于获取目标分区中存储的目标顶点的目标顶点顺序号,所述目标分区为所述目标节点上的任一存储分区,所述目标分区中存储有多个顶点,所述多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序,所述目标顶点为所述多个顶点中任一顶点;
获取模块,还用于获取所述目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,得到所述目标顶点顺序号对应的目标边数据;
写入模块,用于将所述目标边数据写入所述目标分区中的边数据文件,所述边数据文件用于存储与各顶点顺序号分别对应的边数据。
可选地,所述边数据文件中的边数据按照相应的顶点顺序号依次存储;
所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储。
可选地,所述边索引文件中存储各个边数据的长度的数据类型为32字节的整数数据类型或者64字节的整数数据类型。
可选地,
写入模块,还用于将所述目标顶点顺序号和所述目标顶点的顶点标识之间的对应关系写入所述目标分区中的映射表,所述映射表中存储有与所述多个顶点的顶点标识分别对应顶点顺序号。
可选地,
写入模块,还用于将所述目标顶点的顶点数据写入所述目标分区中的顶点数据文件,所述顶点数据文件中存储有与所述各顶点顺序号分别对应的顶点数据。
可选地,所述顶点数据文件中的顶点数据按照相应顶点顺序号依次存储;
所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照顶点数据相应的顶点顺序号依次存储。
可选地,所述目标顶点的顶点数据包括所述目标顶点的属性。
另一方面、提供了一种图数据处理装置,应用于存储有图数据的存储***中的计算节点,所述装置包括:
确定模块,用于确定目标节点的目标分区中存储的边数据文件中待处理的边数据;
处理模块,用于根据所述边待处理的边数据进行图数据处理;
其中,所述目标节点为所述存储***中的任一节点,所述目标分区为所述目标节点上的任一存储分区,所述边数据文件中存储有与所述目标分区中存储的多个顶点的顶点顺序号分别对应的边数据,所述边数据中包括相应顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,所述目标分区中任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序。
可选地,所述边数据文件中的边数据按照相应的顶点顺序号依次存储,所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储;
所述确定模块用于:
按照所述边索引文件中存储的各边数据的长度,确定所述待处理的边数据。
可选地,在所述图数据处理为迭代处理的情况下,所述待处理的边数据为依据所述各边数据长度依次迭代的当前待处理的边数据。
可选地,在所述图数据处理为查询处理的情况下,所述待处理的边数据为根据所述各边数据长度和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,所述计算节点中还存储有参考顶点顺序号对应的边数据在所述边数据文件中的位置,所述参考顶点序号为所述目标分区中存储的多个顶点的顶点顺序号中的一个或多个顶点顺序号;
所述当前待处理的边数据为根据所述各个边数据长度、以及所述参考顶点顺序号对应的边数据在所述边数据文件中的位置、以及所述和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,所述目标分区中存储有顶点数据文件,所述顶点数据文件中存储有所述多个顶点的顶点顺序号对应的顶点数据;
所述装置还包括:
获取模块,用于根据待查询的目标顶点顺序号从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
可选地,所述多个顶点各自的顶点数据按照相应顶点顺序号依次存储,所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照相应的顶点顺序号依次存储;
所述获取模块,用于根据所述目标顶点顺序号和所述索引文件,确定所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置;
根据所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置,从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
可选地,所述目标分区中存储有映射表,所述映射表中存储有与所述多个顶点标识分别对应多个顶点顺序号;
所述确定模块,用于确定图数据处理后得到的顶点的顶点顺序号;
所述装置还包括获取模块,用于根据所述映射表,获取确定的顶点顺序号对应的顶点标识,将所述顶点标识作为图数据处理结果。
另一方面,提供了一种服务器,所述服务器包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述所述的图数据存储方法或图数据处理方法中任一的步骤。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述所述的图数据存储方法或图数据处理方法中任一的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行前述提供的方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
(1)可以将顶点以及顶点关联的边的信息均以分区编号和顶点顺序号的方式来存储,这样在后续进行图计算时,相对于基于顶点ID进行图计算,基于顶点所在的分区编号以及顶点顺序号进行图计算所处理的数据量较少,从而提高图计算的计算效率。
(2)此外,在图数据库中,顶点关联的边的边数据中仅仅用于存储另一端顶点的所在的分区编号以及顶点顺序号和边方向,相对于相关技术中需要存储边两端的顶点的ID,本申请实施例提供的存储方法还可以节省存储***中的存储空间。
(3)后续在进行图计算时,加载到内存中的顶点的相关信息中可以使用顶点所在的分区编号和顶点顺序号替代顶点的ID,从而减少加载到内存中的数据的量,避免出现内存溢出导致图计算无法完成的问题,从而提升计算节点的计算性能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种存储***的示意图;
图2是本申请实施例提供的一种边数据文件的格式示意图;
图3是本申请实施例提供的一种图数据存储方法流程图;
图4是本申请实施例提供的一种替换标识的流程示意图;
图5是本申请实施例提供的一种图数据处理方法流程图;
图6是本申请实施例提供的一种图数据存储装置的结构示意图;
图7是本申请实施例提供的一种图数据处理装置的结构示意图;
图8是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细解释说明之前,先对本申请实施例的应用场景进行解释说明。
为了提高图数据库的数据处理速度,目前的图数据库通常为基于分布式存储***的图数据库。其中,分布式存储***中包括多个节点,每个节点用于存储图数据库中的部分图数据。该分布式存储***还可以称为集群式存储环境。
此外,为了便于对节点上存储的图数据进行管理,将节点的存储空间划分为不同的分区,然后将图数据分别放置在不同的分区中。其中,任一节点上的存储空间可以包括该节点本地的磁盘等存储介质上的存储空间,也可以包括该节点下挂的其他存储设备上的存储空间,还可以包括该节点上配置的虚拟的存储空间,本申请实施例对此不做具体限定。
另外,目前在很多场景下需要基于图数据库执行图计算。图计算通常包括确定图数据库中顶点或边的分布形态等。比如,需要统计图数据库中入度大于2的顶点的数量,这种情况下,就可以对该图数据库进行图计算。其中,顶点的入度是指指向该顶点的边的数量,顶点的出度是指该顶点指向其他顶点的边的数量。
本申请实施例提供的方法可以应用于对图数据库进行图计算的场景中。此外,本申请实施例提供的方法可以应用于上述分布式存储***中,当然也可以应用于集中式存储***中。其中,集中式存储***仅仅包括一个节点。本申请实施例并不限定存储***的具体类别。
为了解决相关技术中的图数据的存储结构导致在大规模图数据库上执行图计算时内存占用大的问题,本申请实施例提供的了一种存储***,该存储***中针对每个顶点,以顶点所在的分区的分区编号以及该顶点在该分区中的顶点顺序号作为标识。由于顶点所在的分区的分区编号以及该顶点在该分区中的顶点顺序号所占用字节数很少,因此,相对于需要将顶点的ID作为标识加载到内存中,将顶点所在的分区的分区编号以及该顶点在该分区中的顶点顺序号作为标识加载到内存中,后者可以减少顶点的标识在内存中所占用的空间。从而提高计算节点的计算性能。
需要说明的是,分区编号是存储***基于分区策略对各个节点上的分区统一配置的,因此,基于分区编号便可确定当前是哪个节点上的哪个分区。所以在本申请实施例中,可以以顶点所在的分区的分区编号以及该顶点在该分区中的顶点顺序号作为该顶点的唯一标识。
为了后续便于说明,在此先对本申请实施例提供的存储***中数据组织方式进行解释说明。
图1是本申请实施例提供的一种存储***的示意图。如图1所示,该存储***中包括节点(node)i,其中,节点i为存储***包括的一个或多个节点中任一节点。图1所示的存储***可以包括一个节点,也可以包括多个节点。图1中仅仅以一个节点为例进行说明。对于图1中的存储***100中其他节点,该其他节点上的数据组织方式可以参考图1所示的节点i中的数据组织方式。
如图1所示,节点i上的存储空间包括n个分区。这n个分区在图1中分别标注为P1、P2、P3、…、Pn(图1中以P1、P…、Pn为例说明)。下面以第一个分区P1为例说明分区中的数据组织方式。其他分区中的数据组织方式和P1中基本一样,只不过存储的顶点不同,在此就不再过多解释。
如图1所示,分区P1中包括边数据文件、边索引文件、用于指示顶点ID和顶点顺序号之间的映射关系的映射表、顶点数据文件、以及顶点索引文件。
其中,假设分区P1中存储多个顶点的相关信息,这多个顶点分别对应一个顶点顺序号。该顶点顺序号可以按照顶点的相关信息在导入该分区的时间顺序依次设置。比如,分区P1中存储有3个顶点,分别为顶点A、顶点B和顶点C,且这3个顶点的相关信息导入该分区P1的先后顺序依次为顶点B、顶底C以及顶底A。如此,为顶点B配置的顶点顺序号为1号,为顶点C配置的顶点顺序号为2号,为顶点A配置的顶点顺序号为3号。
为了便于后续需要查询顶点ID,在确定了顶点的顶点顺序号之后,还可以将该顶点的顶点ID和顶点顺序号之间的对应关系写入用于指示顶点ID和顶点顺序号之间的映射关系的映射表中。该映射表可以以字典表的方式存储在分区中,也可以以其他存储方式存储在分区中,本申请实施例对此不做限定。
上述边数据文件用于存储这多个顶点中每个顶点的边数据。其中,每个顶点的边数据包括与该顶点关联的一条或多条边中每条边的另一个顶点的顶点顺序号和所在分区的分区编号、每条边的方向。并且,边数据文件中每个顶点的边数据和该顶点的顶点顺序号对应。如此,基于某个顶点的顶点顺序号便可查询到该顶点的边数据。
上述边数据文件中各个顶点的边数据的起始存储位置处可以添加相应的顶点顺序号,如此,便可直接基于边数据文件获取任一顶点的边数据。
可选地,可以将边数据文件中各个顶点的边数据按照相应的顶点顺序号依次存储,然后在分区P1中配置边索引文件。该边索引文件中存储有各个边数据的长度,且各个边数据的长度也按照相应的顶点顺序号依次存储。如此,根据边索引文件可以快速定位某个顶点的边数据在边数据文件中的存储位置。比如,当前需要确定顶点顺序号为3的顶点的边数据,则根据边索引文件中存储的第一个长度数据和第二个长度数据,便可定位出顶点顺序号为3的顶点的边数据在边数据文件中的起始位置。
需要说明的是,边索引文件中哪个位置对应存储第一个长度,哪个位置对应存储第二个长度是可以预先确定的。在一种可能的实现方式中,如果存储各个边数据长度的空间大小相同,在可以根据该相同的空间大小识别出边索引文件中存储的各个边数据长度。在另一种可能的实现方式中,如果存储各个边数据长度的空间大小不同,则可以根据预先存储边数据长度时使用的压缩算法确定每个边数据长度所占的空间大小,从而可以识别出边索引文件中存储的各个边数据长度。
此外,在目前的图数据库中,点对应的边的数量通常不会超过千万级,因此可以在边索引文件中采用32字节的整数型(INT型)的数据类型来存储各个边数据的长度。这种情况下,可以估算出边索引文件在内存中占用的空间大小M如下:
M=S*Len(INT)其中,上述公式中的S表示分区中存储的顶点的数量,Len(INT)标识每个边数据长度所占的空间大小,此处为32字节。
需要说明的是,当在边索引文件中采用INT型的数据类型来存储各个边数据的长度时,由于32字节的INT型最多允许有2^32个数值,因此边索引文件中最多能够存储2^32个边数据长度。如此,当前分区中最多允许有2^32个顶点。
如果估算出的单个分区中存储的顶点数量可能会大于2^32时,可以将INT型更换为64字节的整数型(LONG型),从而增加理论上允许的分区中的最大顶点数量。或者,还可以增加节点上的分区数量,以此降低每个分区上存储的的顶点数量。
由此可知,在本申请实施例中,边索引文件中存储各个边数据的长度的数据类型可以为32字节的整数数据类型、也可以为64字节的整数数据类型。具体使用哪种方式可以基于需求自适应配置,本申请实施例对此不做限定。
图2是本申请实施例提供的一种边数据文件中的数据组织方式示意图。如图2所示,假设分区中存储有顶点顺序号分别为0、1、…、k的k个顶点。其中,图2中的ei j表示顶点顺序号为i的顶点的第j条边。边数据文件中存储的每条边的边数据包括边方向和边另一端顶点的所在的分区的分区编号号和另一端顶点的顶点顺序号。
li表示顶点顺序号为i的顶点的边数据的长度。如2所示,边数据文件中各个顶点的边数据按照图2中的箭头方向依次存储在边数据文件中,从而实现边数据文件中各个顶点的边数据按照相应的顶点顺序号依次存储。这种情况下,边索引文件中的各个边数据的长度也按照相应顶点顺序号依次存储。以便于后续快速定位出某个顶点的边数据在边数据文件中的存储位置。
此外,在进行图计算过程中,如果涉及到顶点的属性的相关计算,还可以在分区P1中配置顶点数据文件。该顶点数据文件用于存储这多个顶点中每个顶点的顶点数据,该顶点数据中包括该顶点的属性。顶点数据文件中的各个顶点数据也和相应顶点的顶点顺序号对应,以便于基于顶点顺序号确定相应顶点的顶点数据。可选地,在图计算过程中不涉及到顶点的属性的相关计算时,也可以配置该顶点数据文件,只不过该顶点数据文件中各个顶点的顶点数据为空即可。
另外,在配置有顶点数据文件的情况下,可以将各个顶点数据也按照顶点顺序号依次存储。这种情况下,还可以配置顶点索引文件。该顶点索引文件用于存储顶点数据文件中各个顶点数据的长度。如此,根据顶点索引文件可以快速定位某个顶点的顶点数据在顶点数据文件中的存储位置。具体实现方式可以参考上述边索引文件的功能,在此不再详细说明。
和边索引文件一样,顶点索引文件中哪个位置对应存储那个顶点的顶点数据长度可以预先确定的。具体实现方式同样可以参考上述边索引文件的功能,在此不再详细说明。
基于图1所示的存储***,下面对本申请实施例提供的图数据存储方法以及图数据处理方法进行解释说明。
图3是本申请实施例提供的一种图数据存储方法流程图。图3所示的方法可以应用于图1所示的存储***中的任一节点,下述实施例以存储***中的目标节点为例进行说明,也即是,目标节点为存储有图数据的存储***中的任一节点。如图3所示,该方法包括如下几个步骤。
步骤301:获取目标分区中存储的目标顶点的目标顶点顺序号,目标分区为目标节点上的任一存储分区。
其中,目标分区中存储有多个顶点,多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示该顶点在这多个顶点中的排序,目标顶点为这多个顶点中任一顶点。
基于图1所示的存储***可知,目标分区中还可以存储有映射表。该映射表中存储有与各个顶点标识分别对应顶点顺序号,该顶点标识为顶点ID。因此,步骤301中,获取目标分区中存储的目标顶点的目标顶点顺序号的实现方式可以为:先从映射表中获取该目标顶点的顶点标识对应的顶点顺序号,如果能从映射表中获取到该目标顶点的顶点标识对应的顶点顺序号,则将获取的顶点顺序号作为目标顶点顺序号。如果不能从映射表中获取到该目标顶点的顶点标识对应的顶点顺序号,则为该目标顶点配置一个顶点顺序号。
上述为该目标顶点配置一个顶点顺序号可以按照预设的顶点顺序号生成规则配置。该顶点顺序号生成规则可以为将映射表中最大的顶点顺序号和参考数值相加得到新生成的顶点顺序号。该参考数值可以为1、也可以为2等等。需要说明的是,本申请实施例并不限定顶点顺序号生成规则的具体方式。
此外,在上述目标顶点顺序号为重新配置的顶点顺序号时,目标节点还可以将目标顶点顺序号和目标顶点的顶点标识之间的对应关系写入前述映射表,以完成对映射表的更新。
此外,在目标分区中没有映射表的情况下,目标节点可以基于其他的信息来获取目标顶点的顶点顺序号。比如,基于目标分区中记录的顶点存储日志来自动生成目标节点的顶点顺序号,其中顶点存储日志用于记录目标分区中各个顶点存储至目标分区的时间记录,以便于基于各个顶点存储至目标分区的先后顺序依次为各个顶点配置顶点顺序号。
步骤302:获取目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和另一个顶点的顶点顺序号、以及每条边的方向,得到目标顶点顺序号对应的目标边数据。
步骤302中目标顶点关联的一条或多条边中每条边是指目标顶点关联的所有边,以保证边数据的完整性。
此外,目标顶点关联的边可以是指向该目标顶点的边,也可以是经过该目标顶点指向其他顶点的边,也可以两者都包括。在目标顶点关联的边是指向该目标顶点的边,或者是经过该目标顶点指向其他顶点的边的任一者的情况下,其他顶点关联的边也按照统一规则确定即可。比如,目标分区中任一边数据中存储的均是指向该顶点的边的信息。或者目标分区中任一边数据中存储的是经过该顶点指向其他顶点的边的信息。
在本申请实施例中,为了提高后续图计算过程的效率,目标顶点关联的边可以是同时包括指向该目标顶点的边,以及经过该目标顶点指向其他顶点的边。如此,后续在得到某个顶点的顶点顺序号后,便可基于该顶点数据文件中与该顶点顺序号对应的边数据获取到该顶点关联的所有边的信息。这样就无需还要对其他顶点的边数据进行遍历,才能获取到该顶点关联的所有边的信息。
步骤303:将目标边数据写入目标分区中的边数据文件,该边数据文件用于存储与各个顶点顺序号分别对应的边数据。
在得到目标边数据后,便可将目标边数据写入边数据文件,以便后续基于边数据文件进行图计算。
在一种可能的实现方式中,将目标边数据文件按照目标顶点顺序号在目标分区存储的所有顶点的顶点顺序号中的排序存储至边数据文件。从而实现边数据文件中各个边数据按照相应的顶点顺序号依次存储。
这种场景下,由于目标分区中还存储有边索引文件,且边索引文件中存储边数据文件中各个边数据的长度,该边索引文件中存储的各个边数据的长度按照相应的顶点顺序号依次存储。因此,在将目标边数据写入边数据文件后,还需将目标边数据的长度按照目标顶点顶点顺序号在目标分区存储的所有顶点的顶点顺序号中的排序存储至边索引文件。
在另一种可能的实现方式中,如果目标分区中没有存储有边索引文件,这种场景下,在将目标边数据写入边数据文件时,还可以在目标边数据在边数据文件的存储的起始位置或终止位置添加标识符。该标志符用于指示当前写入的目标边数据为目标顶点顺序号对应的边数据,如此,便可不用在目标分区中配置边索引文件。
另外,如图1所示,可选地,在图计算可能会涉及顶点的属性的处理的情况,还可以在目标分区中配置顶点数据文件。顶点数据文件中存储有与各个顶点顺序号分别对应的顶点数据。在这种场景下,目标节点还可以将目标顶点的顶点数据写入顶点数据文件。
其中,目标顶点的顶点数据可以包括目标顶点的属性,也可以为空值。
此外,还可以将顶点数据文件中的顶点数据按照相应顶点顺序号依次存储。这种场景下,目标分区中还存储有顶点索引文件,顶点索引文件中存储顶点数据文件中各个顶点数据的长度,且顶点索引文件中存储的各个顶点数据的长度按照顶点数据相应的顶点顺序号依次存储。便于后续基于顶点索引文件快速查找顶点数据文件中某个顶点的顶点数据。
这种场景下,在将目标顶点的顶点数据写入顶点数据文件后,还需将目标顶点的顶点数据的长度写入顶点索引文件。具体实现方式可以参考前述将目标边数据写入边数据文件、以及将目标边数据的长度写入边索引文件,在此不再赘述。
和边数据文件一样,在本申请实施例中,也可以不对顶点数据文件配置顶点索引文件。这种情况下,在将目标顶点的顶点数据写入顶点数据文件时,还可以在目标顶点的顶点数据在顶点数据文件的存储的起始位置或终止位置添加标识符。此处的标志符用于指示当前写入的目标顶点的顶点数据为目标顶点顺序号对应的顶点数据,如此,便可不用在目标分区中配置顶点索引文件。
前述步骤301至步骤303用于解释说明如何针对某个顶点来更新相应的边数据文件、边索引文件、顶点数据文件以及顶点索引文件。可选地,前述步骤301和步骤303还可以应用在基于相关技术中已经构建的图数据库来生成边数据文件、边索引文件、顶点数据文件以及顶点索引文件的场景中。这种场景下,生成这些文件中的数据可以通过以下几个步骤来说明。
1、假设当前分区Ps需要生成上述几个文件。则先通过分布式计算方式并行遍历当前分区Ps内存储的所有的顶点的所有的原始边数据e<ids,idt>。e表征一条边,ids表征该边的一个顶点的ID,idt表征该边的另一个顶点的ID。其中,ids为设当前分区Ps中存储的一个顶点。
2、当前分区Ps根据数据分区策略确定顶点idt所在的分区Pt,查询顶点idt在分区Pt内的顶点顺序号。
3、分区Pt收到查询idt的顶点顺序号的请求后,先在保存顶点ID与顶点顺序号的映射表map<idi,Nt>中查询。若查询到idt对应的顶点顺序号则直接返回给当前分区Ps,否则分配顶点顺序号Nt=Nmax+1(Nmax为分区Pt已分配的最大顶点顺序号)给顶点idt,并将<idt,Nt>添加到映射表中。将分配的idt对应的顶点顺序号返回给当前分区Ps。
4、根据查询到的Nt和Pt替换e<ids,idt>中的idt,接着在Ps分区重复步骤3)查询ids的顶点顺序号Ns,并将Ns替换e<ids,idt>中的ids。将替换得到的e<Ns,Pt+Nt>及该边e的方向存储到边日志文件中。
5、当全部边均已替换完ID后,将最后一次更新后的映射表存储到当前分区Ps中。然后对边日志文件中的记录按照Ns排序,将同一顶点的边归并到一起得到该顶点的边数据,然后将各个顶点的边数据按照顶点顺序号顺序写入到边数据文件中。并将归并后的边数据的长度按照顶点顺序号顺序写入到边索引文件中。
6、如果后续图计算过程涉及顶点属性,可在给顶点分配顺序号后,即可将顶点对应的属性作为顶点数据写入顶点数据文件,顶点数据长度写入顶点索引文件中。
上述步骤1-4中将e<ids,idt>替换为e<Ns,Pt+Nt>的过程可以通过图4进一步进行说明。关于图4中的具体过程,在此就不再赘述了。
通过图3所示的图数据存储方法,本申请实施例至少可以实现如下几个技术效果:
(1)可以将顶点以及顶点关联的边的信息均以分区编号和顶点顺序号的方式来存储,这样在后续进行图计算时,相对于基于顶点ID进行图计算,基于顶点所在的分区编号以及顶点顺序号进行图计算所处理的数据量较少,从而提高图计算的计算效率。
(2)此外,在图数据库中,顶点关联的边的边数据中仅仅用于存储另一端顶点的所在的分区编号以及顶点顺序号和边方向,相对于相关技术中需要存储边两端的顶点的ID,本申请实施例提供的存储方法还可以节省存储***中的存储空间。
(3)后续在进行图计算时,加载到内存中的顶点的相关信息中可以使用顶点所在的分区编号和顶点顺序号替代顶点的ID,从而减少加载到内存中的数据的量,避免出现内存溢出导致图计算无法完成的问题。
基于图1所示的存储***和图3所示的图数据存储方法,本申请实施例还提供了一种图数据处理方法,用于说明在图计算过程中如何进行图数据处理。图5是本申请实施例提供的一种图数据处理方法流程图。该方法应用于计算节点,需要说明的是,该计算节点可以为图1所示的存储***中的节点,这种场景下计算节点和下述实施例中的目标节点为同一节点。可选地,该计算节点还可以为和存储***的节点分布式部署的单独用于进行图计算的节点。如图5所示,该方法包括如下几个步骤:
步骤501:确定目标节点的目标分区中存储的边数据文件中待处理的边数据。
在本申请实施例中,可以预先将目标节点的目标分区中存储的边索引文件加载到计算节点的内存中。基于前述边索引文件的功能可知,可以基于内存中加载的边索引文件依次去查询目标节点上的目标分区中的边数据文件中各个顶点的边数据,直至查询到待处理的边数据。
也即是,在内存中缓存有边索引文件的情况下,可以按照边索引文件中存储的各个边数据的长度,确定待处理的边数据。
此外,目前的图计算过程中涉及的图数据处理通常包括两类图数据处理。针对顶点的图数据处理和针对边的图数据处理类型。下面内容以针对边的图数据处理为例进行说明。其中,针对边的图数据处理又可以分为两类,一类是迭代全部的边数据,以统计某些指标,另一类是查询某个指定顶点的边数据。
因此,在图数据处理为迭代处理的情况下,待处理的边数据为依据各个边数据长度依次迭代的当前待处理的边数据。这种场景下,由于迭代过程边数据和边数据索引文件中的索引均为顺序读,且设计的存储结构较小,因此迭代性能较好。
在图数据处理为查询处理的情况下,待处理的边数据为根据各个边数据长度和当前待查询的顶点的顶点顺序号定位出的边数据。其中,根据顶点顺序号n和边索引文件,计算该顶点的边数据在边数据文件中的起始位置Pos-n,可以通过如下公式表示:
Pos-n=∑(i=0至n-1)li,其中,li为顶点顺序号在n之前的任一顶点顺序号对应的边数据的长度。
此外,考虑每次查询都要从边索引文件的开始位置重复计算,因此可以在首次迭代的过程中基于查询结构在内存中缓存部分中间位置的边数据的位置信息。例如,在内存中缓存顶点顺序号是1000整数倍对应的边数据的位置信息。如此,在下一次查询相邻位置的顶点顺序号的边数据的时候,只需要根据缓存数据计算少量边索引文件中的数据即可。
也即是,在计算节点中还存储有参考顶点顺序号对应的边数据在边数据文件中的位置,参考顶点序号为目标分区中存储的多个顶点的顶点顺序号中的一个或多个顶点顺序号。这种情况下,当前待处理的边数据为根据各个边数据长度、以及参考顶点顺序号对应的边数据在边数据文件中的位置、以及和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,还可以预先将目标节点的目标分区中存储的边索引文件和边数据文件均加载到计算节点的内存中。这种场景下,在计算节点的内存中便可实现待处理的边数据的查询,从而提高确定待处理边数据的效率。
此外,在目标分区中没有配置边索引文件的情况下,在首次进行图数据处理时,在依次遍历目标分区中边数据文件的各个边数据的情况下,便可在内存中生成针对目标分区中边数据文件的各个边数据的边索引文件。以便于后续再次进行图数据处理时,基于边索引文件来定位待处理的边数据,而不是再次遍历遍历目标分区中边数据文件的各个边数据然后定位出待处理的边数据,从而提高计算节点的计算性能。
步骤502:对该待处理的边数据进行图数据处理。
步骤502中对待处理的边数据进行图数据处理的具体操作取决于当前图计算需要实现的功能。本申请实施例并不限定对该待处理的边数据进行图数据处理的具体实现方式。
此外,步骤501和步骤502是以边数据为例说明。可选地,在本申请实施例中,图数据处理还可以包括对顶点数据的迭代处理或查询处理。
在一种可能的实现方式,目标分区中存储有顶点数据文件,顶点数据文件中存储有多个顶点的顶点顺序号各自的顶点数据。这种场景下,还可以根据待查询的目标顶点顺序号从顶点数据文件中获取目标顶点顺序号对应的顶点数据。
此外,多个顶点各自的顶点数据按照相应顶点顺序号依次存储,目标分区中还存储有顶点索引文件,顶点索引文件中存储顶点数据文件中各个顶点数据的长度,且顶点索引文件中存储的各个顶点数据的长度按照相应的顶点顺序号依次存储。这种场景下,上述根据目标顶点顺序号从顶点数据文件中获取目标顶点顺序号对应的顶点数据的具体过程可以为:根据目标顶点顺序号和索引文件,确定目标顶点顺序号对应的顶点数据在顶点数据文件中的位置;根据目标顶点顺序号对应的顶点数据在顶点数据文件中的位置,从顶点数据文件中获取目标顶点顺序号对应的顶点数据。
此外,目标分区中存储有映射表,映射表存储有与多个顶点标识分别对应多个顶点顺序号。这种场景下,在进行图数据处理之后,还可以确定图数据处理后得到的顶点的顶点顺序号;根据映射表,获取确定的顶点顺序号对应的顶点标识,将顶点标识作为图数据处理结果,该顶点标识同样为顶点ID。将该数据处理结果展示给用户。也即是,将顶点ID这种标识作为顶点对外的标识,将顶点所在分区的分区编号以及顶点顺序号作为存储***内部顶点的标识。这样不仅可以提高计算节点的计算性能以及存储***的存储性能,同时还可以提高顶点对外的显示功能,以便于用户能够快速对图数据处理结果进行下一步分析。
通过图5所示的图数据处理方法,本申请实施例至少可以实现如下几个技术效果:
(1)可以将顶点以及顶点关联的边的信息均以分区编号和顶点顺序号的方式来存储,这样在后续进行图计算时,相对于基于顶点ID进行图计算,基于顶点所在的分区编号以及顶点顺序号进行图计算所处理的数据量较少,从而提高图计算的计算效率。
(2)后续在进行图计算时,加载到内存中的顶点的相关信息中可以使用顶点所在的分区编号和顶点顺序号替代顶点的ID,从而减少加载到内存中的数据的量,避免出现内存溢出导致图计算无法完成的问题。
上述所有可选技术方案,均可按照任意结合形成本申请的可选实施例,本申请实施例对此不再一一赘述。
图6是本申请实施例提供的一种图数据存储装置的结构示意图。应用于存储有图数据的存储***中的目标节点,该目标节点为存储***中的任一节点。
如图6所示,该装置600包括:
获取模块601,用于获取目标分区中存储的目标顶点的目标顶点顺序号,目标分区为目标节点上的任一存储分区,目标分区中存储有多个顶点,多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示任一顶点在多个顶点中的排序,目标顶点为多个顶点中任一顶点;
获取模块601,还用于获取目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和另一个顶点的顶点顺序号、以及每条边的方向,得到目标顶点顺序号对应的目标边数据;
写入模块602,用于将目标边数据写入目标分区中的边数据文件,边数据文件用于存储与各顶点顺序号分别对应的边数据。
可选地,边数据文件中的边数据按照相应的顶点顺序号依次存储;
目标分区中还存储有边索引文件,边索引文件中存储边数据文件中各边数据的长度,且边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储。
可选地,边索引文件中存储各边数据的长度的数据类型为32字节的整数数据类型或者64字节的整数数据类型。
可选地,
写入模块,还用于将目标顶点顺序号和目标顶点的顶点标识之间的对应关系写入目标分区中的映射表,映射表中存储有与多个顶点的顶点标识分别对应顶点顺序号。
可选地,
写入模块,还用于将目标顶点的顶点数据写入目标分区中的顶点数据文件,顶点数据文件中存储有与各顶点顺序号分别对应的顶点数据。
可选地,顶点数据文件中的顶点数据按照相应顶点顺序号依次存储;
目标分区中还存储有顶点索引文件,顶点索引文件中存储顶点数据文件中各顶点数据的长度,且顶点索引文件中存储的各顶点数据的长度按照顶点数据相应的顶点顺序号依次存储。
可选地,目标顶点的顶点数据包括目标顶点的属性。
通过图6所示的装置,本申请实施例至少可以实现如下几个技术效果:
(1)可以将顶点以及顶点关联的边的信息均以分区编号和顶点顺序号的方式来存储,这样在后续进行图计算时,相对于基于顶点ID进行图计算,基于顶点所在的分区编号以及顶点顺序号进行图计算所处理的数据量较少,从而提高图计算的计算效率。
(2)此外,在图数据库中,顶点关联的边的边数据中仅仅用于存储另一端顶点的所在的分区编号以及顶点顺序号和边方向,相对于相关技术中需要存储边两端的顶点的ID,本申请实施例提供的存储方法还可以节省存储***中的存储空间。
(3)后续在进行图计算时,加载到内存中的顶点的相关信息中可以使用顶点所在的分区编号和顶点顺序号替代顶点的ID,从而减少加载到内存中的数据的量,避免出现内存溢出导致图计算无法完成的问题。
需要说明的是:上述实施例提供的图数据存储装置在进行图数据存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的图数据存储装置与图数据存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图7是本申请实施例提供的一种图数据处理装置的结构示意图。应用于存储有图数据的存储***中的计算节点。如图7所示,该装置700包括:
确定模块701,用于确定目标节点的目标分区中存储的边数据文件中待处理的边数据;
处理模块702,用于根据边待处理的边数据进行图数据处理;
其中,目标节点为存储有图数据的存储***中的任一节点,目标分区为目标节点上的任一存储分区,边数据文件中存储有与目标分区中存储的多个顶点的顶点顺序号分别对应的边数据,边数据中包括相应顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和另一个顶点的顶点顺序号、以及每条边的方向,目标分区中任一顶点的顶点顺序号指示任一顶点在多个顶点中的排序。
可选地,边数据文件中的边数据按照相应的顶点顺序号依次存储,所述目标分区中还存储有边索引文件,边索引文件中存储边数据文件中各边数据的长度,且边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储;
确定模块用于:
按照边索引文件中存储的各边数据的长度,确定待处理的边数据。
可选地,在图数据处理为迭代处理的情况下,待处理的边数据为依据各边数据长度依次迭代的当前待处理的边数据。
可选地,在图数据处理为查询处理的情况下,待处理的边数据为根据各边数据长度和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,,计算节点中还存储有参考顶点顺序号对应的边数据在边数据文件中的位置,参考顶点序号为目标分区中存储的多个顶点的顶点顺序号中的一个或多个顶点顺序号;
当前待处理的边数据为根据各边数据长度、以及参考顶点顺序号对应的边数据在边数据文件中的位置、以及和当前待查询的顶点的顶点顺序号定位出的边数据。
可选地,目标分区中存储有顶点数据文件,顶点数据文件中存储有多个顶点的顶点顺序号对应的顶点数据;
装置还包括:
获取模块,用于根据待查询的目标顶点顺序号从顶点数据文件中获取目标顶点顺序号对应的顶点数据。
可选地,多个顶点各自的顶点数据按照相应顶点顺序号依次存储,目标分区中还存储有顶点索引文件,顶点索引文件中存储顶点数据文件中各顶点数据的长度,且顶点索引文件中存储的各顶点数据的长度按照相应的顶点顺序号依次存储;
获取模块,用于根据目标顶点顺序号和索引文件,确定目标顶点顺序号对应的顶点数据在顶点数据文件中的位置;
根据目标顶点顺序号对应的顶点数据在顶点数据文件中的位置,从顶点数据文件中获取目标顶点顺序号对应的顶点数据。
可选地,目标分区中存储有映射表,映射表存储有与多个顶点标识分别对应多个顶点顺序号;
装置还包括:
确定模块,用于确定图数据处理后得到的顶点的顶点顺序号;
获取模块,用于根据映射表,获取确定的顶点顺序号对应的顶点标识,将顶点标识作为图数据处理结果。
通过图7所示的装置,本申请实施例至少可以实现如下几个技术效果:
(1)可以将顶点以及顶点关联的边的信息均以分区编号和顶点顺序号的方式来存储,这样在后续进行图计算时,相对于基于顶点ID进行图计算,基于顶点所在的分区编号以及顶点顺序号进行图计算所处理的数据量较少,从而提高图计算的计算效率。
(2)后续在进行图计算时,加载到内存中的顶点的相关信息中可以使用顶点所在的分区编号和顶点顺序号替代顶点的ID,从而减少加载到内存中的数据的量,避免出现内存溢出导致图计算无法完成的问题。
需要说明的是:上述实施例提供的图数据处理装置在进行图数据处理时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的图数据处理装置与图数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图8是本申请实施例提供的一种服务器的结构示意图。前述实施例中任一节点或计算节点均可以通过该服务器来实现。具体来讲:
服务器800包括中央处理单元(CPU)801、包括随机存取存储器(RAM)802和只读存储器(ROM)803的***存储器804,以及连接***存储器804和中央处理单元801的***总线805。服务器800还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(I/O***)806,和用于存储操作***813、应用程序814和其他程序模块815的大容量存储设备807。
基本输入/输出***806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中显示器808和输入设备809都通过连接到***总线805的输入/输出控制器810连接到中央处理单元801。基本输入/输出***806还可以包括输入/输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入/输出控制器810还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备807通过连接到***总线805的大容量存储控制器(未示出)连接到中央处理单元801。大容量存储设备807及其相关联的计算机可读介质为服务器800提供非易失性存储。也就是说,大容量存储设备807可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的***存储器804和大容量存储设备807可以统称为存储器。
根据本申请的各种实施例,服务器800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器800可以通过连接在***总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其他类型的网络或远程计算机***(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。所述一个或者一个以上程序包含用于进行本申请实施例提供的图数据存储或处理方法的指令。
本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述实施例提供的图数据存储或处理方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在服务器上运行时,使得服务器执行上述实施例提供的图数据存储或处理方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请实施例的较佳实施例,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (19)
1.一种图数据存储方法,其特征在于,应用于存储有图数据的存储***中的目标节点,所述目标节点为所述存储***中的任一节点,所述方法包括:
获取目标分区中存储的目标顶点的目标顶点顺序号,所述目标分区为所述目标节点上的任一存储分区,所述目标分区中存储有多个顶点,所述多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序,所述多个顶点的排序指示所述多个顶点导入所述目标分区的时间顺序,所述目标顶点为所述多个顶点中任一顶点;
获取所述目标顶点顺序号对应的目标边数据,所述目标边数据包括所述目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向;
将所述目标边数据写入所述目标分区中的边数据文件,所述边数据文件用于存储与各顶点顺序号分别对应的边数据。
2.如权利要求1所述的方法,其特征在于,所述边数据文件中的边数据按照相应的顶点顺序号依次存储;
所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储。
3.如权利要求2所述的方法,其特征在于,所述边索引文件中存储各边数据的长度的数据类型为32字节的整数数据类型或者64字节的整数数据类型。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
将所述目标顶点顺序号和所述目标顶点的顶点标识之间的对应关系写入所述目标分区中的映射表,所述映射表中存储有与所述多个顶点的顶点标识分别对应顶点顺序号。
5.如权利要求1至4任一所述的方法,其特征在于,所述方法还包括:
将所述目标顶点的顶点数据写入所述目标分区中的顶点数据文件,所述顶点数据文件中存储有与所述各顶点顺序号分别对应的顶点数据。
6.如权利要求5所述的方法,其特征在于,所述顶点数据文件中的顶点数据按照相应顶点顺序号依次存储;
所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照顶点数据相应的顶点顺序号依次存储。
7.如权利要求5所述的方法,其特征在于,所述目标顶点的顶点数据包括所述目标顶点的属性。
8.一种图数据处理方法,其特征在于,应用于存储有图数据的存储***中的计算节点,所述方法包括:
确定目标节点的目标分区中存储的边数据文件中待处理的边数据;
根据所述待处理的边数据进行图数据处理;
其中,所述目标节点为所述存储***中的任一节点,所述目标分区为所述目标节点上的任一存储分区,所述边数据文件中存储有与所述目标分区中存储的多个顶点的顶点顺序号分别对应的边数据,所述边数据中包括相应顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,所述目标分区中任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序。
9.如权利要求8的方法,其特征在于,所述边数据文件中的边数据按照相应的顶点顺序号依次存储,所述目标分区中还存储有边索引文件,所述边索引文件中存储所述边数据文件中各边数据的长度,且所述边索引文件中存储的各边数据的长度按照相应的顶点顺序号依次存储;
所述确定目标节点的目标分区中存储的边数据文件中待处理的边数据,包括:
按照所述边索引文件中存储的各边数据的长度,确定所述待处理的边数据。
10.如权利要求9的方法,其特征在于,在所述图数据处理为迭代处理的情况下,所述待处理的边数据为依据所述各边数据长度依次迭代的当前待处理的边数据。
11.如权利要求9的方法,其特征在于,在所述图数据处理为查询处理的情况下,所述待处理的边数据为根据所述各边数据长度和当前待查询的顶点的顶点顺序号定位出的边数据。
12.如权利要求11的方法,其特征在于,所述计算节点中还存储有参考顶点顺序号对应的边数据在所述边数据文件中的位置,所述参考顶点序号为所述目标分区中存储的多个顶点的顶点顺序号中的一个或多个顶点顺序号;
所述当前待处理的边数据为根据所述各边数据长度、所述参考顶点顺序号对应的边数据在所述边数据文件中的位置、以及所述当前待查询的顶点的顶点顺序号定位出的边数据。
13.如权利要求8的方法,其特征在于,所述目标分区中存储有顶点数据文件,所述顶点数据文件中存储有所述多个顶点的顶点顺序号对应的顶点数据;
所述方法还包括:
根据待查询的目标顶点顺序号从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
14.如权利要求13的方法,其特征在于,所述多个顶点各自的顶点数据按照相应顶点顺序号依次存储,所述目标分区中还存储有顶点索引文件,所述顶点索引文件中存储所述顶点数据文件中各顶点数据的长度,且所述顶点索引文件中存储的各顶点数据的长度按照相应的顶点顺序号依次存储;
所述根据所述目标顶点顺序号从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据,包括:
根据所述目标顶点顺序号和所述索引文件,确定所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置;
根据所述目标顶点顺序号对应的顶点数据在所述顶点数据文件中的位置,从所述顶点数据文件中获取所述目标顶点顺序号对应的顶点数据。
15.如权利要求9至12中任一的方法,其特征在于,所述目标分区中存储有映射表,所述映射表中存储有与所述多个顶点标识分别对应多个顶点顺序号;
根据所述边索引文件,对所述目标分区上存储的图数据进行处理之后,所述方法还包括:
确定图数据处理后得到的顶点的顶点顺序号;
根据所述映射表,获取确定的顶点顺序号对应的顶点标识,将所述顶点标识作为图数据处理结果。
16.一种图数据存储装置,其特征在于,应用于存储有图数据的存储***中的目标节点,所述目标节点为所述存储***中的任一节点,所述装置包括:
获取模块,用于获取目标分区中存储的目标顶点的目标顶点顺序号,所述目标分区为所述目标节点上的任一存储分区,所述目标分区中存储有多个顶点,所述多个顶点分别对应有顶点顺序号,任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序,所述目标顶点为所述多个顶点中任一顶点;
所述获取模块,还用于获取所述目标顶点顺序号对应的目标边数据,所述目标边数据包括所述目标顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向;
写入模块,用于将所述目标边数据写入所述目标分区中的边数据文件,所述边数据文件用于存储与各顶点顺序号分别对应的边数据。
17.一种图数据处理装置,其特征在于,应用于存储有图数据的存储***中的计算节点,所述装置包括:
确定模块,用于确定目标节点的目标分区中存储的边数据文件中待处理的边数据;
处理模块,用于根据所述待处理的边数据进行图数据处理;
其中,所述目标节点为所述存储***中的任一节点,所述目标分区为所述目标节点上的任一存储分区,所述边数据文件中存储有与所述目标分区中存储的多个顶点的顶点顺序号分别对应的边数据,所述边数据中包括相应顶点关联的一条或多条边中每条边的另一个顶点的所在的分区的分区编号和所述另一个顶点的顶点顺序号、以及每条边的方向,所述目标分区中任一顶点的顶点顺序号指示所述任一顶点在所述多个顶点中的排序。
18.一种服务器,其特征在于,所述服务器包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述权利要求1至7、或者权利要求8-15中的任一项权利要求所述的方法的步骤。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述权利要求1至7、或者权利要求8-15中的任一项权利要求所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011192437.1A CN112287182B (zh) | 2020-10-30 | 2020-10-30 | 图数据存储、处理方法、装置及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011192437.1A CN112287182B (zh) | 2020-10-30 | 2020-10-30 | 图数据存储、处理方法、装置及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112287182A CN112287182A (zh) | 2021-01-29 |
CN112287182B true CN112287182B (zh) | 2023-09-19 |
Family
ID=74352978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011192437.1A Active CN112287182B (zh) | 2020-10-30 | 2020-10-30 | 图数据存储、处理方法、装置及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112287182B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113449153B (zh) * | 2021-06-28 | 2023-09-26 | 湖南大学 | 索引构建方法、装置、计算机设备和存储介质 |
CN113468275A (zh) * | 2021-07-28 | 2021-10-01 | 浙江大华技术股份有限公司 | 图数据库的数据导入方法和装置、存储介质及电子设备 |
CN113609347B (zh) * | 2021-10-08 | 2021-12-28 | 支付宝(杭州)信息技术有限公司 | 数据存储及查询方法、装置及数据库*** |
CN113609318B (zh) * | 2021-10-09 | 2022-03-22 | 北京海致星图科技有限公司 | 一种图数据处理方法、装置、电子设备以及存储介质 |
CN113722520B (zh) * | 2021-11-02 | 2022-05-03 | 支付宝(杭州)信息技术有限公司 | 图数据的查询方法及装置 |
CN114095958B (zh) * | 2021-11-16 | 2023-09-12 | 新华三大数据技术有限公司 | 小区覆盖区域确定方法、装置、设备及存储介质 |
CN114077680B (zh) * | 2022-01-07 | 2022-05-17 | 支付宝(杭州)信息技术有限公司 | 一种图数据的存储方法、***及装置 |
CN114254164B (zh) * | 2022-03-01 | 2022-06-28 | 全球能源互联网研究院有限公司 | 一种图数据存储方法及装置 |
CN114282073B (zh) * | 2022-03-02 | 2022-07-15 | 支付宝(杭州)信息技术有限公司 | 数据存储方法及装置、数据读取方法及装置 |
CN114791968A (zh) * | 2022-06-27 | 2022-07-26 | 杭州连通图科技有限公司 | 用于图计算的处理方法、装置、***及计算机可读介质 |
CN115203489B (zh) * | 2022-09-15 | 2023-02-03 | 阿里巴巴(中国)有限公司 | 动态图数据存储***、读取***及对应方法 |
CN117235120A (zh) * | 2023-11-09 | 2023-12-15 | 支付宝(杭州)信息技术有限公司 | 具有时序特性的超图数据存储和查询方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522428A (zh) * | 2018-09-17 | 2019-03-26 | 华中科技大学 | 一种基于索引定位的图计算***的外存访问方法 |
CN110688055A (zh) * | 2018-07-04 | 2020-01-14 | 清华大学 | 一种大图计算中数据访问方法及*** |
CN110795417A (zh) * | 2019-10-30 | 2020-02-14 | 北京明略软件***有限公司 | 一种知识图谱的存储***及方法 |
CN111241353A (zh) * | 2020-01-16 | 2020-06-05 | 支付宝(杭州)信息技术有限公司 | 一种图数据的分区方法、装置以及设备 |
CN111694834A (zh) * | 2019-03-15 | 2020-09-22 | 杭州海康威视数字技术股份有限公司 | 图数据的入库方法、装置、设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10061841B2 (en) * | 2015-10-21 | 2018-08-28 | International Business Machines Corporation | Fast path traversal in a relational database-based graph structure |
-
2020
- 2020-10-30 CN CN202011192437.1A patent/CN112287182B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110688055A (zh) * | 2018-07-04 | 2020-01-14 | 清华大学 | 一种大图计算中数据访问方法及*** |
CN109522428A (zh) * | 2018-09-17 | 2019-03-26 | 华中科技大学 | 一种基于索引定位的图计算***的外存访问方法 |
CN111694834A (zh) * | 2019-03-15 | 2020-09-22 | 杭州海康威视数字技术股份有限公司 | 图数据的入库方法、装置、设备及可读存储介质 |
CN110795417A (zh) * | 2019-10-30 | 2020-02-14 | 北京明略软件***有限公司 | 一种知识图谱的存储***及方法 |
CN111241353A (zh) * | 2020-01-16 | 2020-06-05 | 支付宝(杭州)信息技术有限公司 | 一种图数据的分区方法、装置以及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112287182A (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112287182B (zh) | 图数据存储、处理方法、装置及计算机存储介质 | |
CN112363979B (zh) | 一种基于图数据库的分布式索引方法和*** | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
CN106682215B (zh) | 一种数据处理方法和管理节点 | |
CN112015820A (zh) | 分布式图数据库实现的方法、***、电子装置和存储介质 | |
CN111459885B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
WO2017161540A1 (zh) | 数据查询的方法、数据对象的存储方法和数据*** | |
US20110179013A1 (en) | Search Log Online Analytic Processing | |
CN112434027A (zh) | 多维度数据的索引方法、装置、计算机设备和存储介质 | |
CN114691721A (zh) | 图数据的查询方法、装置、电子设备及存储介质 | |
US8548980B2 (en) | Accelerating queries based on exact knowledge of specific rows satisfying local conditions | |
CN116089414B (zh) | 基于海量数据场景的时序数据库写入性能优化方法及装置 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
Liroz-Gistau et al. | Dynamic workload-based partitioning algorithms for continuously growing databases | |
CN115168499B (zh) | 数据库表的分片方法、装置、计算机设备和存储介质 | |
CN116010345A (zh) | 一种实现流批一体数据湖的表服务方案的方法、装置及设备 | |
Gedik et al. | Disk-based management of interaction graphs | |
CN112307272B (zh) | 确定对象之间关系信息的方法、装置、计算设备及存储介质 | |
CN114048219A (zh) | 图数据库更新方法及装置 | |
CN111259062B (zh) | 一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置 | |
CN117540056B (zh) | 数据查询的方法、装置、计算机设备和存储介质 | |
CN111949439B (zh) | 基于数据库的数据文件更新方法和装置 | |
US11966393B2 (en) | Adaptive data prefetch | |
CN117786164A (zh) | 一种分布式原生图数据库中数据导出的方法和装置 | |
WO2017131795A1 (en) | Processing time-varying data using an adjacency list representation of a time-varying graph |
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 |