一種圖計算方法及引擎的制作方法【專利摘要】本發(fā)明公開了一種圖計算方法及引擎,所述計算方法為:A.對圖的原始關(guān)系數(shù)據(jù)進行索引,獲得索引數(shù)據(jù),所述圖的頂點和邊上對應(yīng)所述的索引數(shù)據(jù);B.選擇所述圖的一個或多個頂點為起始節(jié)點,進行廣度優(yōu)先或深度優(yōu)先的多步游走,獲得包括用于候選的多個結(jié)束節(jié)點的游走拓撲圖,基于廣度優(yōu)先或深度優(yōu)先的圖游走算法、根據(jù)游走路徑中參與的頂點和邊對應(yīng)的索引數(shù)據(jù)計算所述起始節(jié)點到達所述結(jié)束節(jié)點的到達概率;C.對計算出的所述到達概率進行排序。本發(fā)明的圖計算方法可獲得去流行、強關(guān)系的結(jié)果;圖計算引擎可對各類圖數(shù)據(jù)進行索引,支持多種圖算法,支持自定義圖計算的拓撲圖,支持索引數(shù)據(jù)/拓撲圖/共享庫數(shù)據(jù)的實時增加/刪除/修改?!緦@f明】一種圖計算方法及引擎【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及圖計算領(lǐng)域,尤其是涉及一種圖計算方法及引擎?!?br>背景技術(shù):
】[0002]圖計算(graphcomputation)對于關(guān)系構(gòu)建、用戶群分析和發(fā)現(xiàn)、屬性傳播等有很重要的作用。在大數(shù)據(jù)時代,圖的規(guī)模大到一定程度后,單機就很難解決大規(guī)模的圖計算了。因此,進行大規(guī)模數(shù)據(jù)的圖算法開發(fā)和調(diào)試具有重要意義。目前比較成熟的方案有Graphx和GraphLab。其中GraphLab項目的一個分支是GraphChi,該框架能夠在單機上完成大數(shù)據(jù)的圖計算。[0003]GraphChi可以在個人計算機上高效的進行大規(guī)模的圖計算,它有自己原創(chuàng)的從硬盤獲取圖數(shù)據(jù)的優(yōu)化算法,并且支持流圖(streaminggraph)更新以及在計算中改變圖的結(jié)構(gòu)。[0004]GraphChi在進行大規(guī)模圖計算的時候,將圖分成了不同的分片,這些分片可以在內(nèi)存中并行處理,分片的數(shù)據(jù)更新通過連續(xù)寫入來實現(xiàn),以最小化硬盤上的隨機操作,合理使用機器內(nèi)存。[0005]GraphChi利用個人計算機上的海量硬盤,將圖數(shù)據(jù)存儲在硬盤上,為提升硬盤的數(shù)據(jù)存取效率,GraphChi使用了PSW(ParallelSlidingWindow)算法來解決這一關(guān)鍵的性能提升問題。PSW通過sourceshards對1個分片中所有的vertex進行排序,這樣每個分片本質(zhì)上都被分割成由vertex組成的塊,同時這些vertex又會與其它分片關(guān)聯(lián)。[0006]GraphChi和GraphLab-樣也是基于vertex-centric模型來實現(xiàn)的,并行且異步(邊上數(shù)據(jù)發(fā)生的變化對后續(xù)計算是立即可見的)。[0007]GraphChi通過vertex拆分來實現(xiàn)并行,設(shè)置一個mastervertex,多個mirrorvertex,各mirrorvertex處理自己分內(nèi)的數(shù)據(jù),最終由mastervertex進行匯總,然后mastervertex將匯總后的數(shù)據(jù)對mirrorvertex進行更新,同時也更新相關(guān)邊上的數(shù)據(jù)。[0008]GraphChi的執(zhí)行模型為"Gather-Apply-Scatter",具體介紹如下:[0009]每個vertex每一輪迭代經(jīng)過"Gather-Apply-Scatter"三個階段。[0010](l)Gather階段[0011]計算相關(guān)的vertex從鄰接vertex和自身收集數(shù)據(jù),這一階段,vertex和邊上的數(shù)據(jù)都是只讀的。[0012](2)Apply階段[0013]mirrorvertex將Gather階段計算的結(jié)果發(fā)給mastervertex,由其進行匯總及進一步的計算,然后更新mastervertex的數(shù)據(jù),并同步到mirrorvertex中。這一階段,vertex的數(shù)據(jù)可以修改,邊上的數(shù)據(jù)不可以修改。[0014](3)Scatter階段[0015]vertex數(shù)據(jù)更新完成之后,更新邊上的數(shù)據(jù),這一階段,邊上的數(shù)據(jù)是可寫的,vertex上的數(shù)據(jù)是只讀的。[0016]并行計算的同步通過mastervertex和mirrorvertex來實現(xiàn),mirrorvertex相當(dāng)于每個vertex對外的一個接口人,這樣就把數(shù)據(jù)通信抽象成了vertex的數(shù)據(jù)交換行為。[0017]雖然GraphChi能夠?qū)崿F(xiàn)在個人計算機上進行大規(guī)模的圖計算,但仍存在一些不足和缺陷:如GraphChi無建立索引模塊,不支持自定義圖計算的拓撲圖,不支持插件的熱插拔等。因此,上述現(xiàn)有的圖計算方法及引擎在使用上仍存在有不便與缺陷,而亟待加以進一步改進?!?br/>發(fā)明內(nèi)容】[0018]本發(fā)明的目的是提供一種可以獲得去流行、強關(guān)系的結(jié)果的圖計算方法。[0019]為實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:[0020]-種圖計算方法,主要包括以下步驟:A.對圖的原始關(guān)系數(shù)據(jù)進行索引,獲得索引數(shù)據(jù),所述圖的頂點和邊上對應(yīng)所述的索引數(shù)據(jù);B.選擇所述圖的一個或多個頂點為起始節(jié)點,進行廣度優(yōu)先或深度優(yōu)先的多步游走,獲得包括用于候選的多個結(jié)束節(jié)點的游走拓撲圖,基于廣度優(yōu)先或深度優(yōu)先的圖游走算法、根據(jù)游走路徑中參與的頂點和邊對應(yīng)的索引數(shù)據(jù)計算所述起始節(jié)點到達所述結(jié)束節(jié)點的到達概率;C.對計算出的所述到達概率進行排序。[0021]進一步地,所述步驟B中對到達概率的計算包括兩次取對數(shù)方式的降權(quán)操作。[0022]進一步地,所述到達概率reach_prob的計算公式為:[0023]【權(quán)利要求】1.一種圖計算方法,其特征在于,主要包括以下步驟:A.對圖的原始關(guān)系數(shù)據(jù)進行索引,獲得索引數(shù)據(jù),所述圖的頂點和邊上對應(yīng)所述的索引數(shù)據(jù);B.選擇所述圖的一個或多個頂點為起始節(jié)點,進行廣度優(yōu)先或深度優(yōu)先的多步游走,獲得包括用于候選的多個結(jié)束節(jié)點的游走拓撲圖,基于廣度優(yōu)先或深度優(yōu)先的圖游走算法、根據(jù)游走路徑中參與的頂點和邊對應(yīng)的索引數(shù)據(jù)計算所述起始節(jié)點到達所述結(jié)束節(jié)點的到達概率;C.對計算出的所述到達概率進行排序。2.根據(jù)權(quán)利要求1所述的圖計算方法,其特征在于,所述步驟B中對到達概率的計算包括兩次取對數(shù)方式的降權(quán)操作。3.根據(jù)權(quán)利要求1所述的圖計算方法,其特征在于,所述到達概率reach_prob的計算公式為:其中,eg_popfactor為游走終點圖的配置參數(shù),為浮點值;rev_eg_candidate_node_size為當(dāng)前的候選節(jié)點在終點圖的反向圖中的出邊的個數(shù);candidate_value的計算公式為:I.當(dāng)為兩步游走時,貝1J所述拓撲圖包括起始圖和終點圖,此時candidate_value=II.當(dāng)為三步以上游走時,則所述拓撲圖包括起始圖、中間圖和終點圖,設(shè)有m個中間圖,m為自然數(shù),此時其中,walk_prob為本次拓撲圖游走的配置參數(shù),為浮點值;sg_popfactor為起始圖的配置參數(shù),為浮點值;rgm_popfactor為第m個中間圖的配置參數(shù),為浮點值;route_value的計算公式為:其中X的值如下:其中,sg_rp_weight為起始圖中對應(yīng)的邊的權(quán)重,start_node_size為起始節(jié)點在起始圖中的對應(yīng)的邊的出邊的個數(shù);sg_scalevalue為起始圖的浮點型的配置參數(shù),sg_max_log_value和sg_min_log_value為起始圖的浮點型的配置參數(shù),route_node_size為routenode在起始圖的反向圖中的出邊的個數(shù);end_value的計算公式如下:其中X的值如下:其中,eg_rp_weight為終點圖中對應(yīng)的邊的權(quán)重,eg_scalevalue為終點圖的浮點型的配置參數(shù),eg_max_log_value和eg_min_log_value為終點圖的浮點型的配置參數(shù),eg_route_node_size為routenode在終點圖中對應(yīng)的邊的出邊個數(shù)。4.根據(jù)權(quán)利要求3所述的圖計算方法,其特征在于,所述計算的中間結(jié)果使用原子操作存儲于預(yù)先設(shè)定的一個或多個數(shù)組中,所述數(shù)組的長度為結(jié)束節(jié)點空間中包含的節(jié)點個數(shù)。5.根據(jù)權(quán)利要求1-4任一項所述的圖計算方法,其特征在于,計算所述到達概率時,首先分離路徑無關(guān)和路徑相關(guān)的計算,路徑無關(guān)的計算在計算初始化的時候一次性計算完。6.-種應(yīng)用權(quán)利要求1-5任一項所述的圖計算方法的圖計算引擎,其特征在于,包括建立數(shù)據(jù)索引模塊以及圖計算平臺模塊,所述建立數(shù)據(jù)索引模塊用于對原始關(guān)系數(shù)據(jù)進行索引,獲得索引數(shù)據(jù);所述圖計算平臺模塊包括主體平臺及功能插件,所述功能插件包含執(zhí)行計算所述到達概率的函數(shù),所述主體平臺可通過與所述功能插件的接口協(xié)議調(diào)用所述函數(shù)。7.根據(jù)權(quán)利要求6所述的圖計算引擎,其特征在于,所述功能插件采用可動態(tài)加載的共享庫形式,所述主體平臺支持所述功能插件的熱插拔。8.根據(jù)權(quán)利要求7所述的圖計算引擎,其特征在于,所述主體平臺包括:索引數(shù)據(jù)管理模塊,用于從硬盤載入指定索引數(shù)據(jù)到內(nèi)存、釋放索引數(shù)據(jù)所占內(nèi)存、替換現(xiàn)有的索引數(shù)據(jù);共享庫管理模塊,用于動態(tài)載入共享庫文件,獲取共享庫中回調(diào)函數(shù)的函數(shù)指針,釋放、關(guān)閉或替換共享庫,增加、刪除或修改共享庫之間的依賴關(guān)系;拓撲圖管理模塊,用于增加或刪除游走拓撲圖、修改游走拓撲圖的數(shù)據(jù)、鎖住與解鎖拓撲圖、選擇拓撲圖按照廣度優(yōu)先游走或深度優(yōu)先游走;線程管理模塊,用于創(chuàng)建線程、初始化線程所需數(shù)據(jù)、回調(diào)共享庫中回調(diào)函數(shù);TCP/IP服務(wù)管理模塊,用于并發(fā)接受TCP/IP的請求、返回結(jié)果;以及平臺配置管理模塊,用于解析所述主體平臺各模塊對應(yīng)的配置文件。9.根據(jù)權(quán)利要求8所述的圖計算引擎,其特征在于,所述主體平臺數(shù)據(jù)與拓撲圖均設(shè)置有操作鎖,當(dāng)所述主體平臺數(shù)據(jù)進行修改時,或所述拓撲圖及其相關(guān)數(shù)據(jù)進行刪除/修改時,所述操作鎖執(zhí)行鎖定功能。10.根據(jù)權(quán)利要求6-9任一項所述的圖計算引擎,其特征在于,所述建立數(shù)據(jù)索引模塊采用C++編寫的共享庫,采用hashtable提供查詢服務(wù),采用POSIXsyscall實現(xiàn)與Linux系統(tǒng)的交互?!疚臋n編號】G06F17/30GK104063507SQ201410324671【公開日】2014年9月24日申請日期:2014年7月9日優(yōu)先權(quán)日:2014年7月9日【發(fā)明者】王緒剛,吳桐,宋磊,張銳申請人:時趣互動(北京)科技有限公司