【圖計算系統】小白入門(一):圖計算系統的基本概念、開源框架及其應用

如非作者允許,本文禁止轉載。

博主主頁: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):
在這裏插入圖片描述

在這裏插入圖片描述

通過圖計算模型可以將物聯網數據都用圖表達,使得複雜關係稱爲可表達可計算的數據類型:

在這裏插入圖片描述

構建超大型的生物、物理、社會科學仿真:

在這裏插入圖片描述

推薦系統、反欺詐應用等:

在這裏插入圖片描述

總結:

圖計算就是研圖計算就是研究如何高效計算、存儲並管理大量圖數據等問題的方法。

圖計算以一種靈活的抽象方式將不同的人與物連接在一起,爲傳統數據分析應用提供了一種新的設計和計算方式。未來,隨着可獲取數據的進一步增多,傳統方式難以有效表達和處理各實體間的關係,圖計算勢必會成爲大數據領域一種新的通用計算模型,從而帶來巨大的理論和應用創新機遇。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章