如非作者允许,本文禁止转载。
博主主页:https://blog.csdn.net/weixin_44936889
图 (graph) 具有很强的抽象性与灵活性,相比线性表、层次树等组织方式,图在结构和语义等方面
具有更强的表示能力,是最常用、最重要的数据结构之一。
正是由于图结构丰富的表现力,现实生活中的诸多应用场景都用图结构表示,例如社交网络、文献网络、交通网络与知识图谱等。因此,依托图计算的应用无处不在,如深度学习、计算机视觉、模式识别、信息检索以及语义 Web 分析等,广泛渗透于经济建设、国防安全、社会生活等诸多重要领域。
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V, E)。其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
根据E是否有方向,图可以分为有向图和无向图:
根据E是否有权重,图可以分为权重图(网)和非权重图等。
图结构处理的于每个顶点的逻辑位置都是相对的,顶点之间的关联依赖也是不确定的,所以无法以数据元素在内存中的物理位置来表示元素之间的关系,即无法用简单的顺序存储结构来表示。
常见的图储存方式有:
即用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。
如:
可表示为:
即将结点存放入数组,对结点的孩子进行链式存储。
如:
可表示为:
综合邻接表和逆邻接表形式的一种链式存储结构,为了便于求得图中顶点的度(出度和入度)而提出。
如:
在邻接多重表在邻接多重表中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边结点同时链接在两个链表中。
如:
边集数组是由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息。
图数据库存储直接从真实世界中获取的数据,按照一定的规则对图数据库中存储的数据进行抽取和转换后,得到的图结构数据将作为输入数据由图处理引擎进行处理。以图计算引擎运行的硬件平台来进行分类,则主要分为三类:
(1)基于分布式环境的大规模图计算系统
(2)基于单机的大规模图计算系统
(3)基于硬件加速器的大规模图计算系统
由于传统的关系型数据本身存在建模缺陷、水平伸缩等问题,而图数据具有更强大的表达能力,且可以将不同来源、不同类型的数据融合到同一个图里进行分析,得到原本独立分析难以发现的结果,因此,图计算可以广泛地应用在社交网络、推荐系统、网络安全、文本检索和生物医疗等领域。
主要调研了三个分布式框架(Ligra,gemini和plato):
Ligra是用于共享内存的轻量级图形处理框架。它特别适用于实现并行图遍历算法,其中在迭代中仅处理一部分顶点。该项目的基本观点是最大的公开可用的现实世界图形都适合共享内存。当图形适合共享内存时,与分布式内存图形处理系统相比,使用Ligra处理图形可以将性能提高多达几个数量级。
项目地址:https://people.csail.mit.edu/jshun/ligra.shtml
论文地址:https://www.cs.cmu.edu/~jshun/ligra.pdf
源码地址:https://github.com/jshun/ligra
公开视频:https://www.youtube.com/watch?v=W5mDx_G45RQ
Gemini项目建立的目标是通过减小分布式开销和优化本地计算实现实现一个兼具扩展性和高性能的分布式图计算系统。它的贡献之一是将双模式计算引擎(推动模式和拉动模式)从单机的共享内存扩展到了分布式环境中。并且进一步将两种模式下的计算过程都细分成发送端和接收端两个部分,从而将分布式系统的通信从计算中剥离出来。同时gemini将顶点集进行块式划分,将这些块分配给各个节点,然后让每个顶点的拥有者(即相应节点)维护相应的出边/入边,从而保留了图数据的局部性特点。Gemini 的劣势主要来源于一些不可避免的分布式实现所带来的开销,例如额外的用于消息收发的指令和访存,以及分布式内存环境下慢于共享内存的收敛速度。
论文地址:https://www.usenix.org/system/files/conference/osdi16/osdi16-zhu.pdf
源码地址:https://github.com/thu-pacman/GeminiGraph
公开PPT:https://myslide.cn/slides/3004
Plato继承于gemini,它认为原有的主流图计算开源框架的如果要完成超大规模数据的图计算,需要花费超长的时间或者需要大量的计算资源。而许多真实业务场景要求超大规模图计算必须在有限时间和有限资源内完成。因此Plato致力于提供超大规模图数据的离线图计算和图表示学习。它的特点是计算能力强、内存消耗较小(只选取了Plato与Spark GraphX在PageRank和LPA这两个benchmark算法的性能对比),并且为开发者同时提供了底层API和应用层的接口工具。
源码地址:https://github.com/Tencent/plato
图计算实现的主要瓶颈在于承载图结构的数据库能否支持低延迟高吞吐 I/O 并保证数据的完整性,并针对图结构做计算框架的优化,遍历子的实现。
核心算法包括:
社区发现、图聚类;
稠密子图挖掘算法;
中心性计算算法;
基础图算法;
图匹配算法;
图论中的算法可以直接应用在地理信息系统(GIS)和 建筑信息模型(BIM)上。这些算法都基于广度优先搜索(BFS)和深度优先搜索(DFS):
通过图计算模型可以将物联网数据都用图表达,使得复杂关系称为可表达可计算的数据类型:
构建超大型的生物、物理、社会科学仿真:
推荐系统、反欺诈应用等:
图计算就是研图计算就是研究如何高效计算、存储并管理大量图数据等问题的方法。
图计算以一种灵活的抽象方式将不同的人与物连接在一起,为传统数据分析应用提供了一种新的设计和计算方式。未来,随着可获取数据的进一步增多,传统方式难以有效表达和处理各实体间的关系,图计算势必会成为大数据领域一种新的通用计算模型,从而带来巨大的理论和应用创新机遇。
感兴趣的同学关注我的公众号——可达鸭的深度学习教程: