large graph挖掘的技術基礎


我一直在做社交網絡的挖掘工作,深感目前的一些技術並不能滿足社交挖掘的需要。我並沒有用過太多的工具,而且圖計算的平台也沒有用過,涉及到大規模數據的離線分析,主要是依賴hadoop。不過,這並不妨礙,我從挖掘需求的角度來探討:社交挖掘到底需要哪些技術基礎,需要一些什么樣的工具。

題目中有一個詞:large graph。也有很多人認為是big graph。我之所以改變稱謂,主要的原因在我前面的博客中有體現。因為big data中的個體之間,往往具有關系,這個樣就組成了一個graph,並且這是個超大的graph。元數據信息要比單純的big data要高幾個量級。所以,為了進一步體現graph之大,我稱之為large graph。到底於多大呢?我以新浪微博為例來說明(其實新浪微博在這些large graph中,目前算比較小的)。新浪微博號稱4億的用戶,那么用戶關系有多少呢?我估計在大概在300億-400億。我們在處理社交網絡的時候,絕大多數是要和邊(也就是關系)打交道的,那這樣的一個規模,如何高效存儲、計算對挖掘效果的影響,是非常直接的。如果這是一個面試題,大家該如何分析並給出方案呢。

首先根據自己之前做挖掘的一些經驗,總結一下,在large graph上,要進行哪些操作:

  1. 隨機訪問:
    1. 讀取一個節點的鄰居(在微博中,就是讀取關注或者粉絲,如何讀取粉絲??)
    2. 讀取兩個節點之間的關系
  2. 順序訪問:
    1. 圖的遍歷:寬度優先,深度優先等
    2. 最短路徑
  3. 其他分析:介數計算等

這個是我在挖掘過程中,主要涉及的操作,而且要針對不同的訪問分析需求,速度要快。如果要求某個計算平台,能夠全部滿足,並且速度都很快,那是不現實的。所以,針對特定功能需求,特殊的去優化性能。比如,我在挖掘過程中有一個特定的需求:快速判斷兩個人之間的關系,要在盡可能短的時間內,完成百萬次的判斷。這個為基礎計算平台的設計,提出了一個直接的挑戰。

在big data出來的時候,相伴着NoSQL也火了起來。這都是相輔相成的,數據多了,自然就需要適合的存儲技術,那一台及其無法存儲,那么直接的想法就是划分,多台進行存儲。可是關系如何划分呢?

這個要從large graph的分析開始,large graph有哪些性質,這些性質對快速存取、快速計算都有哪些影響呢?

  1. 冪律分布
    1. 首先是正向的影響。這個性質的意思直白一點說,就是粉絲多的人比較集中,很少。更多的是長尾的、粉絲比較少的用戶。這個可以幫助我們在計算過程中,合理的做一些剪枝。
    2. kv數據之所以可以采用NoSQL,進行划分存儲的主要原因是,它可以均勻的划分,讓每台機器的負載都近乎均衡。但是關系數據呢?這個冪律分布直接擊碎了按人划分,存儲關系的美夢。這是絕對不會均勻的。少數機器的數據很大,其它的機器數據很少。
  2. 小世界特性
    1. 這個很直接,就是兩個人之間的最短路徑很短。最直接的體現了六度分離的理論。
    2. 在做一些圖分析的時候,代價很大,涉及的節點很多。
  3. 社團結構
    1. 社團結構本身是很重要的性質。我之前的博客有詳細的介紹。
    2. 社團結構的存在,直接導致了圖划分的問題難度增加。要保證均勻,保證划分之間邊最少。社團結構是個很大的障礙。

上面的三個特性,使得圖划分的難度大大增加。但是,由於數據量級的劇增,圖的划分還是非常重要的選擇。目前已經有的一些算法,KL,metis(目前state-of-the-art的方法)等,在處理百萬、千萬級節點的網絡時,還可應付。但是億級節點呢?十億級呢?其實,划分是個核心,是重中之重,存儲、計算都依賴這個。否則,就會有大量的冗余,更多的IO消耗。

需求就在我們面前。現在產生巨大關系數據的公司已經產生,Facebook、微博等。但是能夠處理這些數據的公司呢?可以斷言,能夠大規模挖掘關系數據的公司,必將是下一個Google。這是一波浪潮,讓我們加入進去,一起沖浪。

【完】

【思考題】

1億節點,100億關系,如何迅速判斷連個節點是否有邊?節點用整數唯一標識。如果大家對這個問題感興趣,可以和我一起探討,解決實際問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM