一种大图计算中数据访问方法及系统

文档序号:1627675 发布日期:2020-01-14 浏览:15次 >En<

阅读说明:本技术 一种大图计算中数据访问方法及系统 (Data access method and system in large graph calculation ) 是由 张广艳 郑纬民 于 2018-07-04 设计创作,主要内容包括:本发明提供的一种大图计算中数据访问方法及系统,通过将目标图数据文件进行预处理,获得目标图数据文件对应的紧凑图数据文件,通过索引位图记录目标图数据文件在各迭代步骤中的活跃顶点,根据活跃顶点确定各迭代步骤中的有用边数据和无用边数据,根据有用边数据和无用边数据确定各迭代步骤对应的所有有用边数据块,并根据有用边数据块的起始位置和大小生成I/O请求,从而在处理I/O请求时可直接根据起始位置和大小从紧凑图数据文件中访问对应的有用边数据块中的各个边数据。该方法及系统综合考量了外存储设备寻址开销和外存储设备I/O开销,一定程度上减少了无用边数据的外存储设备I/O,并确保了边数据访问的顺序性,有效提高了大图计算的整体性能。(The invention provides a data access method and a data access system in large graph calculation, which are characterized in that a target graph data file is preprocessed to obtain a compact graph data file corresponding to the target graph data file, active vertexes of the target graph data file in each iteration step are recorded through an index bitmap, useful side data and useless side data in each iteration step are determined according to the active vertexes, all useful side data blocks corresponding to each iteration step are determined according to the useful side data and the useless side data, and an I/O request is generated according to the initial position and the size of the useful side data blocks, so that each side data in the corresponding useful side data blocks can be directly accessed from the compact graph data file according to the initial position and the size when the I/O request is processed. The method and the system comprehensively consider the addressing overhead and the I/O overhead of the external storage equipment, reduce the I/O of the external storage equipment without side data to a certain extent, ensure the sequence of side data access and effectively improve the overall performance of large graph calculation.)

一种大图计算中数据访问方法及系统

技术领域

本发明涉及图计算技术领域,更具体地,涉及一种大图计算中数据访问方法及系统。

背景技术

随着社交网络、生物信息网络和信息技术的高速发展,使得以这些信息为对象的图数据日益增大。基于外存储设备的大图计算系统,在处理大规模数据的计算问题时,由于计算机内存容量有限,所以往往通过使用相对廉价的外存储设备来扩展大图计算的问题规模。这样,对于这类基于外存储设备的大图计算系统来说,外存储设备I/O往往是其性能瓶颈。另外,图算法是具有迭代性质的算法,并且在每次迭代当中,并不是所有的边数据都必须被使用到的,因此如何有效得减少这些无用边数据的外存储设备I/O,并且把额外的开销降低是一个技术挑战。

目前,解决上述问题的有两类方法。第一类是静态分区的选择性调度策略,这类方法的主要思想是,在图数据预处理阶段把所有数据按照某个分区方法进行静态的分区,然后在计算时跳过这些没有任何有用边数据的分区,该方法虽然可以在一定程度上减少外存储设备I/O的数量,但是当分区内只有少数几条有用边时,该方法仍然需要读取整个分区,因此不能充分减少无用边数据。另一类方法是图数据重划分,这类方法的主要思想是,在一次迭代计算结束后,将原始的图数据,进行重新划分,在这一过程中,在接下来的计算中不会被用到的图数据将会被剔除,不会出现在新的划分中,这样可以极大地减少都无用数据的外存储设备I/O和相关的计算,但是这类方法在每一次重划分的过程中都会引入额外的外存储设备I/O开销。

发明内容

本发明为了克服现有技术中图计算过程中外存储设备I/O开销过大,导致图计算的整体性能较低的问题,提供一种大图计算中数据访问方法及系统。

一方面,本发明提供一种大图计算中数据访问方法,包括:

计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将所述分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;

调用所述目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据所述索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个所述有用边数据块包括多个边数据;

对于任意一个有用边数据块,将该有用边数据块中第一个边数据在所述紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据所述起始位置和所述目标大小生成I/O请求,将所述I/O请求加入I/O请求队列中;

从所述I/O请求队列中依次取出所述I/O请求,并根据所述I/O请求中的起始位置和目标大小访问所述紧凑图数据文件中的边数据。

优选地,所述将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,之前还包括:

对于任意一个顶点集合,获取该顶点集合中的所有顶点;

对于任意一个顶点,将该顶点作为源顶点,获取与所述源顶点对应的目标顶点,将该顶点与所有所述目标顶点的组合作为该顶点对应的边数据。

优选地,所述将所述分区文件中不同顶点对应的边数据进行排序,具体为:

根据所述分区文件中所有顶点的ID信息和出度信息初始化每个顶点对应的offset值;

对于任意一个顶点,根据该顶点对应的offset值确定该顶点对应的目标位置,将该顶点对应的边数据存储在所述目标位置。

优选地,所述调用所述目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,之前还包括:

根据所述目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图。

优选地,所述根据所述目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图,具体为:

对于所述目标图数据文件中的任意一个顶点,根据该顶点在上一次迭代步骤中的迭代运算判断该顶点在当前迭代步骤中是否为活跃顶点;若该顶点在当前迭代步骤中为活跃顶点,则将该顶点对应的位图位设置为第一数值,若该顶点在当前迭代步骤中为非活跃顶点,则将该顶点对应的位图位设置为第二数值;

根据所有顶点的ID信息将所有顶点的位图位顺序排列,并给预设数量的位图位设置一个对应的索引位,获得当前迭代步骤对应的索引位图。

优选地,所述给预设数量的位图位设置一个对应的索引位,具体为:

若预设数量的位图位中至少存在一个位图位为第一数值,则将对应的索引位设置为第一数值;若预设数量的位图位中所有位图位均为第二数值,则将对应的索引位设置为第二数值。

优选地,所述根据所述索引位图依次获取当前迭代步骤对应的所有有用边数据块,具体为:

依次扫描所述索引位图中的所有索引位,对于任意一个索引位,若该索引位为第二数值,则忽略该索引位;若该索引位为第一数值,则顺序扫描该索引位对应的所有位图位;

对于任意一个位图位,若该位图位为第二数值,则确定该位图位对应的顶点为非活跃顶点,根据所述非活跃顶点的出度信息获得该位图位对应的无用边数据,若该位图位为第一数值,则确定该位图位对应的顶点为活跃顶点,根据所述活跃顶点的出度信息获得该位图位对应的有用边数据;

判断任意两个位图位对应的有用边数据之间的连续无用边数据的大小是否超过预设阈值,若未超过所述预设阈值,则将该两个位图位对应的有用边数据和所述连续无用边数据合并为有用边数据块,若超过所述预设阈值,则将该两个位图位对应的有用边数据分别作为单独的有用边数据块。

一方面,本发明提供一种大图计算中数据访问系统,包括:

预处理模块,用于计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将所述分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;

边数据获取模块,用于调用所述目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据所述索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个所述有用边数据块包括多个边数据;

请求生成模块,用于对于任意一个有用边数据块,将该有用边数据块中第一个边数据在所述紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据所述起始位置和所述目标大小生成I/O请求,将所述I/O请求加入I/O请求队列中;

数据访问模块,用于从所述I/O请求队列中依次取出所述I/O请求,并根据所述I/O请求中的起始位置和目标大小访问所述紧凑图数据文件中的边数据。

一方面,本发明提供一种电子设备,包括:

至少一个处理器;以及

与所述处理器通信连接的至少一个存储器,其中:

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述任一所述的方法。

一方面,本发明提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述任一所述的方法。

本发明提供的一种大图计算中数据访问方法及系统,通过将目标图数据文件进行预处理,将目标图数据文件中各边数据的存储空间占用量进行了一定程度的压缩,且将各顶点对应的边数据进行顺序存储,获得目标图数据文件对应的紧凑图数据文件;同时通过索引位图记录目标图数据文件对应的迭代算法在各迭代步骤中的活跃顶点,进而根据活跃顶点确定各迭代步骤中的有用边数据和无用边数据,并在综合考量外存储设备寻址开销和外存储设备I/O开销的基础上,根据各迭代步骤中的有用边数据和无用边数据确定各迭代步骤对应的所有有用边数据块,并根据有用边数据块的起始位置和大小生成I/O请求,从而在处理I/O请求时可直接根据起始位置和大小从紧凑图数据文件中访问对应的有用边数据块中的各个边数据。该方法及系统在进行大图计算时,仅需访问各迭代步骤对应的有用边数据块,能够有效减少无用边数据的外存储设备I/O,进而有效减少了目标图数据文件在整个计算过程中的外存储设备I/O开销,一定程度上提高了大图计算的整体性能。

附图说明

图1为本发明实施例的一种大图计算中数据访问方法的整体流程示意图;

图2为根据本发明实施例的各顶点对应的边数据的数据格式示意图;

图3为根据本发明实施例的有用边数据块的合并模拟示意图;

图4为本发明实施例的一种大图计算中数据访问系统的整体结构示意图;

图5为本发明实施例的一种电子设备的结构框架示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

需要说明的是,图计算即为图算法,图算法是指利用特制的线条算图求得答案的一种简便算法。无向图、有向图和网络能运用很多常用的图算法,这些算法包括:各种遍历算法、寻找最短路径的算法和寻找网络中最低代价路径的算法等。图算法可应用到多种场合,例如:优化管道、路由表、快递服务、通信网站等。

一般地,图算法涉及的图数据量较为庞大,尤其对于数据量上亿的大图而言,目前计算机的内存还难以满足大图计算的容量需求,因此往往需要通过使用相对廉价的外存储设备来扩展大图计算的问题规模。然而,对于这类基于外存储设备的大图计算来说,外存储设备I/O往往是其性能瓶颈。有鉴于此,本发明主要针对大图计算,提供一种大图计算中数据访问方法及系统,以减少大图计算中的外存储设备I/O,从而提高大图计算的整体性能。具体实现过程请参见如下方法实施例。

图1为本发明实施例的一种大图计算中数据访问方法的整体流程示意图,如图1所示,本发明提供一种大图计算中数据访问方法,包括:

S1,计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;

具体地,当需要对目标图数据文件进行大图计算时,为了有效减少大图计算中的外存储设备I/O,本实施例中,首先对目标图数据文件进行预处理,获得目标图数据文件对应的紧凑图数据文件,紧凑图数据文件相较于目标图数据文件的数据量进行了一定程度的压缩,具体实现过程如下:

首先,扫描目标图数据文件,获取目标图数据文件中每个顶点的出度信息。其中出度信息为以每个顶点作为源顶点的出边总量。例如,以顶点A为源顶点的出边共有10条,则顶点A的出度信息即为10。需要说明的是,由于无向图中的边是没有方向的,因此对于无向图中的顶点而言,可以根据具体的图算法确定各条边的方向,在此基础上,再确定无向图中每个顶点的出度信息。此外,在计算目标图数据文件中各顶点的出度信息时,为了提高计算速度,本实施例中,利用多个线程并发地扫描目标图数据文件的不同部分,从而利用多个线程同时计算目标图数据文件中各顶点的出度信息。例如,假如目标图数据文件的大小为60GB,若存在三个并发线程,则可以通过第一个线程扫描目标图数据文件的前部分20GB的内容,利用第二个线程扫描目标图数据文件中间部分20GB的内容,并利用第三个线程扫描目标图数据文件后部分20GB的内容,从而利用三个线程并发地计算各部分文件内容中各顶点的出度信息。

在获得目标图数据文件中各顶点的出度信息之后,根据所有顶点的出度信息将所有顶点有序划分为多个顶点集合,且确保每个顶点集合中所有顶点对应的出度信息的总量大致相等,同时需确保计算机内存能够同时容纳一个顶点集合中的所有顶点对应的边。具体地,可以预先设置一个顶点集合中所有顶点对应的出度信息的总量范围,在此基础上,根据各顶点的ID顺序依次扫描各顶点,并将各顶点依次划分至各个顶点集合。例如,目标图数据文件中存在A、B、C、D、E、F共6个顶点,且6个顶点的出度信息分别为:2、4、3、3、5、1,若设置一个顶点集合中所有顶点对应的出度信息的总量为6,在此基础上,可将A和B划分至同一顶点集合,C和D划分至同一顶点集合,并将E和F划分至同一顶点集合。

在获得多个顶点集合之后,对于任意一个顶点集合,获取该顶点集合中的所有顶点,并获取所有顶点对应的边数据。以顶点A为例,顶点A对应的边数据即为以顶点A为源顶点对应的所有出边的信息。然后,将所有顶点对应的边数据写入该顶点集合对应的分区文件中。由此,即可将各顶点集合中所有顶点对应的边数据写入各顶点集合对应的分区文件中。

通过上述处理步骤,即可将目标图数据文件划分为多个分区文件,由此可确保计算机内存能够容纳同一分区文件对应的边数据。在此基础上,对于任意一个分区文件,将该分区文件中的所有边数据写入计算机内存,并在计算机内存中对所有边数据进行排序。具体地,可以根据该分区文件中各顶点的ID顺序对各顶点对应的边数据进行排序,进而实现对该分区文件中不同顶点对应的边数据进行排序。当该分区文件中不同顶点对应的边数据排序完成后,即可将排序后的分区文件写入预先设置的紧凑图数据文件中。由此,即可依次对各分区文件中不同顶点对应的边数据进行排序,并将排序后的分区文件直接写入紧凑图数据文件中。最终,所有分区文件中的所有边数据均被写入紧凑图数据文件中,即目标图数据文件中的所有边数据均被写入紧凑图数据文件中,也即实现了将目标图数据文件转换成紧凑图数据文件。

S2,调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个有用边数据块包括多个边数据;

具体地,在上述技术方案的基础上,由于图算法是具有迭代性质的算法,并且在每次迭代当中,并不是所有的边数据都必须被使用到。有鉴于此,本实施例中,为了减少大图计算中无用边数据的计算,即减少无用边数据的外存储设备I/O,利用索引位图来记录大图计算中各迭代步骤中活跃的顶点,若某个顶点在某个迭代步骤中属于活跃的顶点,则该顶点对应的边数据在该迭代步骤中即为有用边数据。即,每个迭代步骤对应一个索引位图,对于任意一个迭代步骤,通过该迭代步骤对应的索引位图即可确定该迭代步骤中有用边数据。

