CN115048553A - 图计算方法和装置 - Google Patents

图计算方法和装置 Download PDF

Info

Publication number
CN115048553A
CN115048553A CN202110255888.3A CN202110255888A CN115048553A CN 115048553 A CN115048553 A CN 115048553A CN 202110255888 A CN202110255888 A CN 202110255888A CN 115048553 A CN115048553 A CN 115048553A
Authority
CN
China
Prior art keywords
subgraph
information
vertex
type
graph
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.)
Pending
Application number
CN202110255888.3A
Other languages
English (en)
Inventor
李光成
金晓明
孙宏伟
陈加怀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110255888.3A priority Critical patent/CN115048553A/zh
Publication of CN115048553A publication Critical patent/CN115048553A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning

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)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

本申请提供了一种图计算方法和装置,可以应用于包括分布式系统的场景中。该方法包括:在对一个图执行图计算的过程中,仅将一个图划分后得到的N个子图的部分信息加载至第一存储池中,N个子图的部分信息是N个计算节点对N个子图进行计算时所需要的信息,N个计算节点基于从第一存储池中获取的N个子图的部分信息便可实现对N个子图的计算。避免了现有技术中,将N子图的所有信息都加载至第一存储池中,导致跨节点访问的频率高和消耗更多的系统开销。本申请提供的图计算方法,有利于在保证一个图计算结果的精度的前提下,降低系统开销和提高图计算效率。

Description

