图计算系统的基本概念、开源框架及其应用

  • 一、图结构概论:
    • 1.1什么是图?
    • 1.2 图处理的难点:
    • 1.3 图储存方式:
      • (1) 邻接矩阵:
      • (2) 邻接表:
      • (3) 十字链表(有向图):
      • (4) 邻接多重表(无向图):
      • (5) 边集数组(权重图):
  • 二、图计算概论:
    • 2.1 基本概念:
    • 2.2 开源框架:
      • Ligra:
      • Gemini:
      • Plato:
    • 2.3 图计算的实现:
    • 2.4 图计算的应用:
  • 总结:
  • 关注我的公众号:

如非作者允许,本文禁止转载。

博主主页:https://blog.csdn.net/weixin_44936889

一、图结构概论:

1.1什么是图?

图 (graph) 具有很强的抽象性与灵活性,相比线性表、层次树等组织方式,图在结构和语义等方面
具有更强的表示能力,是最常用、最重要的数据结构之一。

正是由于图结构丰富的表现力,现实生活中的诸多应用场景都用图结构表示,例如社交网络、文献网络、交通网络与知识图谱等。因此,依托图计算的应用无处不在,如深度学习、计算机视觉、模式识别、信息检索以及语义 Web 分析等,广泛渗透于经济建设、国防安全、社会生活等诸多重要领域。

图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V, E)。其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

根据E是否有方向,图可以分为有向图和无向图:

根据E是否有权重,图可以分为权重图(网)和非权重图等。

1.2 图处理的难点:

图结构处理的于每个顶点的逻辑位置都是相对的,顶点之间的关联依赖也是不确定的,所以无法以数据元素在内存中的物理位置来表示元素之间的关系,即无法用简单的顺序存储结构来表示。

1.3 图储存方式:

常见的图储存方式有:

(1) 邻接矩阵:

即用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

如:

可表示为:

(2) 邻接表:

即将结点存放入数组,对结点的孩子进行链式存储。

如:

可表示为:

(3) 十字链表(有向图):

综合邻接表和逆邻接表形式的一种链式存储结构,为了便于求得图中顶点的度(出度和入度)而提出。

如:


可表示为:

(4) 邻接多重表(无向图):

在邻接多重表在邻接多重表中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边结点同时链接在两个链表中。

如:


可表示为:

(5) 边集数组(权重图):

边集数组是由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息。

如:

可表示为:

二、图计算概论:

2.1 基本概念:

图数据库存储直接从真实世界中获取的数据,按照一定的规则对图数据库中存储的数据进行抽取和转换后,得到的图结构数据将作为输入数据由图处理引擎进行处理。以图计算引擎运行的硬件平台来进行分类,则主要分为三类:

(1)基于分布式环境的大规模图计算系统
(2)基于单机的大规模图计算系统
(3)基于硬件加速器的大规模图计算系统

由于传统的关系型数据本身存在建模缺陷、水平伸缩等问题,而图数据具有更强大的表达能力,且可以将不同来源、不同类型的数据融合到同一个图里进行分析,得到原本独立分析难以发现的结果,因此,图计算可以广泛地应用在社交网络、推荐系统、网络安全、文本检索和生物医疗等领域。

2.2 开源框架:

主要调研了三个分布式框架(Ligra,gemini和plato):

Ligra:

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将顶点集进行块式划分,将这些块分配给各个节点,然后让每个顶点的拥有者(即相应节点)维护相应的出边/入边,从而保留了图数据的局部性特点。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:

Plato继承于gemini,它认为原有的主流图计算开源框架的如果要完成超大规模数据的图计算,需要花费超长的时间或者需要大量的计算资源。而许多真实业务场景要求超大规模图计算必须在有限时间和有限资源内完成。因此Plato致力于提供超大规模图数据的离线图计算和图表示学习。它的特点是计算能力强、内存消耗较小(只选取了Plato与Spark GraphX在PageRank和LPA这两个benchmark算法的性能对比),并且为开发者同时提供了底层API和应用层的接口工具。

源码地址:https://github.com/Tencent/plato

2.3 图计算的实现:

图计算实现的主要瓶颈在于承载图结构的数据库能否支持低延迟高吞吐 I/O 并保证数据的完整性,并针对图结构做计算框架的优化,遍历子的实现。

核心算法包括:

  1. 社区发现、图聚类;

  2. 稠密子图挖掘算法;

  3. 中心性计算算法;

  4. 基础图算法;

  5. 图匹配算法;

(以下为Plato的核心算法)

2.4 图计算的应用:

图论中的算法可以直接应用在地理信息系统(GIS)和 建筑信息模型(BIM)上。这些算法都基于广度优先搜索(BFS)和深度优先搜索(DFS):

通过图计算模型可以将物联网数据都用图表达,使得复杂关系称为可表达可计算的数据类型:

构建超大型的生物、物理、社会科学仿真:

推荐系统、反欺诈应用等:

总结:

图计算就是研图计算就是研究如何高效计算、存储并管理大量图数据等问题的方法。

图计算以一种灵活的抽象方式将不同的人与物连接在一起,为传统数据分析应用提供了一种新的设计和计算方式。未来,随着可获取数据的进一步增多,传统方式难以有效表达和处理各实体间的关系,图计算势必会成为大数据领域一种新的通用计算模型,从而带来巨大的理论和应用创新机遇。

关注我的公众号:

感兴趣的同学关注我的公众号——可达鸭的深度学习教程:

【图计算系统】小白入门(一):图计算系统的基本概念、开源框架及其应用相关推荐

  1. 一分钟学会看k线图_一分钟学会看k线图 炒股新手入门看图教程

    面对形形色色的K线及其组合,许多投资者有些犯难.看涨时它跌.看跌时它涨,这正是投资者并未正确认识和使用K线所带来的结果.只有正确认识和使用K线,才能真正发挥"K线"这门技术的威力 ...

  2. Node.js 小白入门课3-设置基本数据库

    Node.js 小白入门课3-设置基本数据库 Sequelize(框架,数据库包文件,简化数据库编写)是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL ...

  3. MySQL数据库(小白入门版)

    MySQL数据库(小白入门版) 数据库的基本概念 一.数据库基本概念 数据 使用一些介质进行存储,例如文字存在文档中 数据库可以完成数据持久化保存+快速提取 那么想要实现以上功能,需要编写一系列的规则 ...

  4. 学编程前需要了解计算机的知识吗,小白入门编程需要了解哪些知识?

    如今,IT职业凭借着高薪和宽广的开展前景成为无数人向往的职业之一,那么关于想要学习编程的小伙伴来讲,小白入门编程需求了解哪些常识呢?本文为咱们整理了一些入门需求了解并掌握的基础常识,内容有计算机的界说 ...

  5. 如何给纸壳箱上装,#ps修图p图抠图视频教程小白入门基础课程

    如何给纸壳箱上装,#ps修图p图抠图视频教程小白入门基础课程

  6. html 甘特图_甘特图怎么画?甘特图基础教程,小白快速入门简单易懂

    甘特图是什么?可能你是第一次听到,甘特图是通过活动顺序和时间间隔表示某一特定项目其顺序与时间的关系.不同于时间表,或日程规划表,甘特图可以使使用者更直观的知道在某一时间的工作内容和进度. 甘特图常见用 ...

  7. python图形用户界面pyside_PySide——Python图形化界面入门教程(一)

    标签: PySide--Python图形化界面入门教程(一) --基本部件和HelloWorld 原文链接:http://pythoncentral.io/intro-to-pysidepyqt-ba ...

  8. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  9. wxpython按钮形状如何修改_Python图形化界面入门教程 - 使用wxPython自定义表

    原标题:Python图形化界面入门教程 - 使用wxPython自定义表 来自: Linux迷 网址:https://www.linuxmi.com/python-gui-wxpython-zidin ...

最新文章

  1. 14年12月CCF真题1-门禁系统
  2. 用Python解密2021年最新富豪榜,马云居然连前三都没进
  3. Linux高可用集群(Corosync+Pacemaker)
  4. Mocha BSM 6.8成功发布
  5. python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容
  6. Serverless Kubernetes 再升级 | 全新的网关能力增强
  7. 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法
  8. Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变
  9. 小学奥数 7657 连乘积末尾0的个数-2022.01.26
  10. Collections.sort的两个方法
  11. 黑暗森林:知识图谱的前世今生
  12. 常用iOS游戏开发工具与SDK
  13. Qt的下载安装全教程
  14. 苹果id被停用_三招解决Apple ID停用问题
  15. 搭建zabbix监控及邮件报警
  16. 简单分析大量京东快递揽收后没有物流的单号
  17. 哪些原因会导致头晕头痛,日常应该如何去注意呢?
  18. Jabber 技 术 概 况
  19. Java 中各种空(''、\u0000、null)的区别?
  20. 三字经 -王应麟 章太炎

热门文章

  1. iOS获取手机的Mac地址
  2. 使用STM32输出PWM波形并驱动LED呼吸灯
  3. 零极点判别系统稳定性和通过平衡点找出矩阵特征值来判定稳定性之间的关系
  4. 激光FMCW测距-FMCW信号源+激光调制器
  5. Flutter 用Texture控件在Windows平台实现视频渲染
  6. java httpinvoker漏洞_spring httpinvoker 例子
  7. php pho 连接 MySQL_LNMP(nginx php-fpm mysql) 环境部署——mysql
  8. python 练习题02
  9. 镜头产生红外离焦的原因和解决办法
  10. 【概率论】理解全概率公式