在上述技术方案的基础上,在目标图数据文件的迭代算法中,对于当前迭代步骤而言,当前迭代步骤对应的索引位图在上一次迭代步骤的迭代运算已经构建完成,因此即可直接调用当前迭代步骤对应的索引位图。在获得当前迭代步骤对应的索引位图之后,由于索引位图中记录了当前迭代步骤中的活跃顶点,根据活跃顶点即可确定当前迭代步骤中的有用边数据,同时可将活跃顶点之外的其他顶点确定为非活跃顶点,且可将非活跃顶点对应的边数据确定为无用边数据。

在确定了有用边数据和无用边数据之后,由于各顶点对应的边数据在紧凑图数据文件中是顺序存储的,而有用边数据和无用边数据往往是间隔的,因此在访问有用边数据时,若跳过无用边数据,则将导致计算机需进行多次外存储设备寻址;若不跳过无用边数据,则会无形中增加无用边数据的外存储设备I/O。有鉴于此,本实施例中,为了均衡外存储设备寻址和外存储设备I/O对计算机性能的影响,将连续的有用边数据(或包含少量无用边数据)组合成有用边数据块。由此,即可获得当前迭代步骤对应的所有有用边数据块,一个有用边数据块中包含了多个有用边数据,也可能包含少量的无用边数据。即,一个有用边数据块往往包含多个边数据。

S3,对于任意一个有用边数据块,将该有用边数据块中第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据起始位置和目标大小生成I/O请求,将I/O请求加入I/O请求队列中;

具体地,在上述技术方案的基础上,在获得当前迭代步骤对应的所有有用边数据块之后,对于任意一个有用边数据块,由于该有用边数据块中的多个边数据在紧凑图数据文件中是连续存储的,故而可将该有用边数据中的第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小。在此基础上,即可根据起始位置和目标大小生成该有用边数据块对应的I/O请求,并将I/O请求加入I/O请求队列中。即,一个有用边数据块对应一个I/O请求,根据该I/O请求即可从紧凑图数据文件中访问对应的有用边数据块。

S4,从I/O请求队列中依次取出I/O请求,并根据I/O请求中的起始位置和目标大小访问紧凑图数据文件中的边数据。

具体地,在上述技术方案的基础上,即可将当前迭代步骤对应的所有有用边数据块依次加入I/O请求队列。在此基础上,可从I/O请求队列中依次取出I/O请求,每个I/O请求中包含了请求对应的起始位置和目标大小,从而根据I/O请求中的起始位置和目标大小即可访问紧凑图数据文件中的边数据。具体地,首先可在紧凑图数据文件中确定起始位置对应的位置,再从起始位置开始访问目标大小的边数据。由此,即可完成当前迭代步骤的迭代运算。此外,对于目标图数据文件对应的迭代算法中的各个迭代步骤均可按照上述方法步骤进行迭代运算,由此可完成目标图数据文件的计算。

本发明提供的一种大图计算中数据访问方法,通过将目标图数据文件进行预处理,将目标图数据文件中各边数据的存储空间占用量进行了一定程度的压缩,且将各顶点对应的边数据进行顺序存储,获得目标图数据文件对应的紧凑图数据文件;同时通过索引位图记录目标图数据文件对应的迭代算法在各迭代步骤中的活跃顶点,进而根据活跃顶点确定各迭代步骤中的有用边数据和无用边数据,并在综合考量外存储设备寻址开销和外存储设备I/O开销的基础上,根据各迭代步骤中的有用边数据和无用边数据确定各迭代步骤对应的所有有用边数据块,并根据有用边数据块的起始位置和大小生成I/O请求,从而在处理I/O请求时可直接根据起始位置和大小从紧凑图数据文件中访问对应的有用边数据块中的各个边数据。该方法在进行大图计算时,仅需访问各迭代步骤对应的有用边数据块,能够有效减少无用边数据的外存储设备I/O,进而有效减少了目标图数据文件在整个计算过程中的外存储设备I/O开销,一定程度上提高了大图计算的整体性能。

基于上述任一实施例,提供一种大图计算中数据访问方法,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,之前还包括:对于任意一个顶点集合,获取该顶点集合中的所有顶点;对于任意一个顶点,将该顶点作为源顶点,获取与源顶点对应的目标顶点,将该顶点与所有目标顶点的组合作为该顶点对应的边数据。

具体地,本实施例中,在将目标图数据文件中的所有顶点划分为多个顶点集合之后,对于任意一个顶点集合,在将该顶点集合中所有顶点对应的边数据写入对应的分区文件中之前,由于该顶点集合对应的所有边数据中往往存在共用一个源顶点的边数据,有鉴于此,可对该顶点集合对应的所有边数据的存储空间占用量进行一定程度的压缩,具体实现过程如下:

