本發(fā)明屬于計(jì)算機(jī)大數(shù)據(jù)處理的圖計(jì)算領(lǐng)域,更具體地,涉及一種基于SCC-DAG的圖計(jì)算迭代處理方法。
背景技術(shù):
“圖”是一種表達(dá)對(duì)真實(shí)世界中對(duì)象與對(duì)象之間的連接關(guān)系的數(shù)據(jù)結(jié)構(gòu),基于圖的結(jié)構(gòu)運(yùn)行圖算法對(duì)圖進(jìn)行分析可得到其中包含的有用信息。譬如,通過(guò)PageRank算法可獲取圖中頂點(diǎn)的重要性;通過(guò)SSSP算法可獲取頂點(diǎn)間的最短路徑;這些算法通過(guò)多輪的迭代最終達(dá)到收斂的狀態(tài);收斂狀態(tài)的數(shù)據(jù)即為算法運(yùn)行的結(jié)果。
迭代方法包括同步迭代和異步迭代;同步迭代方法基于傳統(tǒng)的BSP模型,嚴(yán)格的區(qū)分每一輪迭代的先后順序,下一輪迭代須等待上一輪迭代的完成;每一輪迭代都需要遍歷所有的圖數(shù)據(jù)一遍,當(dāng)多次遍歷圖后,圖達(dá)到收斂狀態(tài)。同步迭代存在以下問(wèn)題:(1)負(fù)載不均衡:由于圖中頂點(diǎn)的邊數(shù)量的差異,帶來(lái)了圖頂點(diǎn)計(jì)算量的差異,每次迭代都需要等待整張圖遍歷完成,使得邊數(shù)量很少的頂點(diǎn)需要等待邊數(shù)量很大的頂點(diǎn)計(jì)算完成;(2)收斂緩慢,圖算法迭代收斂的本質(zhì)是根據(jù)圖中頂點(diǎn)鏈接的結(jié)構(gòu),讓數(shù)據(jù)在頂點(diǎn)間得到充分傳遞;由于每一輪迭代是基于上一輪的迭代數(shù)據(jù),使得每一輪的迭代操作只能夠?qū)?shù)據(jù)傳遞到頂點(diǎn)的鄰居頂點(diǎn),數(shù)據(jù)傳遞效率慢,使得圖收斂緩慢。
異步迭代方法打破了BSP模型的屏障,迭代不再分為每一輪進(jìn)行,迭代的單位也不再是整張圖。當(dāng)某個(gè)頂點(diǎn)達(dá)到計(jì)算條件時(shí),無(wú)需等待其它無(wú)關(guān)頂點(diǎn)的計(jì)算是否完成,即可立即開(kāi)始計(jì)算。因此消除了負(fù)載不均衡的問(wèn)題,也加速了數(shù)據(jù)在頂點(diǎn)間的傳遞。但異步迭代仍然存在以下問(wèn)題:(1)計(jì)算不飽和:由于頂點(diǎn)滿足條件即可進(jìn)行計(jì)算,使得一些頂點(diǎn)在未積累夠足夠的數(shù)據(jù),便開(kāi)始計(jì)算,造成計(jì)算不飽和;(2)不穩(wěn)定:數(shù)據(jù)在頂點(diǎn)間的傳遞不是同時(shí)的,而是各自在頂點(diǎn)間的傳遞,造成數(shù)據(jù)在頂點(diǎn)間來(lái)回震蕩,無(wú)法有效的完成圖的收斂。
在大數(shù)據(jù)環(huán)境下,無(wú)論是同步迭代方法還是異步迭代方法,除了上述問(wèn)題外,還面臨著一個(gè)巨大的問(wèn)題--計(jì)算冗余;計(jì)算冗余體現(xiàn)在迭代收斂中的“木桶效應(yīng)”上。即在迭代時(shí),大部分收斂的頂點(diǎn)會(huì)被少部分未收斂的頂點(diǎn)影響,變得不收斂,進(jìn)而每次迭代都需計(jì)算整張圖的大部分或全部,帶來(lái)大量的計(jì)算冗余,導(dǎo)致大量的CPU資源消耗。并且,在大數(shù)據(jù)環(huán)境下,圖數(shù)據(jù)的規(guī)模達(dá)到上百億甚至上千億條記錄,使得計(jì)算冗余也消耗了大量的IO資源,因?yàn)閮?nèi)存已經(jīng)無(wú)法滿足對(duì)圖數(shù)據(jù)的存儲(chǔ),需要使用外設(shè)資源,繼而在迭代時(shí)存在大量的IO換入換出操作,造成巨大的IO資源消耗。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于SCC-DAG(Strongly Connected Component-Directed Acyclic Graph)的圖計(jì)算迭代處理方法,其目的在于減小大數(shù)據(jù)環(huán)境下圖處理中同步迭代與異步迭代的計(jì)算冗余。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于SCC-DAG的圖計(jì)算迭代處理方法,包括如下步驟:
(1)預(yù)處理:獲取給定的圖中所有的SCC,并對(duì)SCC進(jìn)行拓?fù)渑判?,根?jù)SCC的拓?fù)漤樞驑?gòu)建SCC-DAG;
(2)計(jì)算:按照SCC的拓?fù)漤樞蛞来卧赟CC-DAG的各SCC內(nèi)進(jìn)行迭代,直至所有SCC收斂。
本發(fā)明中,SCC(Strongly Connected Component)是指圖的強(qiáng)連通分量,是給定圖中的極大強(qiáng)連通子圖;給定的圖包括多個(gè)SCC;一個(gè)SCC也可以是一個(gè)頂點(diǎn);
DAG(Directed Acyclic Graph)是指有向無(wú)環(huán)圖,是不存在環(huán)路的圖結(jié)構(gòu);將DAG中的邊作為數(shù)據(jù)的流向,則DAG中的數(shù)據(jù)只會(huì)從“上游”流向“下游”;
在本發(fā)明中,對(duì)于給定的圖,首先把圖中所有的SCC找出來(lái),然后將SCC抽象成點(diǎn),由SCC之間的連接構(gòu)成DAG,將這種由強(qiáng)連通分量構(gòu)成的有向無(wú)環(huán)圖定義為SCC-DAG。
優(yōu)選地,上述基于SCC-DAG的圖計(jì)算迭代處理方法,其步驟(2)包括如下子步驟:
(2.1)根據(jù)SCC-DAG中SCC的拓?fù)漤樞驈乃鯯CC-DAG中選定一個(gè)SCC;
(2.2)在選定的SCC中執(zhí)行實(shí)際需求實(shí)現(xiàn)所對(duì)應(yīng)的算法,并采用同步迭代或異步迭代對(duì)每個(gè)頂點(diǎn)進(jìn)行計(jì)算;
步驟(2.1)中選定的SCC就是本步驟的迭代計(jì)算的對(duì)象;本步驟中執(zhí)行何種算法是由實(shí)際需求所決定的,與實(shí)際需求相應(yīng);
譬如:若需要計(jì)算網(wǎng)頁(yè)排名,則實(shí)現(xiàn)pagerank算法;若需要計(jì)算最短路徑,則實(shí)現(xiàn)SSSP算法;
(2.3)判斷經(jīng)過(guò)步驟(2.2)處理后的SCC內(nèi)部所有頂點(diǎn)是否達(dá)到收斂;若是,則進(jìn)入步驟(2.4);若否,則進(jìn)入步驟(2.2);
(2.4)判斷是否所有的SCC都達(dá)到收斂;若是,則輸出收斂狀態(tài)的數(shù)據(jù)作為算法的運(yùn)行結(jié)果;若否,則返回步驟(2.1)。
優(yōu)選地,上述基于SCC-DAG的圖計(jì)算迭代處理方法,選定的SCC應(yīng)滿足:其所有的雙親SCC都達(dá)到收斂狀態(tài)、且其自身未達(dá)到收斂狀態(tài);
對(duì)雙親SCC解釋如下:當(dāng)某SCC中有邊指向另一個(gè)SCC,則該某SCC即為被指向的SCC的雙親SCC;譬如:SCC1和SCC2中有邊指向SCC3,則SCC1和SCC2均為SCC3的雙親SCC;
收斂狀態(tài)是指隨著迭代次數(shù)的增加而SCC內(nèi)部所有的頂點(diǎn)的值在迭代中都不再改變的狀態(tài)。
本發(fā)明中,通過(guò)SCC-DAG表達(dá)迭代中的數(shù)據(jù)依賴關(guān)系;對(duì)于一個(gè)頂點(diǎn),其數(shù)據(jù)僅僅依賴于其所有入邊對(duì)應(yīng)的頂點(diǎn);當(dāng)這些依賴的頂點(diǎn)達(dá)到收斂狀態(tài),并在之后的迭代中不再改變,則該頂點(diǎn)僅需一次計(jì)算即可達(dá)到收斂狀態(tài),并在之后的迭代中不再改變;將該思想類比于SCC-DAG中,當(dāng)一個(gè)SCC在DAG中所依賴的所有SCC都達(dá)到收斂狀態(tài)、并在之后的迭代中不再改變時(shí),該SCC也僅需在SCC內(nèi)部進(jìn)行一次迭代操作即可達(dá)到收斂狀態(tài),并在之后的迭代中不再改變,無(wú)需再對(duì)其進(jìn)行重復(fù)計(jì)算,因此減少了計(jì)算冗余。
總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
(1)減少計(jì)算冗余:由于本發(fā)明所提供的迭代處理方法將迭代操作限制在SCC內(nèi)部,在某SCC內(nèi)部進(jìn)行迭代時(shí),當(dāng)前頂點(diǎn)值的更新不會(huì)影響其余SCC中的頂點(diǎn),進(jìn)而其余的SCC無(wú)需更新,起到減少計(jì)算冗余的作用;
(2)降低IO資源開(kāi)銷:由于本發(fā)明所提供的迭代處理方法將迭代操作限制在SCC內(nèi)部,在對(duì)一個(gè)SCC進(jìn)行迭代操作時(shí),無(wú)需將其余的SCC中的頂點(diǎn)調(diào)入內(nèi)存,因此起到降低IO資源開(kāi)銷的作用;
(3)預(yù)處理開(kāi)銷?。翰襟E(1)的預(yù)處理階段是構(gòu)建SCC-DAG的過(guò)程,可采用時(shí)間復(fù)雜度為線性的算法構(gòu)建SCC-DAG,復(fù)雜度遠(yuǎn)小于計(jì)算階段的復(fù)雜度,帶來(lái)的開(kāi)銷很?。豢刹捎脮r(shí)間復(fù)雜度為線性的串行算法,也可采用復(fù)雜度更低的并行算法;從給定圖中找出SCC的算法和對(duì)SCC進(jìn)行拓?fù)渑判驑?gòu)建DAG的復(fù)雜度都為線性復(fù)雜度,即O(V+E),與進(jìn)行一次圖的遍歷的復(fù)雜度相同,遠(yuǎn)小于對(duì)圖進(jìn)行迭代至收斂的復(fù)雜度;相比較而言,本發(fā)明所提供的這種迭代方法首先進(jìn)行預(yù)處理,用很小的預(yù)處理開(kāi)銷換取巨大的計(jì)算冗余量的減少與巨大的IO資源開(kāi)銷的降低。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的基于SCC-DAG的圖計(jì)算迭代處理方法的流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
本發(fā)明提供的基于SCC-DAG的圖計(jì)算迭代處理方法,其主要思想為,將迭代操作限定在SCC內(nèi)部,每個(gè)SCC內(nèi)部獨(dú)立進(jìn)行迭代操作;當(dāng)所有的SCC都收斂時(shí),整張圖達(dá)到收斂狀態(tài);該圖計(jì)算迭代處理方法用很小的預(yù)處理開(kāi)銷換取圖收斂速度的提高,減少了計(jì)算冗余,降低了IO資源開(kāi)銷。
實(shí)施例所提供的基于SCC-DAG的圖計(jì)算迭代處理方法,其流程如圖1所示,包括預(yù)處理階段、計(jì)算階段和輸出階段;具體如下:
(1)預(yù)處理階段,構(gòu)建SCC-DAG;包括如下子步驟:
(1.1)找出給定的圖中所有的強(qiáng)連通分量SCC;
(1.2)對(duì)上述SCC進(jìn)行拓?fù)渑判虻玫絊CC-DAG;
可以采用各種拓?fù)渑判蛩惴▽?duì)SCC-DAG中的SCC進(jìn)行拓?fù)渑判?,只要達(dá)到生成DAG的目的即可;
(2)計(jì)算階段:根據(jù)SCC-DAG中SCC的拓?fù)漤樞蛞来卧诟鱏CC內(nèi)進(jìn)行迭代至所有SCC收斂;包括如下子步驟:
(2.1)根據(jù)SCC-DAG中SCC的拓?fù)漤樞驈腟CC-DAG中選定一個(gè)SCC;所述選定的SCC應(yīng)滿足:其所有的雙親SCC都達(dá)到收斂狀態(tài)、且其自身未達(dá)到收斂狀態(tài);
其中,達(dá)到收斂狀態(tài)是指隨著迭代次數(shù)的增加,所有的頂點(diǎn)的值不再變化;判斷是否所有頂點(diǎn)的值都不再變化的方法有很多種,本發(fā)明不限定判斷收斂的方法;
(2.2)在選定的SCC中執(zhí)行實(shí)際需求所對(duì)應(yīng)的算法(譬如:PageRank算法,SSSP算法),并采用同步迭代或異步迭代對(duì)每個(gè)頂點(diǎn)進(jìn)行計(jì)算;
(2.3)判斷經(jīng)過(guò)步驟(2.2)處理后的SCC內(nèi)部所有頂點(diǎn)是否達(dá)到收斂;若是,則進(jìn)入步驟(2.4);若否,則進(jìn)入步驟(2.2);
(2.4)判斷是否所有的SCC都達(dá)到收斂;若是,則輸出收斂狀態(tài)的數(shù)據(jù)作為算法的運(yùn)行結(jié)果;若否,則返回步驟(2.1)。
(3)輸出階段:所有的SCC都達(dá)到收斂,即整張圖達(dá)到收斂狀態(tài),輸出結(jié)果。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。