图计算方法和装置
技术领域
本申请涉及图计算技术领域,更具体地,涉及一种图计算方法和装置。
背景技术
为提高图计算效率,通常基于分布式系统对大规模图数据进行计算。基于分布式系统对图数据进行计算时,先将一个大规模图数据划分为多个小规模的子图,然后将该多个小规模的子图分别部署在多个计算节点上进行计算,通过该多个计算节点对该多个小规模的子图的计算得到该一个图数据的计算结果。与一个图数据包括的数据相比,得到的多个小规模的子图包括的数据存在数据膨胀(例如,图中的顶点膨胀或图中的边膨胀)现象,使得基于分布式系统对该一个图数据进行计算时,需要消耗更多的系统存储资源(例如,内存或硬盘)和更多的通信开销。对膨胀的数据进行加载,还会降低图数据加载效率,导致图计算的计算效率较低。
因此,亟需一种图计算方法,在保证图计算结果的精度的前提下,可以提高图计算效率和降低系统开销。
发明内容
本申请提供了一种图计算方法和装置,该方法在保证图计算结果的精度的前提下,能够提高图计算效率和降低系统开销。
第一方面,提供了一种图计算方法,该方法包括:
控制节点确定第一对应关系,其中,该第一对应关系表示对一个图划分后得到的N个子图与N个计算节点之间的对应关系,N为整数,且N≥2;
该控制节点基于该第一对应关系,确定该N个子图的部分信息,其中,每个子图的部分信息表示与该每个子图中的第一类型顶点相关联的信息,该每个子图中的第一类型顶点是该每个子图对应的计算节点的本地顶点,该每个子图对应的计算节点用于对该每个子图对应的计算节点的本地顶点进行计算;
该控制节点发送第一加载消息,其中,该第一加载消息用于指示将该N个子图的部分信息加载至第一存储池中,以使该N个计算节点根据从该第一存储池中获取的信息对该N个子图计算得到该一个图的计算结果。
上述方法可以应用于包括N个计算节点和至少一个控制节点的分布式系统中,N为整数,且N≥2。
上述技术方案中,仅将一个图划分后得到的N个子图的部分信息加载至第一存储池中,其中,N个子图的部分信息是N个计算节点计算N个子图需要的信息,这样,N个计算节点仅基于从第一存储池获取的该N个子图的部分信息便可实现对该N个子图的计算。避免了现有技术中,将N子图的所有信息(存在冗余信息)都加载至第一存储池中,导致跨节点访问的频率更高和消耗更多的系统开销(例如,系统存储资源开销和通信开销)。本申请提供的图计算方法,有利于在保证该一个图计算结果的精度的前提下,降低系统开销和提高图计算效率。
结合第一方面,在第一方面的某些实现方式中,
该每个子图的部分信息包括第一类型信息和第二类型信息,其中,该第一类型信息为该每个子图中的第一类型顶点的信息,该第二类型信息表示以该每个子图中的第一类型顶点为起始点的边的信息。
上述技术方案中,每个子图的部分信息仅包括该每个子图对应的计算节点的本地顶点的信息(即,每个子图中的第一类型顶点的信息),以及以该本地顶点为起始点的边的信息,上述每个子图的部分信息都是计算该每个子图需要的信息,不存在冗余信息(即第一计算节点计算第一子图时不需要的信息),有利于降低系统内存开销。
可选的,在一些实现方式中,该第一子图的第二类型信息具体为以该第一子图中的两个第一类型顶点构成的边的信息,该第一子图是该N个子图中的一个子图。例如,第一子图的第二类型信息为以第一顶点为起始点,且以第二顶点为终止点的边的信息,其中,第一顶点是第一子图中的第一类型顶点,第二顶点是第一子图中的第一类型顶点,且第一顶点与第二顶点不相同。
可选的,在另一些实现方式中,第一子图的第二类型信息具体为以该第一子图中的第一类型顶点和该第一子图中的第二类型顶点构成的边的信息,其中,该第一子图是该N个子图中的一个子图,该第一子图中的第二类型顶点是第二计算节点的本地顶点,该第二计算节点和该第一计算节点是该N个计算节点中的两个计算节点。例如,第二类型信息具体为以第一子图中的第一类型顶点为起始点,且以第一子图中的第二类型顶点为终止点的边的信息。
结合第一方面,在第一方面的某些实现方式中,
所述第一存储池包括N个第一存储区域,其中,所述N个第一存储区域与所述N个计算节点一一对应,每个第一存储区域是对应计算节点的存储区域,所述每个第一存储区域仅用于存储对应的计算节点对应的子图的部分信息。
对上述第一存储区域不作具体限定。例如,第一存储区域可以为内存,基于此,第一存储池包括N个内存,该N个内存与N个计算节点一一对应,每个内存是对应的计算节点的内存。例如,第一存储区域还可以为硬盘,基于此,第一存储池包括N个硬盘,该N个硬盘与N个计算节点一一对应,每个硬盘是对应的计算节点的硬盘。
上述技术方案中,第一存储池是由N个计算节点的N个第一存储区域构成的,N个计算节点中的任意一个计算节点可通过访问本地存储区域的方式快速地从第一存储池中的一个存储区域中获取信息,且该一个存储区域为该任意一个计算节点的存储区域,有利于减少第一计算节点访问远程内存带来的开销和提高内存访问效率,从而提高图计算效率。
结合第一方面,在第一方面的某些实现方式中,该第一存储池是第二计算节点的存储空间,其中,该第二计算节点与该N个计算节点不相同。
上述第二计算节点是除上述N个计算节点之外的任意节点。例如,第二计算节点可以为上述控制节点。例如,第二计算节点还可以是除上述N个计算节点和上述控制节点之外的任意一个计算节点。
上述技术方案中,第一存储池为N个计算节点的非本地存储池,第一存储池对N个计算节点来说是远端存储池,N个计算节点访问计算节点信息时无需考虑计算节点信息是存储在本地还是存储在远端,访问过程较简单。
结合第一方面,在第一方面的某些实现方式中,第一子图与第一计算节点对应,所述第一计算节点是所述N个计算节点中的一个计算节点,所述第一子图是所述N个子图中的一个子图,所述方法还包括:
响应于满足第一条件,所述控制节点发送第二加载消息,其中,所述第二加载消息用于指示将第一子图的第二类型顶点加载至所述第一子图的部分信息中,所述第一子图的第二类型顶点是所述第一子图中包括的第一计算节点的非本地顶点。
结合第一方面,在第一方面的某些实现方式中,
所述满足第一条件包括:所述第一计算节点访问所述第二类型顶点的频率不小于预设频率,或所述第一子图中的第一类型顶点与所述第二类型顶点的关联度不小于预设阈值。
上述技术方案中,在满足第一条件的情况下,控制节点可将第一计算节点访问频率较高的非本地顶点的信息加载至第一子图的部分信息中,或者,将与第一子图中的第一类型顶点关联度较高的非本地顶点的信息加载至第一子图的部分信息中,上述信息都是计算第一子图需要的信息,这样,有利于减少图计算过程中第一计算节点访问远程内存带来的开销和提高内存访问效率,从而提高图计算效率。
结合第一方面,在第一方面的某些实现方式中,对所述N个子图计算包括至少一次迭代,对所述N个子图执行所述至少一次迭代的计算结果为所述一个图的计算结果,所述方法还包括:
在所述至少一次迭代中,所述控制节点执行如下操作:
发送更新消息,其中,所述更新消息用于指示将所述第一存储池中存储的信息更新为对所述N个子图执行所述至少一次迭代的计算结果;
发送更新完成消息,其中,所述更新完成消息用于指示所述第一存储池中存储的信息成功更新为对所述N个子图执行所述至少一次迭代的计算结果。
可选的,在一些实现方式中,对N个子图计算可以包括两次或两次以上迭代,对此不作具体限定。例如,当对N个子图计算包括两次迭代时,在第一次迭代中,控制节点发送第一更新消息和第一更新完成消息,其中,该第一更新消息用于指示将该第一存储池中存储的信息更新为对该N个子图执行该第一次迭代的计算结果,该第一更新完成消息用于指示该第一存储池中存储的信息成功更新为对该N个子图执行该第一次迭代的计算结果;在第二次迭代中,控制节点发送第二更新消息和第二更新完成消息,其中,该第二更新消息用于指示将该第一存储池中存储的信息更新为对该N个子图执行该第二次迭代的计算结果,该第二更新完成消息用于指示该第一存储池中存储的信息成功更新为对该N个子图执行该第二次迭代的计算结果。
可选的,在另一些实现方式中,当第一存储池为除N个计算节点和控制节点之外的节点的存储空间时,响应于接收到更新消息,该第一存储池对应的节点将该第一存储池中存储的信息更新为对该N个子图执行该至少一次迭代的计算结果。
在另一些实现方式中,当第一存储池是由N个计算节点的存储区域构成的时,响应于接收到更新消息,N个计算节点将该第一存储池中存储的信息更新为对该N个子图执行该至少一次迭代的计算结果。
上述技术方案中,在第一存储池中统一对每次迭代的计算结果进行更新,有利于降低系统内存开销。
第二方面,提供了一种图计算方法,该方法包括:
第一计算节点从第一存储区域中获取第一子图的部分信息,其中,该第一子图是对一个图划分后得到的N个子图中的一个子图,该第一子图的部分信息表示与该第一子图中的第一类型顶点相关联的信息,该第一子图中的第一类型顶点是该第一计算节点的本地顶点,该第一计算节点用于对该第一计算节点的本地顶点进行计算;
该第一计算节点基于该第一子图的部分信息对该第一子图计算,得到该第一子图的计算结果。
上述技术方案中,第一计算节点从第一存储区域仅获取第一子图的部分信息,该第一子图的部分信息是第一计算节点计算第一子图需要的信息,不包括冗余信息(即第一计算节点计算第一子图时不需要的信息)。也就是说,第一计算节点可以按照自身需求从第一存储区域中仅获取需要的第一子图的部分信息,以实现对第一子图的计算。避免了现有技术中,第一计算节点需要获取第一子图的全部信息,而第一子图的全部信息中的部分信息(例如,第一计算节点的非本地顶点的部分信息)是冗余信息(即第一计算节点计算第一子图时不需要的信息)。本申请提供的图计算方法,有利于降低系统开销和提高图计算效率。
结合第二方面,在第二方面的某些实现方式中,
该第一子图的部分信息包括第一类型信息和第二类型信息,其中,该第一类型信息为该第一子图中的第一类型顶点的信息,该第二类型信息表示以该第一子图中的第一类型顶点为起始点的边的信息。
可选的,在一些实现方式中,该第二类型信息具体为以第一子图中的两个第一类型顶点构成的边的信息,该第一子图是该N个子图中的一个子图。例如,第二类型信息为以第一顶点为起始点,且以第二顶点为终止点的边的信息,其中,第一顶点是第一子图中的第一类型顶点,第二顶点是第一子图中的第一类型顶点,且第一顶点与第二顶点不相同。
可选的,在另一些实现方式中,该第二类型信息具体为以第一子图中的第一类型顶点和该第一子图中的第二类型顶点构成的边的信息,其中,该第一子图是该N个子图中的一个子图,该第一子图中的第二类型顶点是第二计算节点的本地顶点,该第二计算节点和该第一计算节点是该N个计算节点中的两个计算节点。例如,第二类型信息具体为以第一子图中的第一类型顶点为起始点,且以第一子图中的第二类型顶点为终止点的边的信息。
上述技术方案中,第一子图的部分信息仅包括该第一子图对应的计算节点的本地顶点的信息(即,第一子图中的第一类型顶点的信息),以及以该本地顶点为起始点的边的信息,上述信息都是第一计算节点计算第一子图时需要的信息,避免了现有技术中将一些冗余信息(即第一计算节点计算第一子图时不需要的信息)加载至该第一子图对应的计算节点中,有利于降低系统内存开销。
结合第二方面,在第二方面的某些实现方式中,
满足第一条件,该第一子图的部分信息还包括该第一子图中的第二类型顶点的信息,其中,该满足第一条件包括:该第一计算节点访问该第二类型顶点的频率不小于预设频率,或该第一类型顶点与该第二类型顶点的关联度不小于预设阈值,该第二类型顶点是该第一子图中包括的第一计算节点的非本地顶点。
上述技术方案中,第一子图的部分信息还包括该第一子图中的第二类型顶点的信息,其中,第一子图中的第二类型顶点的信息是第一计算节点计算第一子图时需要的信息,这样,有利于减少图计算过程中第一计算节点跨节点访问带来的通信开销,提高内存访问效率,从而提高图计算效率。
结合第二方面,在第二方面的某些实现方式中,
对该第一子图计算包括至少一次迭代,该第二类型信息具体为以该第一子图中的两个第一类型顶点构成的边的信息,
该第一计算节点基于该第一子图的部分信息对该第一子图进行计算,得到该第一子图的计算结果,包括:
该第一计算节点根据从该第一存储区域中获取的该第一子图的部分信息对该第一子图中的第一类型顶点计算,得到第一计算结果;
该第一计算节点将该第一计算结果确定为该第一子图的计算结果。
可以理解的是,当对第一子图计算包括两次及两次以上迭代时,在第i次迭代中,第一计算节点从第一存储区域中获取的是更新后的第一子图的部分信息,更新后的第一子图的部分信息为第一子图在第i-1次迭代中计算的结果,i为大于等于2的整数。例如,当对第一子图计算包括两次迭代时,在第2次迭代中,第一计算节点从第一存储区域中获取的是更新后的第一子图的部分信息,更新后的第一子图的部分信息为第一子图在第1次迭代中计算的结果。
上述技术方案中,第一子图中的边是由第一子图中的两个第一类型顶点构成的边,在对第一子图的计算过程中,第一计算节点仅需从第一存储区域中获取第一子图的部分信息便可完成对第一子图的计算,不需要跨节点访问除第一计算节点之外的其它节点处存储的信息,减少了第一计算节点跨节点访问带来的通信开销。
结合第二方面,在第二方面的某些实现方式中,对该第一子图计算包括至少一次迭代,该第二类型信息具体为以该第一子图中的第一类型顶点和该第一子图中的第二类型顶点构成的边的信息,其中,该第一子图中的第二类型顶点是第二计算节点的本地顶点,该第二计算节点与该第一计算节点不同,
该第一计算节点基于该第一子图的部分信息对该第一子图进行计算,得到该第一子图的计算结果,包括:
该第一计算节点根据从该第一存储区域中获取的该第一子图的部分信息对该第一子图中的第一类型顶点计算,得到第一计算结果;
响应于接收到更新完成消息,该第一计算节点执行如下操作:
利用第一内存访问技术从该第二计算节点的第二存储区域中获取第二计算结果,其中,该第二计算结果是该第二计算节点对该第一子图中的第二类型顶点的第一子信息执行该至少一次迭代后的结果,该第一子信息表示该第一子图中的第一类型顶点与该第一子图中的第二类型顶点之间关系的信息;
将该第一计算结果和该第二计算结果确定为该第一子图的计算结果。
可以理解的是,当对第一子图计算包括两次及两次以上迭代时,在第i次迭代中,第一计算节点从第一存储区域中获取的是更新后的第一子图的部分信息,更新后的第一子图的部分信息为第一子图在第i-1次迭代中计算的结果,第一计算节点从第二储区域中获取的是更新后的第二子图的部分信息,更新后的第二子图的部分信息为第二子图在第i-1次迭代中计算的结果,i为大于等于2的整数。
上述技术方案中,第一子图中的边包括的一个顶点是该第一计算节点的本地顶点,另一个顶点是该第一计算节点的非本地顶点。第一计算节点仅用于对第一子图中的第一类型顶点进行计算,且第一计算节点需要跨节点访问第二计算节点以获取第二计算节点在至少一次迭代中对第一子图中的第二类型顶点进行计算的结果。
结合第二方面,在第二方面的某些实现方式中,该第一存储区域是该第一计算节点的存储区域,且该第一存储区域仅用于存储该第一子图的部分信息。
上述技术方案中,第一存储区域是第一计算节点的存储区域,第一计算节点可通过访问本地存储区域的方式快速地从第一存储区域中获取信息,有利于提高第一计算节点获取第一子图的部分信息的效率,进一步提高第一计算节点计算第一子图的计算效率。
结合第二方面,在第二方面的某些实现方式中,该第一存储区域是第三计算节点的存储空间,其中,该第三计算节点与该第一计算节点不同。
上述技术方案中,第一存储池为第一计算节点的非本地存储池。也就是说,第一存储池可以是除第一计算节点之外的一个节点(例如,控制节点或计算节点等)的存储池。第一存储池对第一计算节点来说是远端存储池,第一计算节点访问计算节点信息时无需考虑计算节点信息是存储在本地还是存储在远端,访问过程较简单。
结合第二方面,在第二方面的某些实现方式中,在该第一计算节点从第一存储区域中获取第一子图的部分信息之前,该方法还包括:
响应于接收到第一加载消息,该第一计算节点将该第一子图的部分信息加载至该第一存储区域中。
上述技术方案中,当第一存储区域是第一计算节点的存储区域时,第一计算节点接收到第一加载消息后,能够完成对第一子图的部分信息的加载,便于后续第一计算节点对第一子图的计算。
结合第二方面,在第二方面的某些实现方式中,该第一内存访问技术包括远程内存直接访问RDMA技术。
上述技术方案中,第一计算节点可通过RDMA技术跨节点访问信息,无需中央处理器CPU的干预,网络延迟在几十纳秒到数微秒之间,有利于提高图计算效率。
第三方面,提供了一种图计算,该装置包括存储器和处理器,该存储器用于存储指令,该处理器用于读取该存储器中存储的指令,使得该装置执行上述第一方面或第二方面,以及上述第一方面或第二方面中任一种可能实现方式中的方法。
第四方面,提供了一种处理器,包括:输入电路、输出电路和处理电路。所述处理电路用于通过所述输入电路接收信号,并通过所述输出电路输出信号,使得上述第一方面或第二方面中的任一方面,以及第一方面或第二方面中任一种可能实现方式中的方法被实现。
在具体实现过程中,上述处理器可以为芯片,输入电路可以为输入管脚,输出电路可以为输出管脚,处理电路可以为晶体管、门电路、触发器和各种逻辑电路等。输入电路和输出电路可以是同一电路,该电路在不同的时刻分别用作输入电路和输出电路。本申请实施例对处理器及各种电路的具体实现方式不做限定。
第五方面,提供了一种处理装置,包括处理器和存储器。该处理器用于读取存储器中存储的指令,并可通过接收器接收信号,通过输出器输出信号,以执行上述第一方面或第二方面,以及上述第一方面或第二方面中任一种可能实现方式中的方法。
可选地,所述处理器为一个或多个,所述存储器为一个或多个。
可选地,所述存储器可以与所述处理器集成在一起,或者所述存储器与处理器分离设置。
在具体实现过程中,存储器可以为非瞬时性(Non-Transitory)存储器,例如只读存储器(Read Only Memory,ROM),其可以与处理器集成在同一块芯片上,也可以分别设置在不同的芯片上,本申请实施例对存储器的类型以及存储器与处理器的设置方式不做限定。
应理解,相关的数据交互过程例如发送指示信息可以为从处理器输出指示信息的过程,接收能力信息可以为处理器接收输入能力信息的过程。具体地,处理输出的数据可以输出给输出器,处理器接收的输入数据可以来自接收器。
第六方面,提供了一种计算机可读存储介质,用于存储计算机程序,该计算机程序包括用于执行上述第一方面或第二方面,以及上述第一方面或第二方面的任意可能的实现方式中的方法的指令。
第七方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第二方面,以及上述第一方面或第二方面中任一种可能实现方式中的方法。
第八方面,提供了一种芯片系统,包括至少一个处理器和接口,所述至少一个所述处理器,用于调用并运行计算机程序,以使所述芯片系统执行上述第一方面或第二方面,以及上述第一方面或第二方面中任一种可能实现方式中的方法。
第九方面,提供了一种图计算系统,包括上述第三方面所述的图计算装置。
附图说明
图1是基于现有的图计算方法进行图计算时各节点需要存储的信息的示意图。
图2是本申请实施例提供的一种系统架构200的示意图。
图3是本申请实施例提供的一种图计算方法300的示意性交互图。
图4是本申请实施例提供的图计算方法中第一存储池中存储的信息与基于现有的图计算方法进行图计算时各节点需要存储的信息的示意图。
图5是本申请实施例提供的一种图计算方法500的示意性流程图。
图6是本申请实施例提供的一种图计算装置600的示意性结构图。
图7是本申请实施例提供的一种图计算装置700的示意性结构图。
图8是本申请实施例提供的一种图计算装置800的示意性结构图。
图9是本申请实施例提供的一种图计算系统900的示意性结构图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
为便于理解,首先对本申请实施例中涉及到的相关术语进行介绍。
1、图(Graph)
图是将信息中的实体和实体之间的关系,分别抽象表达成为顶点(Vertex)以及顶点间的关系(即,边(Edge))的一种结构数据。图是包括至少一个顶点(Vertex)和至少一条边(Edge)的数据结构。其中,顶点可以映射为实体,有时顶点又称为点、结点或端点等。边表示实体与实体之间的逻辑关系。图可以是有向图或无向图。图中还可以包括顶点以及边以外的其他数据,例如顶点的标签以及边的标签等。
在不同的应用场景中,图中的顶点和边具有不同的实际意义。例如,应用于好友推荐的场景中,图中的每个顶点可以表示一个用户,图中的每条边可以表示不同用户之间的社交关系,图中每个顶点的数据为用户的画像数据以及用户的行为数据(例如,用户的年龄、职业或爱好等)。又如,应用于在商品推荐的场景中,图中的每个顶点可以表示一个用户或一个商品,图中的每条边可以表示用户与商品之间的交互关系(例如,购买关系或收藏关系等)。又如,应用于金融风控的场景中,图中的每个顶点可以表示账号、交易或资金。图中的边可以表示资金的流动关系(例如,图中的环路可以表示循环转账)。再如,应用于企业网络优化的场景中,图中的每个顶点可以表示一个网元,例如路由器、交换机、终端等,图中的每条边可以表示不同网元之间的连接关系。
2、子图(Subgraph)
子图为图的一部分,包括图中的部分顶点以及部分边。子图又称为图中的分区(Partition)。一个图可以包括多个子图。
3、图计算(Graph Computing)
图计算是研究客观世界当中的任何事物和事物之间的关系,对其进行完整的刻划、计算和分析的一门技术。
4、图划分
图划分,是指将一个图数据按照某种规则划分成多个子区(点划分或者边划分),使其在负载均衡的条件下,割边数(复制点)最少。图划分主要包括离线划分,流式划分以及动态重划分。
5、边分割(Edge-Cut)
边分割,又称为边划分或边切割。边切割是指在对图进行划分时,保证点的完整性,选择以边作为子图之间的分割点进行分割。这种分割方式会使得某些边同时重复存储在多个存储节点上,而点则均匀、无冗余的方式存储对应的存储节点上。
6、点分割(Vertex-Cut)
点分割,又称为点划分或点切割。点分割是指在对图进行划分时,保证边的完整性,以点为图的分割点进行分割。这种分割方式会使得某些点同时重复存储在多个存储节点上,而点所拥有的边则均匀、无冗余的方式存储对应的存储节点上。
7、分布式系统
分布式系统将服务器计算机通过网络拓扑组合为集群,计算机之间基于传输层协议交互数据;集群对外展现为一个分布式平台,接收外部图计算请求,利用集群内多台服务器计算机的计算资源和存储资源,对海量数据的处理和分析提供高效可行的解决方案。分布式计算比起传统计算模式,具有可共享资源、可平衡计算负载和吞吐量优化等优点。
8、节点(Node):
节点是分布式系统中的服务器,用于管理、计算或者存储目的。一般来说1个节点是1个存储服务器。
9、内存池(Memory Pool)
内存池,是一种内存分配方式。内存池又称为固定大小区块规划(Fixed-Size-Blocks Allocation)。内存池是在使用内存之前,先申请分配一定数量的、一定规模(例如,大小相等)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。基于内存池的内存分配方式,减少了内存碎片的产生以及提高了内存分配效率、
10、远程内存直接访问(Remote Direct Memory Access,RDMA)
RDMA是一种新的直接内存访问技术。RDMA让计算机可以直接从其他计算机的内存中存取数据,而不涉及任何计算机的处理器、缓存或操作系统的处理,从而实现真正的零拷贝数据通信。
基于分布式系统对数量级较大的图数据进行计算时,能够解决内存不足的问题,以及提高图计算效率。基于分布式系统对图数据进行计算前,需要先将一个图划分为多个小规模的子图,然后将该多个小规模的子图部署在该分布式系统上,以使该分布式系统中包括的多个计算节点并行对该多个小规模的子图计算,得到该一个图的计算结果。
为确保图计算过程能够正常执行,对一个大规模图数据划分后得到的多个小规模的子图包括的信息,往往远大于该一个大规模图数据包括的信息,其中,多个小规模的子图包括的多余的信息是冗余信息。在图计算过程中各计算节点获取这些冗余信息,需要消耗更多的通信开销。在图计算过程中各计算节点对这些冗余信息进行加载,需要消耗更多的系统存储资源(例如,内存或硬盘)。现有的基于分布式系统对大规模图数据进行计算时,存在图计算效率低和系统开销大的问题。
下面,结合图1,具体介绍现有技术中基于分布式系统进行图计算时各节点需要存储的信息。
如图1中的(a)的左边所示的图数据,该图数据具体包括4个顶点和6条有向边。为便于描述,可将这4个顶点分别记为:VA,VB,VC和VD,且顶点A表示实体#1,顶点B表示实体#2,顶点C表示实体#3,顶点D表示是实体#4。可将这6条有向边分别记为:
Figure BDA0002967069000000091
Figure BDA0002967069000000092
一个顶点的信息包括但不限于:该一个顶点所代表的实体名称,以及该一个顶点的多个属性(如出入度)等信息。以VC为例,VC的信息包括但不限于:VC所代表的实体名称即实体#1,实体#3和实体#2之间的关系的信息,以及实体#3和实体#4之间的关系的信息。以
Figure BDA0002967069000000093
为例,VA'表示VA的部分信息,VB'表示VB的部分信息,具体的,VA'表示的是与VB相关的VA中的信息,VB'表示的是与VA相关的VB中的信息。
Figure BDA0002967069000000094
表示顶点A指向顶点B的边的信息,即实体#1指向实体#2的信息。
如图1中的(a)的左边所示的虚线,对该图数据以点划分的方式进行划分,并基于包括节点N1,节点N2和节点N3的分布式系统对该图数据划分后的子图进行计算,以得到该图数据的计算结果。其中,节点N1的本地顶点为顶点A和顶点C,也就是说,节点N1用于根据顶点A的信息对顶点A进行计算,以及根据顶点C的信息对顶点C进行计算。节点N2的本地顶点为顶点B。节点N3的本地顶点为顶点D。可以理解的是,当一个节点需要获该一个节点的非本地顶点在每次计算后的结果时,该一个节点可通过访问该非本地顶点对应的计算节点,以获取该非本地顶点在每次计算后的结果。
如图1中的(b)示出了各个节点上存储的信息。具体的,节点N1中存储有4个顶点信息和3条有向边信息。这4个顶点分别为:VA,VB,VC和VD,其中,VB和VD是膨胀数据,也是节点N1的非本地顶点。这3条有向边分别为:
Figure BDA0002967069000000095
Figure BDA0002967069000000096
节点N2中存储有4个顶点信息和3条有向边信息。这4个顶点分别为:VA,VB和VC,其中,VA和VC是膨胀数据,也是节点N2的非本地顶点。这2条有向边分别为:
Figure BDA0002967069000000101
Figure BDA0002967069000000102
节点N3中存储有2个顶点信息和1条有向边信息。这2个顶点分别为:VC和VD,其中,VC是膨胀数据,也是节点N3的非本地顶点。这1条有向边为
Figure BDA0002967069000000103
也就是说,基于边图1中的(a)的左边虚线所示的点划分对图数据划分后,这3个节点上总共需要存储的顶点数目等于9,存储的边数目等于6。故需要存储的顶点数据的膨胀率为
Figure BDA0002967069000000104
基于上述现有的图计算方法,当图数据数量级越大时,对图数据划分后得到的多个子图存在越严重的数据膨胀(例如,图中的顶点膨胀,或图中的边膨胀)现象,需要消耗更多的系统存储资源(例如,内存或硬盘)和更多的通信开销,且图计算效率较低。
本申请提供了一种图计算方法,该方法在保证图计算结果的精度的前提下,能够提高图计算效率和降低系统开销。
下面,介绍适用于本申请实施例提供的图计算方法的系统架构200的示意图。
图2是本申请实施例提供的一种系统架构200的示意图。如图2所示,该系统架构200包括:一个控制节点,N(N为大于等于2的整数)个计算节点和一个内存池,其中内存池可以被划分为N个存储区域。应理解,图2仅为示意,并不对适用于本申请实施例提供的图计算方法的系统架构构成任何限定。
在一些实现方式中,内存池是除上述N个计算节点之外的一个节点(例如,计算节点或存储节点)的内存。基于此,每个计算节点可以通过RDMA技术读取内存池中存储的信息。可选的,此时,内存池中还可以不被划分为N个存储区域。
在另一些实现方式中,内存池是由上述N个计算节点的内存构成的,且N个存储区域与N个计算节点一一对应。基于此,每个计算节点可通过访问本地内存的方式获取内存池中该每个计算节点对应的存储区域中存储的信息,每个计算节点可通过RDMA技术获取内存池中包括的除该计算节点之外的其它计算节点对应的存储区域中存储的信息。
例如,计算节点1与内存池中的存储区域1对应,计算节点1可通过访问本地内存的方式获取内存池中存储区域1中存储的信息,还可以通过RDMA技术获取内存池中存储区域2,存储区域3,…,或者存储区域N中存储的信息。
上述系统架构200中的一个控制节点和N个计算节点,又可称为分布式图计算系统,具体的,对分布式图计算系统不作限定。分布式图计算系统包括但不限于:Pregel,Giraph,GraphLab和TUX2
在本申请实施例中,对上述控制节点和上述N个计算节点的关系不作限定。在一些实现方式中,上述控制节点可以为N个计算节点中的一个节点。在另一些实现方式中,上述控制节点可以除N个计算节点之外的一个节点。
下面,结合图3至图5详细介绍本申请实施例提供的图计算方法。
图3是本申请实施例提供的一种图计算方法300的示意性交互图。如图3所示,方法300包括步骤310至步骤380,下面对步骤310至步骤380进行详细介绍。其中,方法300的执行主体可以包括上文图2所示的系统架构200中的控制节点和计算节点。
步骤310,控制节点确定第一对应关系。
其中,第一对应关系表示对一个图划分后得到的N个子图与N个计算节点之间的对应关系,N=2。
上述划分得到的N个子图中的每个子图包括至少一个顶点和至少一条边。其中,一个顶点的信息包括但不限于:顶点所代表的实体名称,以及属性(如出入度)等信息。一条边的信息为该一条边中的两个顶点对应的两个实体之间的关系的信息。
可选的,在步骤310之前控制节点还可以执行如下操作:
获取图计算请求信息,其中,图计算请求包括但不限于:一个图和图划分策略;
根据图划分策略将一个图划分为N个子图。
在本申请实施例中,对一个图进行划分的方式不作具体限定。例如,图划分方式可以是点划分。例如,图划分方式还可以是边划分等。在本申请实施例中,对一个图数据的规模也不作具体限定。
上述步骤310中,第一对应关系是由控制节点根据接收到的图计算请求确定的。可选的,在另一些实现方式中,第一对应关系还可以是预先在控制节点中配置好的,基于此,控制节点可以不执行上述步骤310,仅执行步骤320和步骤330即可实现对一个图的计算。
步骤320,控制节点基于第一对应关系,确定N个子图的部分信息,N=2。
其中,每个子图的部分信息表示与每个子图中的第一类型顶点相关联的信息,每个子图中的第一类型顶点是每个子图对应的计算节点的本地顶点,每个子图对应的计算节点用于对每个子图对应的计算节点的本地顶点进行计算。
上述每个子图的部分信息包括第一类型信息和第二类型信息,其中,第一类型信息为每个子图中的第一类型顶点的信息,第二类型信息表示以每个子图中的第一类型顶点为起始点的边的信息。
第二类型信息表示以每个子图中的第一类型顶点为起始点的边的信息,可以理解的是,第二类型信息具体可以表示为以下两种形式的信息:
形式一:第一子图的第二类型信息具体为以第一子图中的两个第一类型顶点构成的边的信息,且第一子图是N个子图中的任意一个子图。例如,第一子图的第二类型信息具体为以第一子图中的一个第一类型顶点为起始点,且以第一子图中的另一个第一类型顶点为终止点的边的信息。
形式二:第一子图的第二类型信息具体为以第一子图中的第一类型顶点和第一子图中的第二类型顶点构成的边的信息,其中,第一子图是N个子图中的一个子图,第一子图中的第二类型顶点是第二计算节点的本地顶点,第二计算节点和第一计算节点是N个计算节点中的两个计算节点。例如,第一子图的第二类型信息具体为以第一子图中的第一类型顶点为起始点,且以第一子图中的第二类型顶点为终止点的边的信息。
上述形式二中的第一子图中的第二类型顶点,也是第一计算节点的非本地顶点,还是第二子图中的第一类型顶点。基于此,上述形式二中第一子图的部分信息仅包括第一子图中的第一类型顶点的信息,以及与该第一子图中的第一类型顶点相关联的第二子图中的第一类型顶点的信息。本申请实施例提供的第一子图的部分信息不包括该第一子图中的非本地顶点的全部信息,避免了现有技术中将一些冗余信息加载至第一存储池中,有利于降低系统开销。例如,以图1中的(a)的划分方式为例,将节点N1上存储的子图记为第一子图,则第一子图的部分信息仅包括:VA,VC
Figure BDA0002967069000000111
Figure BDA0002967069000000112
即,第一子图的部分信息不包括VB和VD。也就是说,节点N1上存储的信息都是节点N1对第一子图进行计算时需要的信息,不包括其它一些多余信息。
在本申请实施例中,对N个子图中的每个子图的部分信息包括的第二类型信息的形式不作具体限定。也就是说,每个子图的部分信息可以包括形式一中所述的第二类型信息,还可以包括形式二中所述的第二类型信息。例如,子图#1是N个子图中的一个子图,该子图#1的部分信息仅包括形式一中所述的第二类型信息。例如,子图#2是N个子图中的又一个子图,该子图#2的部分信息既包括形式一中所述的第二类型信息,又包括形式二中所述的第二类型信息。
可选的,在一些实现方式中,第一子图与第一计算节点对应,第一计算节点是N个计算节点中的一个计算节点,第一子图是N个子图中的一个子图,方法还包括:
响应于满足第一条件,控制节点发送第二加载消息,其中,第二加载消息用于指示将第一子图的第二类型顶点加载至第一子图的部分信息中,第一子图的第二类型顶点是第一子图中包括的第一计算节点的非本地顶点。
上述满足第一条件包括但不限于:第一计算节点访问第二类型顶点的频率不小于预设频率,或第一子图中的第一类型顶点与第二类型顶点的关联度不小于预设阈值。
例如,以图1中的(a)的划分方式为例,将节点N1上存储的子图记为第一子图,当节点N1访问VB的频率大于预设频率时,控制节点发送加载消息,该加载消息指示将VB的全部信息加载至第一子图的部分信息中。
步骤330,控制节点将加载消息#1(即,第一加载消息的一例)发送给计算节点#1(即,第一计算节点的一例)。
其中,加载消息#1用于指示计算节点#1将子图#1(即,第一子图的一例)的部分信息加载至第一存储池中,以使计算节点#1基于从第一存储池中获取的子图#1的部分信息对子图#1计算得到子图#1的计算结果。
上述第一存储池可以包括2个第一存储区域,这2个第一存储区域中的一个第一存储区域(简记为,第一存储区域#1)与计算节点#1对应,这2个第一存储区域中的另一个第一存储区域(简记为,第一存储区域#2)与计算节点#2对应。其中,每个第一存储区域是对应计算节点的存储区域,每个第一存储区域用于存储对应的计算节点对应的子图的部分信息。也就是说,第一存储区域#1是计算节点#1的存储区域,且第一存储区域#1用于存储计算节点#1对应的子图#1的部分信息。第一存储区域#2是计算节点#2的存储区域,且第一存储区域#2用于存储计算节点#2对应的子图#2的部分信息。
在另一些实现方式中,当基于包括N个计算节点和一个控制节点的分布式系统对一个图进行计算时,上述第一存储池可以包括N个第一存储区域,N个第一存储区域与N个计算节点一一对应,每个第一存储区域是对应计算节点的存储区域,每个第一存储区域用于存储对应的计算节点对应的子图的部分信息。
步骤340,响应于接收到加载消息#1,计算节点#1将子图#1的部分信息加载至计算节点#1的存储区域#1中。
步骤350,控制节点将加载消息#2(即,第一加载消息的又一例)发送给计算节点#2(即,第一计算节点的又一例)。
其中,加载消息#2用于指示计算节点#2将子图#2(即,第一子图的又一例)的部分信息加载至第一存储池中,以使计算节点#2基于从第一存储池中获取的子图#2的部分信息对子图#2计算得到子图#2的计算结果。
步骤360,响应于接收到加载消息#2,计算节点#2将子图#2的部分信息加载至计算节点#2的存储区域#2中。
在本申请实施例中,对上述步骤330至步骤360的执行顺序不作具体限定,仅需保证步骤330在步骤340之前执行,以及步骤350在步骤360之前执行即可。例如,还可以按照如下顺序执行上述步骤330至步骤360:步骤330,步骤350,步骤340和步骤360。
步骤370,计算节点#1基于从存储区域#1中获取的子图#1的部分信息对子图#1进行计算,得到子图#1的计算结果。
在一些实现方式中,对子图#1计算包括至少一次迭代,第二类型信息具体为以子图#1中的两个第一类型顶点构成的边的信息,
第一计算节点基于子图#1的部分信息对子图#1进行计算,得到子图#1的计算结果,包括:
第一计算节点根据从第一存储区域中获取的子图#1的部分信息对子图#1中的第一类型顶点计算,得到第一计算结果;
第一计算节点将第一计算结果确定为子图#1的计算结果。
基于上述技术方案,当对子图#1计算包括两次或两次以上迭代时,在第一次迭代中,控制节点发送第一更新消息和第一更新完成消息,其中,该第一更新消息用于指示将该第一存储池中存储的信息更新为对该子图#1执行该第一次迭代的计算结果,该第一更新完成消息用于指示该第一存储池中存储的信息成功更新为对该子图#1执行该第一次迭代的计算结果;在第二次迭代中,控制节点发送第二更新消息和第二更新完成消息,其中,该第二更新消息用于指示将该第一存储池中存储的信息更新为对该子图#1执行该第二次迭代的计算结果,该第二更新完成消息用于指示该第一存储池中存储的信息成功更新为对该N个子图执行该第二次迭代的计算结果。
在另一些实现方式中,对子图#1计算包括至少一次迭代,第二类型信息具体为以子图#1中的第一类型顶点和子图#1中的第二类型顶点构成的边的信息,其中,子图#1中的第二类型顶点是第二计算节点的本地顶点,第二计算节点与第一计算节点不同,
第一计算节点基于子图#1的部分信息对子图#1进行计算,得到子图#1的计算结果,包括:
第一计算节点根据从第一存储区域中获取的子图#1的部分信息对子图#1中的第一类型顶点计算,得到第一计算结果;
响应于接收到更新完成消息,第一计算节点执行如下操作:
利用第一内存访问技术从第二计算节点的第二存储区域中获取第二计算结果,其中,第二计算结果是第二计算节点对子图#1中的第二类型顶点的第一子信息执行至少一次迭代后的结果,第一子信息表示子图#1中的第一类型顶点与子图#1中的第二类型顶点之间关系的信息;
将第一计算结果和第二计算结果确定为子图#1的计算结果。
上述第一内存访问技术包括远程内存直接访问RDMA技术。
在本申请实施例中,当第一存储区域是第一计算节点的存储区域时,第一计算节点通过访问本地内存的方式访问第一存储区域,以获取第一存储区域中存储的子图#1的部分信息。当第一存储区域是除第一计算节点之外的节点的存储区域时,第一计算节点可以通过访问远端内存的方式(例如,RDMA技术)访问第一存储区域,以获取第一存储区域中存储的子图#1的部分信息。
在本申请实施例中,计算节点#1可以包括图计算引擎(Graph Compute Engine)装置#1,计算节点#1基于子图#1的部分信息对子图#1进行计算,可以理解为,图计算引擎装置#1基于子图#1的部分信息对子图#1进行计算。
步骤380,计算节点#2基于从存储区域#2中获取的子图#2的部分信息对子图#2进行计算,得到子图#2的计算结果。
其中,步骤380的具体实现方法与上述步骤370的具体实现方法相同,此处不再详细赘述。
可选的,在步骤380之后控制节点还可以执行如下步骤:
接收子图#1的计算结果,以及接收子图#2的计算结果;
将子图#1的计算结果和子图#2的计算结果确定为上述一个图的计算结果。
应理解,本申请实施例提供的图计算方法对图的类型不作具体限定。例如,可以基于方法300对一个有向图进行图计算。例如,还可以基于方法300对一个无向图进行图计算。例如,当基于3个或3个以上的计算节点对一个图进行分布式计算时,可以将上述步骤310中的一个图划分为3个或3个以上的子图,即N取大于等于3的整数。
图4是本申请实施例提供的图计算方法中第一存储池中存储的信息与基于现有的图计算方法进行图计算时各节点需要存储的信息的示意图。应理解,图4仅为示意,并不对本申请实施例提供的图计算方法中第一存储池中存储的信息构成任何限定。
上文方法300中介绍了第一存储池具体包括以下两种形式:
形式一:第一存储池包括N个第一存储区域,其中,N个第一存储区域与N个计算节点一一对应,每个第一存储区域是对应计算节点的存储区域,每个第一存储区域仅用于存储对应的计算节点对应的子图的部分信息。
当上述方法300中的第一存储池为本申请实施例提供的形式一所述的存储池时,基于上文中的方法300对图1中的(a)左边的图进行图计算,第一存储池中存储的信息具体参见图4中的(a)。此时,第一存储池的第一存储区域中存储的信息仅包括:VA,VC
Figure BDA0002967069000000141
Figure BDA0002967069000000142
且该第一存储区域是节点N1的存储区域;第一存储池的第一存储区域中存储的信息仅包括:VB
Figure BDA0002967069000000143
Figure BDA0002967069000000144
且该第一存储区域是节点N2的存储区域;第一存储池的第三存储区域中存储的信息仅包括:VD
Figure BDA0002967069000000145
且该第三存储区域是节点N3的存储区域;其中,以
Figure BDA0002967069000000146
为例,
Figure BDA0002967069000000147
表示顶点A指向顶点B的边的信息,即实体#1指向实体#2的信息。
形式二:第一存储池是第二计算节点的存储空间,第二计算节点与N个计算节点不同。
基于形式二所述的第一存储池该第一存储池是N个计算节点计算节点的远端存储池(即,N个计算节点计算节点的非本地存储池)。
本申请实施例中对形式二所述的第一存储池的内部结构不作限定。例如,还可以将形式二所述的第一存储池划分为两个或两个以上的存储区域等。
当上述方法300中的第一存储池为本申请实施例提供的形式二所述的存储池时,基于上文中的方法300对图1中的(a)左边的图进行图计算,第一存储池中存储的信息具体参见图4中的(b)。此时,第一存储池中存储的信息仅包括:VA,VB,VC,VD
Figure BDA0002967069000000148
Figure BDA0002967069000000149
Figure BDA00029670690000001410
其中,以
Figure BDA00029670690000001411
为例,
Figure BDA00029670690000001412
表示顶点A指向顶点B的边的信息,即实体#1指向实体#2的信息。
基于现有的图计算方法对图1中的(a)左边的图进行图计算时,各节点存储的信息参见图4中的(c)所示。具体的,节点N1的存储区域中存储的信息包括:VA,VB,VC,VD
Figure BDA0002967069000000151
Figure BDA0002967069000000152
节点N2的存储区域中存储的信息包括:VA,VB,VC
Figure BDA0002967069000000153
Figure BDA0002967069000000154
节点N3的存储区域中存储的信息包括:VC,VD
Figure BDA0002967069000000155
本申请提供的图计算方法中,第一存储池中存储的信息少于现有技术中各节点存储的信息,能够避免每个节点重复加载和获取一些每个节点不需要的信息,有利于降低系统内存开销和提高图计算效率。
下面,以第一存储池是N个计算节点的内存构成的存储池为例,介绍本申请实施例提供的上述图计算方法300的计算流程。
图5是本申请实施例提供的一种图计算方法500的示意性流程图。如图5所示,方法500包括步骤510至步骤540,下面对步骤510至步骤540进行详细介绍。其中,方法500可以应用于上文所述的系统架构200。
步骤510,控制节点将一个图划分为N个子图,以及确定每个子图对应的计算节点,N=2。
上述步骤510,具体将一个图划分为2个子图,且这两个子图分别为:子图#1和子图#2,且子图#1与计算节点#1对应,子图#2与计算节点#2对应。步骤510中将一个图划分为N个子图的方法,与上述步骤310中将一个图划分为N个子图的方法相同,具体参见上述步骤310,此处不再赘述。
在上述步骤510之后,控制节点将计算节点对应的子图的信息发送给该计算节点,其中,子图的信息包括但不限于:子图的标号、子图的名称、子图的属性等。
计算节点#1的执行过程和计算节点#2的执行过程原理相同,下面以计算节点#1为例进行介绍。应理解,计算节点#2也适用于下文步骤520至步骤500所描述的方法。
步骤520,在计算节点#1中,确定计算节点#1对应的子图#1包括的顶点#1是否为计算节点#1的本地顶点。
上述顶点#1可以是子图#1中包括的一条边中的顶点,上述顶点#1还可以是子图#1中的单独的一个顶点,对此不作具体限定。
在本申请实施例中,对计算节点#1确定一个顶点是否为该计算节点#1的本地顶点的方法不作具体限定。例如,计算节点#1可以根据该计算节点#1中设置的配置信息确定顶点#1是否为计算节点#1的本地顶点。
在计算节点#1中,确定计算节点#1对应的子图#1包括的顶点#1是否为计算节点#1的本地顶点,包括:
确定计算节点#1对应的子图#1包括的顶点#1是计算节点#1的本地顶点,在步骤520之后,执行步骤521;
确定计算节点#1对应的子图#1包括的顶点#1不是计算节点#1的本地顶点,在步骤520之后,执行步骤522。
步骤521,将顶点#1加载至第一存储池的内存#1中。
其中,内存#1是计算节点#1的本地内存存#1是计算节点#1的本地内存,故计算节点#1可以通过访问本地内存的方式快速访问第一存储池中的内存#1。
步骤522,将顶点#1的部分信息加载至内存#1中,将顶点#1的全部信息加载至第一存储池的内存#2中。
其中,内存#2是计算节点#2的本地内存,顶点#1是计算节点#2的本地顶点。顶点#1的部分信息可以理解为,与子图#1的第一类型顶点相关联的顶点#1的信息,其中,子图#1的第一类型顶点是子图#1包括的计算节点#1的本地顶点。
在图数据加载之后,需要上述2个计算节点对上述2个子图进行迭代计算,迭代计算方法具体参见下文步骤530,步骤531,步骤532和步骤533。
步骤530,每次迭代前,计算节点#1确定子图#1包括的顶点#1是否是计算节点#1的本地顶点。
其中,对子图#1和子图#2进行图计算共包括M次迭代,M为正整数。以顶点#1为例,在不同迭代次数中,顶点#1可以是计算节点#1的本地顶点,顶点#1还可以是计算节点#1的非本地顶点。例如,当M等于5时,在对子图#1的第1次迭代中,配置顶点#1是计算节点#1的本地顶点,在对子图#1的第3次迭代中,配置顶点#1是计算节点#1的非本地顶点。因此,每次迭代前,计算节点#1确定子图#1包括的顶点#1是否是计算节点#1的本地顶点。
其中,每次迭代前,计算节点#1确定子图#1包括的顶点#1是否是计算节点#1的本地顶点,具体包括:
在确定顶点#1是计算节点#1的本地顶点的情况下,在步骤530之后执行步骤531;
在确定顶点#1不是计算节点#1的本地顶点的情况下,在步骤530之后执行步骤532。
步骤531,从内存#1中获取顶点#1的全部信息。
内存#1是计算节点#1的本地顶点,计算节点#1可通过访问本地内存的方式快速从内存#1中获取顶点#1的全部信息。
步骤532,计算节点#1从内存#2中获取顶点#1的部分信息。
内存#2是计算节点#1的非本地顶点,计算节点#1可通过RDMA技术从内存#2中获取顶点#1的部分信息。
步骤533,每次迭代中,计算节点#1基于获取的子图#1包括的计算节点#1的本地顶点的信息对子图#1进行计算,得到子图#1在每次迭代的计算结果。
在每次迭代计算后,需要对第一存储池中存储的信息进行更新,以便于后续的迭代计算,具体更新的方法参见步骤540。
步骤540,每次迭代后,当顶点#1是计算节点#1的本地顶点,将内存#1中存储的信息更新为子图#1在每次迭代的计算结果;当顶点#1是计算节点#2的本地顶点,将内存#2中存储的信息更新为子图#1在每次迭代的计算结果。
上述步骤540所述的更新过程,直接在第一存储池中实现顶点信息的更新。控制节点向第一存储池发送更新消息,响应于接收到更新消息,第一存储池对应的计算节点将第一存储池的内存#1或内存#2中存储的信息更新为子图#1在每次迭代的计算结果,第一存储池是第一存储池对应的计算节点的存储空间。
步骤550,确定没有完成对N个子图的所有迭代,继续执行步骤530。
可以理解的是,在步骤550之后,执行下一次图计算迭代过程时,从第一存储池中获取的顶点相关的信息为上一次迭代过程中对N个子图进行计算后的结果。
在当前迭代结束后,确定完成对N个子图的所有迭代过程,将当前迭代对N个子图的计算结果确定为上述图数据的计算结果。
应理解,图5仅为示意,并不对本申请实施例提供的图计算方法构成任何限定。例如,在一些实现方式中,上述第一存储池可以为上述N个子图对应的N个计算节点之外的其它节点中的内存池。在此情况下,上述第一存储池不是有上述N个子图对应的N个计算节点构成的。例如,在另一些实现方式中,在图数据加载过程中,还可以将子图#1中包括的计算节点#1的部分非本地顶点加载至第一存储池的内存#1中。其中,该部分非本地顶点可以是与子图#1包括的计算节点#1的本地顶点关联度高的顶点,该部分非本地顶点还可以计算节点#1访问频率高的顶点。
上文,结合图2至图5详细介绍了适用于本申请实施例提供的图计算方法适用的系统架构,以及图计算方法。下面,结合图6至图9详细介绍本申请实施例提供的图计算装置和图计算系统。应理解,方法实施例的描述与探测装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图6是本申请实施例提供的一种图计算装置600的示意性结构图。如图6所示,该装置600包括:
处理单元610,用于控制节点确定第一对应关系,其中,该第一对应关系表示对一个图划分后得到的N个子图与N个计算节点之间的对应关系,N为整数,且N≥2;
该处理单元610,还用于基于该第一对应关系,确定该N个子图的部分信息,其中,每个子图的部分信息表示与该每个子图中的第一类型顶点相关联的信息,该每个子图中的第一类型顶点是该每个子图对应的计算节点的本地顶点,该每个子图对应的计算节点用于对该每个子图对应的计算节点的本地顶点进行计算;
收发单元620,用于发送第一加载消息,其中,该第一加载消息用于指示将该N个子图的部分信息加载至第一存储池中,以使该N个计算节点基于从该第一存储池中获取的该N个子图的部分信息对该N个子图计算得到该一个图的计算结果。
可选的,在一些实现方式中,该每个子图的部分信息包括第一类型信息和第二类型信息,其中,该第一类型信息为该每个子图中的第一类型顶点的信息,该第二类型信息表示以该每个子图中的第一类型顶点为起始点的边的信息。
可选的,在一些实现方式中,该第一存储池包括N个第一存储区域,其中,该N个第一存储区域与该N个计算节点一一对应,每个第一存储区域是对应计算节点的存储区域,该每个第一存储区域仅用于存储对应的计算节点对应的子图的部分信息。
可选的,在一些实现方式中,该第一存储池是第二计算节点的存储空间,该第二计算节点与该N个计算节点不同。
可选的,在一些实现方式中,第一子图与第一计算节点对应,该第一计算节点是该N个计算节点中的一个计算节点,该第一子图是该N个子图中的一个子图,
该收发单元620,还用于发送第二加载消息,其中,该第二加载消息用于指示将第一子图的第二类型顶点加载至该第一子图的部分信息中,该第一子图的第二类型顶点是该第一子图中包括的第一计算节点的非本地顶点。
可选的,在一些实现方式中,该满足第一条件包括:该第一计算节点访问该第二类型顶点的频率不小于预设频率,或该第一子图中的第一类型顶点与该第二类型顶点的关联度不小于预设阈值。
可选的,在一些实现方式中,对该N个子图计算包括至少一次迭代,对该N个子图执行该至少一次迭代的计算结果为该一个图的计算结果,
在该至少一次迭代中,该收发单元620用于:
发送更新消息,其中,该更新消息用于指示将该第一存储池中存储的信息更新为对该N个子图执行该至少一次迭代的计算结果;
发送更新完成消息,其中,该更新完成消息用于指示该第一存储池中存储的信息成功更新为对该N个子图执行该至少一次迭代的计算结果。
图7是本申请实施例提供的一种图计算装置700的示意性结构图。如图7所示,该装置700包括:
收发单元720,用于从第一存储区域中获取第一子图的部分信息,其中,该第一子图是对一个图划分后得到的N个子图中的一个子图,该第一子图的部分信息表示与该第一子图中的第一类型顶点相关联的信息,该第一子图中的第一类型顶点是该第一计算节点的本地顶点,该第一计算节点用于对该第一计算节点的本地顶点进行计算;
处理单元710,用于基于该第一子图的部分信息对该第一子图计算,得到该第一子图的计算结果。
可选的,在一些实现方式中,
该第一子图的部分信息包括第一类型信息和第二类型信息,其中,该第一类型信息为该第一子图中的第一类型顶点的信息,该第二类型信息表示以该第一子图中的第一类型顶点为起始点的边的信息。
可选的,在一些实现方式中,
满足第一条件,该第一子图的部分信息还包括该第一子图中的第二类型顶点的信息,其中,该满足第一条件包括:该第一计算节点访问该第二类型顶点的频率不小于预设频率,或该第一类型顶点与该第二类型顶点的关联度不小于预设阈值,该第二类型顶点是该第一子图中包括的第一计算节点的非本地顶点。
可选的,在一些实现方式中,对该第一子图计算包括至少一次迭代,该第二类型信息具体为以该第一子图中的两个第一类型顶点构成的边的信息,
该收发单元720,还用于从该第一存储区域中获取的该第一子图的部分信息对该第一子图中的第一类型顶点计算,得到第一计算结果;
该处理单元710,还用于将该第一计算结果确定为该第一子图的计算结果。
可选的,在一些实现方式中,对该第一子图计算包括至少一次迭代,该第二类型信息具体为以该第一子图中的第一类型顶点和该第一子图中的第二类型顶点构成的边的信息,其中,该第一子图中的第二类型顶点是第二计算节点的本地顶点,该第二计算节点与该第一计算节点不同,
该处理单元710还用于根据从该第一存储区域中获取的该第一子图的部分信息对该第一子图中的第一类型顶点计算,得到第一计算结果;
该收发单元720还用于执行如下操作:
接收到更新完成消息;
利用第一内存访问技术从该第二计算节点的第二存储区域中获取第二计算结果,其中,该第二计算结果是该第二计算节点对该第一子图中的第二类型顶点的第一子信息执行该至少一次迭代后的结果,该第一子信息表示该第一子图中的第一类型顶点与该第一子图中的第二类型顶点之间关系的信息;
该处理单元710,还用于将该第一计算结果和该第二计算结果确定为该第一子图的计算结果。
可选的,在一些实现方式中,该第一存储区域是该第一计算节点的存储区域,且该第一存储区域仅用于存储该第一子图的部分信息。
可选的,在一些实现方式中,该第一存储区域是第三计算节点的存储空间,其中,该第三计算节点与该第一计算节点不同。
可选的,在一些实现方式中,
该收发单元720,还用于接收到第一加载消息;
该处理单元710,还用于将该第一子图的部分信息加载至该第一存储区域中。
可选的,在一些实现方式中,该第一内存访问技术包括远程内存直接访问RDMA技术。
图8是本申请实施例提供的一种图计算装置800的示意性结构图。
如图8所示,该装置800包括:处理器810和存储器820。其中,处理器810和存储器820之间通过内部连接通路互相通信,传递控制和/或数据信号,该存储器820用于存储计算机程序,该处理器810用于从该存储器820中调用并运行该计算机程序,以执行上文所述的方法300和/或方法500。
在一些实施例中,处理器810的功能与图6所示的处理单元610的具体功能相对应,此处不再赘述。
在另一些实施例中,处理器810的功能与图7所示的处理单元710的具体功能相对应,此处不再赘述。
可选的,在一些实施例中,该装置800还可以包括接收器830。
在一些实施例中,接收器830的功能与图6所示的收发单元620的具体功能相对应,此处不再赘述。
在另一些实施例中,接收器830的功能与图7所示的收发单元720的具体功能相对应,此处不再赘述。
图9是本申请实施例提供的一种图计算系统900的示意性结构图。如图9所示,该系统900包括图计算装置800。
本申请实施例还提供一种计算机可读存储介质,其上存储程序,当其在计算机上运行时,使得该计算机能够实现上述方法300和/或方法500。
本申请实施例提供了一种计算机程序产品,当该计算机程序产品在图计算装置800上运行时,使得图计算装置800执行上述方法实施例中的方法300和/或方法500。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (20)

1.一种图计算方法,其特征在于,所述方法包括:
控制节点确定第一对应关系,其中,所述第一对应关系表示对一个图划分后得到的N个子图与N个计算节点之间的对应关系,N为整数,且N≥2;
所述控制节点基于所述第一对应关系,确定所述N个子图的部分信息,其中,每个子图的部分信息表示与所述每个子图中的第一类型顶点相关联的信息,所述每个子图中的第一类型顶点是所述每个子图对应的计算节点的本地顶点,所述每个子图对应的计算节点用于对所述每个子图对应的计算节点的本地顶点进行计算;
所述控制节点发送第一加载消息,其中,所述第一加载消息用于指示将所述N个子图的部分信息加载至第一存储池中,以使所述N个计算节点基于从所述第一存储池中获取的所述N个子图的部分信息对所述N个子图计算得到所述一个图的计算结果。
2.根据权利要求1所述的方法,其特征在于,
所述每个子图的部分信息包括第一类型信息和第二类型信息,其中,所述第一类型信息为所述每个子图中的第一类型顶点的信息,所述第二类型信息表示以所述每个子图中的第一类型顶点为起始点的边的信息。
3.根据权利要求1或2所述的方法,其特征在于,
所述第一存储池包括N个第一存储区域,其中,所述N个第一存储区域与所述N个计算节点一一对应,每个第一存储区域是对应计算节点的存储区域,所述每个第一存储区域仅用于存储对应的计算节点对应的子图的部分信息。
4.根据权利要求1或2所述的方法,其特征在于,
所述第一存储池是第二计算节点的存储空间,所述第二计算节点与所述N个计算节点不同。
5.根据权利要求1-3任一项所述的方法,其特征在于,第一子图与第一计算节点对应,所述第一计算节点是所述N个计算节点中的一个计算节点,所述第一子图是所述N个子图中的一个子图,所述方法还包括:
响应于满足第一条件,所述控制节点发送第二加载消息,其中,所述第二加载消息用于指示将第一子图的第二类型顶点加载至所述第一子图的部分信息中,所述第一子图的第二类型顶点是所述第一子图中包括的第一计算节点的非本地顶点。
6.根据权利要求5所述的方法,其特征在于,
所述满足第一条件包括:所述第一计算节点访问所述第二类型顶点的频率不小于预设频率,或所述第一子图中的第一类型顶点与所述第二类型顶点的关联度不小于预设阈值。
7.根据权利要求1-6任一项所述的方法,其特征在于,对所述N个子图计算包括至少一次迭代,对所述N个子图执行所述至少一次迭代的计算结果为所述一个图的计算结果,所述方法还包括:
在所述至少一次迭代中,所述控制节点执行如下操作:
发送更新消息,其中,所述更新消息用于指示将所述第一存储池中存储的信息更新为对所述N个子图执行所述至少一次迭代的计算结果;
发送更新完成消息,其中,所述更新完成消息用于指示所述第一存储池中存储的信息成功更新为对所述N个子图执行所述至少一次迭代的计算结果。
8.一种图计算方法,其特征在于,所述方法包括:
第一计算节点从第一存储区域中获取第一子图的部分信息,其中,所述第一子图是对一个图划分后得到的N个子图中的一个子图,所述第一子图的部分信息表示与所述第一子图中的第一类型顶点相关联的信息,所述第一子图中的第一类型顶点是所述第一计算节点的本地顶点,所述第一计算节点用于对所述第一计算节点的本地顶点进行计算;
所述第一计算节点基于所述第一子图的部分信息对所述第一子图计算,得到所述第一子图的计算结果。
9.根据权利要求8所述的方法,其特征在于,
所述第一子图的部分信息包括第一类型信息和第二类型信息,其中,所述第一类型信息为所述第一子图中的第一类型顶点的信息,所述第二类型信息表示以所述第一子图中的第一类型顶点为起始点的边的信息。
10.根据权利要求8或9所述的方法,其特征在于,
满足第一条件,所述第一子图的部分信息还包括所述第一子图中的第二类型顶点的信息,其中,所述满足第一条件包括:所述第一计算节点访问所述第二类型顶点的频率不小于预设频率,或所述第一类型顶点与所述第二类型顶点的关联度不小于预设阈值,所述第二类型顶点是所述第一子图中包括的第一计算节点的非本地顶点。
11.根据权利要求9所述的方法,其特征在于,对所述第一子图计算包括至少一次迭代,所述第二类型信息具体为以所述第一子图中的两个第一类型顶点构成的边的信息,
所述第一计算节点基于所述第一子图的部分信息对所述第一子图进行计算,得到所述第一子图的计算结果,包括:
所述第一计算节点根据从所述第一存储区域中获取的所述第一子图的部分信息对所述第一子图中的第一类型顶点计算,得到第一计算结果;
所述第一计算节点将所述第一计算结果确定为所述第一子图的计算结果。
12.根据权利要求9所述的方法,其特征在于,对所述第一子图计算包括至少一次迭代,所述第二类型信息具体为以所述第一子图中的第一类型顶点和所述第一子图中的第二类型顶点构成的边的信息,其中,所述第一子图中的第二类型顶点是第二计算节点的本地顶点,所述第二计算节点与所述第一计算节点不同,
所述第一计算节点基于所述第一子图的部分信息对所述第一子图进行计算,得到所述第一子图的计算结果,包括:
所述第一计算节点根据从所述第一存储区域中获取的所述第一子图的部分信息对所述第一子图中的第一类型顶点计算,得到第一计算结果;
响应于接收到更新完成消息,所述第一计算节点执行如下操作:
利用第一内存访问技术从所述第二计算节点的第二存储区域中获取第二计算结果,其中,所述第二计算结果是所述第二计算节点对所述第一子图中的第二类型顶点的第一子信息执行所述至少一次迭代后的结果,所述第一子信息表示所述第一子图中的第一类型顶点与所述第一子图中的第二类型顶点之间关系的信息;
将所述第一计算结果和所述第二计算结果确定为所述第一子图的计算结果。
13.根据权利要求8-12任一项所述的方法,其特征在于,所述第一存储区域是所述第一计算节点的存储区域,且所述第一存储区域仅用于存储所述第一子图的部分信息。
14.根据权利要求8-11任一项所述的方法,其特征在于,
所述第一存储区域是第三计算节点的存储空间,其中,所述第三计算节点与所述第一计算节点不同。
15.根据权利要求8-13任一项所述的方法,在所述第一计算节点从第一存储区域中获取第一子图的部分信息之前,所述方法还包括:
响应于接收到第一加载消息,所述第一计算节点将所述第一子图的部分信息加载至所述第一存储区域中。
16.根据权利要求12所述的方法,其特征在于,所述第一内存访问技术包括远程内存直接访问RDMA技术。
17.一种图计算装置,其特征在于,所述装置包括处理器和存储器,所述存储器用于存储指令,所述处理器用于读取所述存储器中存储的指令,以执行如权利要求1至16中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至16中任一项所述的方法。
19.一种芯片系统,其特征在于,包括至少一个处理器和接口,所述至少一个所述处理器,用于调用并运行计算机程序,以使所述芯片系统执行如权利要求1至16中任一项所述的方法。
20.一种图计算系统,所述系统包括如权利要求17所述的图计算装置。
CN202110255888.3A 2021-03-09 2021-03-09 图计算方法和装置 Pending CN115048553A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110255888.3A CN115048553A (zh) 2021-03-09 2021-03-09 图计算方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110255888.3A CN115048553A (zh) 2021-03-09 2021-03-09 图计算方法和装置

Publications (1)

Publication Number Publication Date
CN115048553A true CN115048553A (zh) 2022-09-13

Family

ID=83156117

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110255888.3A Pending CN115048553A (zh) 2021-03-09 2021-03-09 图计算方法和装置

Country Status (1)

Country Link
CN (1) CN115048553A (zh)

Similar Documents

Publication Publication Date Title
US11532117B2 (en) Density coordinate hashing for volumetric data
US9683852B2 (en) Dispatching map matching tasks by a cluster server
CN109033234B (zh) 一种基于状态更新传播的流式图计算方法及系统
US10068033B2 (en) Graph data query method and apparatus
CN110058936B (zh) 用于确定专用处理资源的资源量的方法、设备和计算机程序产品
CN109191287B (zh) 一种区块链智能合约的分片方法、装置及电子设备
CN111723933A (zh) 神经网络模型的训练方法和相关产品
WO2020215752A1 (zh) 图计算方法及装置
CN111090712A (zh) 一种数据处理方法、装置、设备及计算机存储介质
WO2020233709A1 (zh) 模型压缩方法及装置
US20220229809A1 (en) Method and system for flexible, high performance structured data processing
CN113568860A (zh) 基于深度学习的拓扑映射方法、装置、介质及程序产品
KR102326586B1 (ko) 큰 규모 분산 행렬 곱 처리 방법 및 그 장치
CN110222410B (zh) 一种基于Hadoop MapReduce的电磁环境仿真方法
KR20230145197A (ko) 공간 관계 결정 방법, 장치, 컴퓨터 기기 및 저장 매체
CN114020469A (zh) 基于边缘节点的多任务学习方法、装置、介质与设备
WO2021027745A1 (zh) 一种图重构方法及装置
CN111221827B (zh) 基于图形处理器的数据库表连接方法、装置、计算机设备和存储介质
CN115412401B (zh) 训练虚拟网络嵌入模型及虚拟网络嵌入的方法和装置
CN115048553A (zh) 图计算方法和装置
CN107193656B (zh) 多核系统的资源管理方法、终端设备及计算机可读存储介质
CN114741029A (zh) 应用于去重存储系统的数据分配方法及相关设备
CN114897666A (zh) 图数据存储、访问、处理方法、训练方法、设备及介质
CN115203133A (zh) 数据处理方法、装置、归约服务器及映射服务器
KR102225745B1 (ko) 제한된 메모리 하에 확률적 콘텐츠 저장 방법 및 그 시스템

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