对于任意一个顶点集合,首先获取该顶点集合中的所有顶点,对于任意一个顶点,扫描目标图数据文件,从目标图数据文件中获得该顶点作为源顶点的所有出边,并获取每条出边对应的另一个顶点,将其作为目标顶点。由此,即可获得该顶点对应的所有目标顶点。在此基础上,可将该顶点与所有目标顶点的组合作为该顶点对应的边数据。即,对于共用一个源顶点的多条边数据而言,仅需存储一个共用的源顶点和各个目标顶点即可,无需对源顶点进行多次存储,一定程度上减少了目标图数据文件中各边数据的存储空间占用量。为了便于理解,现以下述示例进行具体说明:

如图2所示,图中V0、V1……Vn为各个顶点,对于顶点V0而言,在存储顶点V0对应的边数据时,将该顶点作为源顶点,仅需存储一个源顶点,图中表示为src0,而以该顶点为源顶点的边数据可直接用对应的多个目标顶点表示,图中表示为dst0、dst1……。由此可以看出,src0和dst0组成一条边数据,src0和dst1组成一条边数据,即,若以顶点V0为源顶点的出边有m条,则对应的目标顶点则有m个。此外,若目标图数据文件中边数据存在对应的权重时,则可将权重与对应的目标顶点关联存储,图中w0和w1即表示对应的权重。

本发明提供的一种大图计算中数据访问方法,在将目标图数据文件中的所有顶点划分为多个顶点集合之后,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中之前,对于任意一个顶点集合,获取该顶点集合中的所有顶点,对于任意一个顶点,将该顶点作为源顶点,获取与源顶点对应的目标顶点,将该顶点与所有目标顶点的组合作为该顶点对应的边数据。由此,在将各顶点对于的边数据写入分区文件时,对于共用同一源顶点的边数据,仅需存储一个源顶点和对应的多个目标顶点,一定程度上减少了目标图数据文件中各边数据的存储空间占用量。

基于上述任一实施例,提供一种大图计算中数据访问方法,将分区文件中不同顶点对应的边数据进行排序,具体为:根据分区文件中所有顶点的ID信息和出度信息初始化每个顶点对应的offset值;对于任意一个顶点,根据该顶点对应的offset值确定该顶点对应的目标位置,将该顶点对应的边数据存储在目标位置。

具体地,本实施例中,将各分区文件中不同顶点对应的边数据进行排序的具体实现过程如下:

对于任意一个分区文件,首先获取该分区文件中的所有顶点,并获取各顶点的ID信息和出度信息,按照各顶点的ID顺序将各顶点进行排序,顶点排序完成后,对于任意一个顶点,获取排在该顶点之前的顶点个数和每个顶点的出度信息,根据顶点个数和出度信息的乘积即可初始化该顶点对应的offset值。在获得各顶点对应的offset值之后,对于任意一个顶点,根据该顶点对应的offset值即可确定该顶点对应的目标位置,该目标位置即为该顶点对应的边数据所需存储的位置,最终再将该顶点对应的边数据存储在分区文件中的目标位置。将各顶点对于的边数据按照上述方法步骤进行存储,即可实现分区文件中各顶点对应边数据的顺序存储。

举例来说,若某一个分区文件中存在A、B和C共3个顶点,且根据3个顶点对应的ID信息将各顶点排序后即为:B、A、C。同时,A、B和C对应的出度信息分别为2、4、6。在此基础上,可将顶点B对应的offset值初始化为0;将顶点A对应的offset值初始化为4;将顶点C对应的offset值初始化为6。最终,可将顶点B对应的4条边数据存储在分区文件的第0-3位;可将顶点A对应的2条边数据存储在分区文件的第4-5位;可将顶点C对应的6条边数据存储在分区文件的第6-11位。即可实现将分区文件中各顶点对应的边数据进行顺序存储。

本发明提供的一种大图计算中数据访问方法,根据分区文件中所有顶点的ID信息和出度信息初始化每个顶点对应的offset值;对于任意一个顶点,根据该顶点对应的offset值确定该顶点对应的目标位置,将该顶点对应的边数据存储在目标位置。该方法根据各分区文件中各顶点的ID信息和出度信息将各顶点对应的边数据进行顺序存储,进而将排序后的分区文件写入同一紧凑图数据文件中,有利于后续在迭代计算时根据各边数据在紧凑图数据文件中的位置访问各边数据,有利于节省迭代计算中的数据访问时间。

基于上述任一实施例,提供一种大图计算中数据访问方法,调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,之前还包括:根据目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图。

具体地,在目标图数据文件的迭代计算中,对于当前迭代步骤而言,若当前迭代步骤为第一次迭代步骤,则在进行大图计算之前需构建第一次迭代步骤对应的索引位图;若当前迭代步骤并非第一次迭代步骤,则当前迭代步骤对应的索引位图是在上一次迭代步骤的迭代运算过程中构建的。例如,对于遍历算法而言,在进行遍历算法之前便可确定第一次需要遍历的顶点,这些顶点即可确定为第一次遍历步骤对应的活跃顶点,根据确定的活跃顶点即可构建第一次遍历步骤对应的索引位图;对于其他遍历步骤而言,比如第二次遍历步骤,在第一次遍历的过程中即可确定第二次遍历所需遍历的顶点,这些顶点即为第二次遍历步骤中的活跃顶点,根据这些活跃顶点即可确定第二次遍历步骤对应的索引位图。

本发明提供的一种大图计算中数据访问方法,调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图之前,根据目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图。该方法通过在上一次迭代步骤的迭代运算过程中构建当前迭代步骤对应的索引位图,从而有利于在当前迭代步骤中直接调用对应的索引位图,从而根据对应的索引位图确定当前迭代步骤中的活跃顶点,一定程度上节省了计算过程中的调度开销。

基于上述任一实施例,提供一种大图计算中数据访问方法,根据目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图,具体为:对于目标图数据文件中的任意一个顶点,根据该顶点在上一次迭代步骤中的迭代运算判断该顶点在当前迭代步骤中是否为活跃顶点;若该顶点在当前迭代步骤中为活跃顶点,则将该顶点对应的位图位设置为第一数值,若该顶点在当前迭代步骤中为非活跃顶点,则将该顶点对应的位图位设置为第二数值;根据所有顶点的ID信息将所有顶点的位图位顺序排列,并给预设数量的位图位设置一个对应的索引位,获得当前迭代步骤对应的索引位图。

具体地,本实施例中,根据目标图数据文件对应的迭代算法在上一次迭代步骤中的迭代运算构建当前迭代步骤对应的索引位图,具体实现过程如下:

首先获取目标图数据文件中的所有顶点,对于任意一个顶点,根据该顶点在上一次迭代步骤中的迭代运算,即可判断该顶点在当前迭代步骤中是否为活跃顶点。例如,在遍历算法中,在第一次遍历步骤中即可确定第二次遍历步骤中需要遍历的顶点,这些顶点即可确定为第二次遍历步骤中的活跃顶点。对于其他迭代算法而言,可以根据迭代算法的具体性质确定某个顶点在当前迭代步骤中是否为活跃顶点,此处不做具体限定。

若该顶点在当前迭代步骤中为活跃顶点,则可将该顶点在索引位图中对应的位图位设置为第一数值;若该顶点在当前迭代步骤中为非活跃顶点,则将该顶点在索引位图中对应的位图位设置为第二数值。在此基础上,即可确定目标图数据文件中各顶点在索引位图中对应的位图位,同时获取各顶点的ID信息,根据各顶点的ID信息将所有顶点对应的位图位进行顺序排列。此外,为了减少索引位图的遍历开销,本实施例中,在获得顺序排列的所有位图位之后,给预设数量的位图位设置一个对应的索引位,从而获得当前迭代步骤对应的索引位图。在索引位图中,根据某个索引位即可确定该索引位对应的位图位中是否存在第一数值和/或第二数值。此外,本实施例中,第一数值可设置为1,第二数值可设置为0,在其他实施例中,第一数值和第二数值可以根据实际需求进行设置,此处不做具体限定。同时,预设数量也可以根据实际需求进行设置,此处不做具体限定。

本发明提供的一种大图计算中数据访问方法,对于目标图数据文件中的任意一个顶点,根据该顶点在上一次迭代步骤中的迭代运算判断该顶点在当前迭代步骤中是否为活跃顶点;若该顶点在当前迭代步骤中为活跃顶点,则将该顶点对应的位图位设置为第一数值,若该顶点在当前迭代步骤中为非活跃顶点,则将该顶点对应的位图位设置为第二数值;根据所有顶点的ID信息将所有顶点的位图位顺序排列,并给预设数量的位图位设置一个对应的索引位,获得当前迭代步骤对应的索引位图。该方法通过在上一次迭代步骤的迭代运算过程中获取当前迭代步骤中的活跃顶点,再将各活跃顶点记录在当前迭代步骤对应的索引位图中,有利于根据索引位图确定当前迭代步骤中的活跃顶点,一定程度上节省了计算过程中的调度开销。

基于上述任一实施例,提供一种大图计算中数据访问方法,给预设数量的位图位设置一个对应的索引位,具体为:若预设数量的位图位中至少存在一个位图位为第一数值,则将对应的索引位设置为第一数值;若预设数量的位图位中所有位图位均为第二数值,则将对应的索引位设置为第二数值。

