圖分區技術

這個概念跟關係型數據庫的表分區是類似的,也就是在圖結構數據量非常大的時候,怎麼通過分佈式的形式對圖進行切分。

在關係型數據庫的表分區的應用中,我們對錶進行分區可能需要考慮的目的主要是:一個表存爲多個分區之後的join和查詢的問題。同理:我們在設計圖分區策略的時候同樣需要考慮的是,圖進行分區之後,在做圖迭代算法(並行計算)時,最小化在數據量的傳輸,最小化IO操作,只有減少這部分的開銷,才能提高圖分區的性能。

另外,業界比較成熟的OLTP產品Neo4j是不支持圖分區的,所有的數據都存儲於一個實例上,因爲他是index-free的實現方式,爲了保證圖查詢的實時性能,因此沒有引入分區的方式,所有的圖分析和查詢都在一個存儲上完成,避免網絡傳輸和IO的開銷。

一般而言,業界主要有這麼幾種分區的技術:

edge-cut:邊分割

邊分割的方式一般適合在圖數據中low-degree的數據分佈中,也就是中圖的連接入度或者出度(有向圖)比較少的情況,這樣vertex的分割就會比較均勻,減少跨多個集羣的數據交換;

vertex-cut:點分割

點分割的方式跟邊分割的情況相反,在high-degree的圖數據分佈的情況下,也就是節點的度特別大,通過點分割,就能夠同樣減少跨多個集羣的數據交換,同時減少節點的副本;如PowerGraph的實現方式;

PowerGraph在一篇論文裏PowerGraph: Distributed Graph-Parallel Computation on Natural Graphs以數學的形式證明了在符合冪律分佈的自然圖中使用點分割的好處。

hybrid-cut:動態混合分割

混合分割的技巧通常需要依賴於圖計算架構採集的動態的統計信息,首先需要對圖的數據分佈情況做估計,然後再決定圖分割的策略,使用點分割還是邊分割的方式,這種分割方式比較複雜,如Flink Gelly圖計算架構就採用這種混合的分割方式;

hash/random partitioning:哈希,隨機分區

這種分區方式比較簡單粗暴,一般是使用邊的hash或者節點的hash來分區,這種方式分區比較簡單,但是性能不能保證;

比如OrientDB採用的就是基於hash的分區方式;

 

總的來說,使用分區技術的圖分析架構,一般都是定位爲OLAP的解決方案,目前還沒有OLTP性能不錯,也支持分區的圖數據庫引擎,商業產品TigerGraph和微軟的GraphEngine是少數宣稱既支持OLAP也支持OLTP的產品,後續的文章可以重點分析分析。

 

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