graphchi 由卡內基梅隆大學的aapo kyrola 博士生開發,是graphlab專案的乙個分支。該框架能夠在單機上完成大資料的圖計算。graphchi 借鑑 graphlab 和 pregel 兩個專案,採用基於以頂點為中心的計算模型。graphchi 的核心是名為parallel sliding windows (並行式滑動視窗,簡稱psw)的模型,能夠非同步處理儲存在硬碟上的可變圖資料。
psw模型演算法分為三個階段:從硬碟載入資料、更新頂點和邊、將更新寫入到磁碟。作者對在介紹psw時,以邊權重可變的圖作為示例,給定有向圖g=(v, e)
載入資料階段:頂點集v被分為p個不相交的子集 interval(i)。每個子集 intervals(i) 關聯乙個儲存邊資訊的分割槽 shard,邊的目標節點屬於且僅屬於子集 intervals(i),儲存順序按照源節點排序。shard 的大小以一次能夠完全載入記憶體為最佳,可以通過設定 interval 個數進行調整。
graphchi 每次取乙個節點子集 interval(i) ,根據子集中的點資訊構造子圖進行計算。例如,假設總共有p個分割槽,對於第p個節點子集,首先將分割槽 shard(p) 載入記憶體,該分割槽包含了關聯 interval(p) 中節點的入邊,然後在其他 p-1 個分割槽中讀入關聯 interval(p) 中節點的出邊(注意,由於在 shard(i) 中儲存的邊按源節點排序,所以在每個分割槽 interval(i) 中與節點關聯的出邊都是連續儲存的)。進行第p次操作後,更新的邊/節點資訊會在第p+1次操作時使用。直觀上看,psw演算法執行完p個節點子集,就像在每個shard上進行滑動視窗操作。
並行更新節點:第p次操作所需的子圖資料載入後,psw對每個節點並行地執行使用者定義的更新函式。此時,相鄰節點進行更新操作時,可能會造成衝突。作者採用如下機制避免衝突的發生:如果一條邊的兩個端點在同乙個子集中,則該端點將被標記。被標記的頂點將順序執行更新操作,未被標記的頂點能夠並行執行更新操作。順序更新時,前一次更新的結果會作為下一次更新的輸入。
將更新寫入磁碟:psw每次更新是對記憶體中的資料項效能更新,在對乙個節點子集完成更新後,psw將修改的塊檔案寫入磁碟。
下圖顯示了graphchi的執行流程
作者對上述模型進行修改使得psw支援在圖中增加/刪除邊的操作。
作者將每個分割槽shard分解為p個邏輯部分,part(j)包含以interval(j)中的頂點為源的邊。作者增加了乙個edge-buffer(p,j)結果關聯 part(j) 和 shard(p)。當乙個邊被加入到圖中,它首先加入到相應的edge-buff中。對於buff的管理包括寫磁碟,切片等。
為了保證一致性,對於會影響當前interval的節點增刪操作將在執行結束時更新。
Week5 D 滑動視窗滑動視窗
week5 d 滑動視窗滑動視窗 zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position ...
week5 D 滑動視窗滑動視窗
zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position minimum value max...
滑動視窗演算法 演算法 滑動視窗 二
演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...