具体地,在获得各目标图数据文件中各顶点对应的位图位,且将各顶点对应的位图位排序之后,给预设数量的位图位设置一个对应的索引位,具体设置过程如下:

首先设置预设数量,再将排序后的所有位图位按照预设数量进行划分,获得多个位图位组合,每个位图位组合包含预设数量的位图位。在此基础上,若某个位图位组合中存在至少一个位图位为第一数值,则将该位图位组合对应的索引位设置为第一数值,若某个位图位组合中所有位图位均为第二数值,则将该位图位组合对应的索引位设置为第二数值。例如,假设第一数值为1,第二数值为0,若某个位图位组合中存在至少一个位图位为1,则将该位图位组合对应的索引位设置为1,若某个位图位组合中所有位图位均为0,则将该位图位组合对应的索引位设置为0。其中,第一数值和第二数值以及预设数量可以根据实际需求进行设置,此处不做具体限定。

本发明提供的一种大图计算中数据访问方法,若预设数量的位图位中至少存在一个位图位为第一数值,则将对应的索引位设置为第一数值;若预设数量的位图位中所有位图位均为第二数值,则将对应的索引位设置为第二数值。该方法通过给预设数量的位图位设置对应的索引位,有利于减少索引位图的遍历开销。

基于上述任一实施例,提供一种大图计算中数据访问方法,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,具体为:依次扫描索引位图中的所有索引位,对于任意一个索引位,若该索引位为第二数值,则忽略该索引位;若该索引位为第一数值,则顺序扫描该索引位对应的所有位图位;对于任意一个位图位,若该位图位为第二数值,则确定该位图位对应的顶点为非活跃顶点,根据非活跃顶点的出度信息获得该位图位对应的无用边数据,若该位图位为第一数值,则确定该位图位对应的顶点为活跃顶点,根据活跃顶点的出度信息获得该位图位对应的有用边数据;判断任意两个位图位对应的有用边数据之间的连续无用边数据的大小是否超过预设阈值,若未超过预设阈值,则将该两个位图位对应的有用边数据和连续无用边数据合并为有用边数据块,若超过预设阈值,则将该两个位图位对应的有用边数据分别作为单独的有用边数据块。

具体地,在获得当前迭代步骤对应的索引位图之后,依次扫描索引位图中的所有索引位,对于任意一个索引位,若该索引位为第二数值(比如0),则可确定该索引位对应的所有位图位均为第二数值,即该索引位对应的所有顶点均为非活跃顶点,此时可直接忽略该索引位;若该索引位为第一数值(比如1),则可确定该索引位对应的位图位中至少存在一个位图位为第一数值,即该索引位对应的所有顶点中至少有一个顶点为活跃顶点,此时顺序扫描该索引位对应的所有位图位。

在顺序扫描该索引位对应的所有位图位的过程中,若该位图位为第二数值,则确定该位图位对应的顶点为非活跃顶点,获取该非活跃顶点的出度信息,根据该非活跃顶点的出度信息获得该位图位对应的无用边数据。若该位图位为第一数值,则确定该位图位对应的顶点为活跃顶点,获取该活跃顶点的出度信息,根据该活跃顶点的出度信息获得该位图位对应的有用边数据。由此,即可获得各位图位对应的有用边数据或无用边数据。

对于任意两个位图位,若该两个位图位对应的边数据为有用边数据,且该两个位图位对应的有用边数据之间间隔着连续的无用边数据,则判断该两个位图位对应的有用边数据之间的连续无用边数据的大小是否超过预设阈值,若未超过预设阈值,则将该两个位图位对应的有用边数据和连续无用边数据合并为有用边数据块,若超过预设阈值,则将该两个位图位对应的有用边数据分别作为单独的有用边数据块。本实施例中,预设阈值l=bseq×tseek,其中bseq为外存储设备的顺序带宽,tseek为外存储设备的寻址时间。在其他实施例中,预设阈值可以根据实际需求进行设置,此处不做具体限定。为了便于理解,现以下述示例进行具体说明:

如图3所示,图中灰色块代表某个顶点对应的有用边数据,白色块代表某个顶点对应的无用边数据。其中,由于第一个白色块对应的无用边数据的大小大于预设阈值l,则直接跳过(Skip)第一个白色块代表的无用边数据;对于第一个灰色块和第二个灰色块来说,该两个灰色块之间的白色块(即第二个白色块)代表的无用边数据未超过预设阈值l,则将第一个灰色块和第二个灰色块以及之间的白色块进行合并,组合成一个有用边数据块(Chunk1),该有用边数据块需要被读取(Read)。对于第二个灰色块和第三个灰色块来说,该两个灰色块之间的白色块(即第三个白色块)代表的无用边数据超过了预设阈值l,则直接跳过(Skip)第三个白色块代表的无用边数据,并将第三个灰色块单独作为一个有用边数据块(Chunk2),该有用边数据块需要被读取(Read)。对于第三个灰色块和第四个灰色块来说,该两个灰色块之间的白色块(即第四个白色块)代表的无用边数据超过了预设阈值l,则直接跳过(Skip)第四个白色块代表的无用边数据,并将第四个灰色块单独作为一个有用边数据块(Chunk3),该有用边数据块需要被读取(Read)。

本发明提供的一种大图计算中数据访问方法,根据当前迭代步骤对应的索引位图获取当前迭代步骤对应的所有有用边数据块,从而在进行当前迭代步骤对应的迭代运算时,仅需从紧凑图数据文件中访问对应的有用边数据块,能够有效减少无用边数据的外存储设备I/O,进而有效减少了目标图数据文件在整个计算过程中的外存储设备I/O开销,一定程度上提高了大图计算的整体性能。

图4为本发明实施例的一种大图计算中数据访问系统的整体结构示意图,如图4所示,基于上述任一实施例,提供一种大图计算中数据访问系统,包括:

预处理模块1,用于计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;

边数据获取模块2,用于调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个有用边数据块包括多个边数据;

请求生成模块3,用于对于任意一个有用边数据块,将该有用边数据块中第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据起始位置和目标大小生成I/O请求,将I/O请求加入I/O请求队列中;

数据访问模块4,用于从I/O请求队列中依次取出I/O请求,并根据I/O请求中的起始位置和目标大小访问紧凑图数据文件中的边数据。

具体地,本发明提供一种大图计算中数据访问系统,包括预处理模块1、边数据获取模块2、请求生成模块3和数据访问模块4,通过各模块之间的配合实现上述任一方法实施例中的方法,具体实现过程请参见上述方法实施例,此处不再赘述。

本发明提供的一种大图计算中数据访问系统,通过将目标图数据文件进行预处理,将目标图数据文件中各边数据的存储空间占用量进行了一定程度的压缩,且将各顶点对应的边数据进行顺序存储,获得目标图数据文件对应的紧凑图数据文件;同时通过索引位图记录目标图数据文件对应的迭代算法在各迭代步骤中的活跃顶点,进而根据活跃顶点确定各迭代步骤中的有用边数据和无用边数据,并在综合考量外存储设备寻址开销和外存储设备I/O开销的基础上,根据各迭代步骤中的有用边数据和无用边数据确定各迭代步骤对应的所有有用边数据块,并根据有用边数据块的起始位置和大小生成I/O请求,从而在处理I/O请求时可直接根据起始位置和大小从紧凑图数据文件中访问对应的有用边数据块中的各个边数据。该系统在进行大图计算时,仅需访问各迭代步骤对应的有用边数据块,能够有效减少无用边数据的外存储设备I/O,进而有效减少了目标图数据文件在整个计算过程中的外存储设备I/O开销,一定程度上提高了大图计算的整体性能。

图5示出本发明实施例的一种电子设备的结构框图。参照图5,所述电子设备,包括:处理器(processor)51、存储器(memory)52和总线53;其中,所述处理器51和存储器52通过所述总线53完成相互间的通信;所述处理器51用于调用所述存储器52中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个有用边数据块包括多个边数据;对于任意一个有用边数据块,将该有用边数据块中第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据起始位置和目标大小生成I/O请求,将I/O请求加入I/O请求队列中;从I/O请求队列中依次取出I/O请求,并根据I/O请求中的起始位置和目标大小访问紧凑图数据文件中的边数据。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个有用边数据块包括多个边数据;对于任意一个有用边数据块,将该有用边数据块中第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据起始位置和目标大小生成I/O请求,将I/O请求加入I/O请求队列中;从I/O请求队列中依次取出I/O请求,并根据I/O请求中的起始位置和目标大小访问紧凑图数据文件中的边数据。

本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:计算目标图数据文件中每个顶点的出度信息,根据所有顶点的出度信息将所有顶点有序划分成多个顶点集合,对于任意一个顶点集合,将该顶点集合中所有顶点对应的边数据写入对应的分区文件中,将分区文件中不同顶点对应的边数据进行排序,将排序后的分区文件写入紧凑图数据文件;调用目标图数据文件对应的迭代算法在当前迭代步骤对应的索引位图,根据索引位图依次获取当前迭代步骤对应的所有有用边数据块,每个有用边数据块包括多个边数据;对于任意一个有用边数据块,将该有用边数据块中第一个边数据在紧凑图数据文件中的位置作为该有用边数据块的起始位置,并根据该有用边数据块中所有边数据的数量确定该有用边数据块的目标大小,根据起始位置和目标大小生成I/O请求,将I/O请求加入I/O请求队列中;从I/O请求队列中依次取出I/O请求,并根据I/O请求中的起始位置和目标大小访问紧凑图数据文件中的边数据。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的电子设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:NVM组的存储介质替换

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类