本說明書實施例屬于圖計算,尤其涉及一種圖計算方法和裝置。
背景技術(shù):
1、在一些圖系統(tǒng)中,通常會以時間段作為劃分依據(jù),將一段時間內(nèi)產(chǎn)生的圖數(shù)據(jù)保存為一個子圖,以降低系統(tǒng)的內(nèi)存消耗和數(shù)據(jù)冗余程度。其中,每個子圖通常稱為一個圖數(shù)據(jù)分片。
2、在實際應(yīng)用中,由于由若干個圖數(shù)據(jù)分片組成的圖數(shù)據(jù),通常非常龐大并且數(shù)據(jù)內(nèi)容不斷的變化;因此,當(dāng)針對圖數(shù)據(jù)的圖分析計算,涉及到多個圖數(shù)據(jù)分片時,通常需要將該多個圖數(shù)據(jù)分片的圖結(jié)構(gòu)重新進行合并,然后在合并之后的圖數(shù)據(jù)的基礎(chǔ)之上繼續(xù)完成后續(xù)的圖計算。
3、然而,對多個圖數(shù)據(jù)分片進行合并的操作,通常會為系統(tǒng)帶來非常大的額外開銷。
技術(shù)實現(xiàn)思路
1、本說明書中提出一種圖計算方法,應(yīng)用于執(zhí)行圖計算的計算系統(tǒng),所述方法包括:
2、基于預(yù)設(shè)的圖算法對數(shù)據(jù)庫中存儲的各個圖數(shù)據(jù)分片分別進行離線的圖計算,并保存針對所述圖數(shù)據(jù)分片進行圖計算得到的圖計算結(jié)果;其中,所述圖算法為輸出的圖計算結(jié)果具有單調(diào)性的圖算法;
3、響應(yīng)于對數(shù)據(jù)庫中存儲的在預(yù)設(shè)的時間窗口內(nèi)產(chǎn)生的多個圖數(shù)據(jù)分片進行全局的圖計算的計算請求,獲取針對所述多個圖數(shù)據(jù)分片分別進行離線的圖計算得到的多個圖計算結(jié)果;
4、基于所述多個圖計算結(jié)果計算針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的中間計算結(jié)果,并在所述中間計算結(jié)果的基礎(chǔ)上,基于所述預(yù)設(shè)的圖算法繼續(xù)針對所述多個圖數(shù)據(jù)分片進行在線的圖計算,以得到針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的最終計算結(jié)果。
5、可選的,所述圖數(shù)據(jù)分片為在預(yù)設(shè)的單位時長周期內(nèi)產(chǎn)生的圖數(shù)據(jù)。
6、可選的,所述數(shù)據(jù)庫中存儲的圖數(shù)據(jù)分片,按照所述單位時長周期,周期性的導(dǎo)入所述數(shù)據(jù)庫進行存儲。
7、可選的,基于預(yù)設(shè)的圖算法對數(shù)據(jù)庫中存儲的圖數(shù)據(jù)分片進行離線的圖計算,包括:
8、響應(yīng)于所述數(shù)據(jù)庫中導(dǎo)入了圖數(shù)據(jù)分片,基于預(yù)設(shè)的圖算法對導(dǎo)入的所述圖數(shù)據(jù)分片進行離線的圖計算。
9、可選的,所述中間計算結(jié)果為所述多個圖計算結(jié)果中,與針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的最終計算結(jié)果的誤差最小的圖計算結(jié)果。
10、可選的,所述數(shù)據(jù)庫中存儲的各個圖數(shù)據(jù)分片包含的至少部分頂點為相同的頂點;所述圖算法包括迭代圖算法;其中,所述迭代圖算法包括通過遍歷所述圖數(shù)據(jù)中包含的具有鄰居關(guān)系的頂點進行迭代式的圖計算的圖算法。
11、可選的,所述多個圖數(shù)據(jù)分片在所述數(shù)據(jù)庫中離散存儲;所述計算系統(tǒng)維護了與在所述數(shù)據(jù)庫中離散存儲的所述多個圖數(shù)據(jù)分片對應(yīng)的全局圖結(jié)構(gòu);其中,所述全局圖結(jié)構(gòu)用于描述所述多個圖數(shù)據(jù)分片中包含的具有鄰居關(guān)系的頂點在所述多個圖數(shù)據(jù)分片中的全局的鄰居關(guān)系;所述全局的鄰居關(guān)系包括所述頂點與該頂點在所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片中的所有的鄰居頂點之間的鄰居關(guān)系;
12、在所述中間計算結(jié)果的基礎(chǔ)上,基于所述預(yù)設(shè)的圖算法繼續(xù)針對所述多個圖數(shù)據(jù)分片進行在線的圖計算,包括:
13、在所述中間計算結(jié)果的基礎(chǔ)上,基于所述預(yù)設(shè)的圖算法在所述全局圖結(jié)構(gòu)中遍歷所述多個數(shù)據(jù)圖分片中包含的具有鄰居關(guān)系的頂點,在所述各個圖數(shù)據(jù)分片中的鄰居頂點所有的鄰居頂點,以繼續(xù)針對所述多個圖數(shù)據(jù)分片包含的頂點進行在線的圖計算。
14、可選的,所述全局圖結(jié)構(gòu)為基于所述各個圖數(shù)據(jù)分片中包含的頂點,和該頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點之間的鄰居關(guān)系構(gòu)建的全局的圖結(jié)構(gòu);
15、基于所述預(yù)設(shè)的圖算法在所述中間計算結(jié)果的基礎(chǔ)上,繼續(xù)針對所述多個圖數(shù)據(jù)分片進行在線的圖計算之前,還包括:
16、獲取所述各個圖數(shù)據(jù)分片中包含的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點;
17、基于獲取到的所述各個圖數(shù)據(jù)分片中包含的頂點和所述所有的鄰居頂點之間的鄰居關(guān)系,構(gòu)建所述全局圖結(jié)構(gòu)。
18、可選的,所述全局圖結(jié)構(gòu)采用鄰接表的結(jié)構(gòu);其中,所述鄰接表中維護了所述多個圖數(shù)據(jù)分片中包含的具有鄰居關(guān)系的頂點的頂點標(biāo)識,以及與所述頂點標(biāo)識對應(yīng)的鏈表;其中,所述鏈表包含指向與所述頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點的指針;
19、在所述全局圖結(jié)構(gòu)中遍歷所述多個數(shù)據(jù)圖分片中包含的具有鄰居關(guān)系的頂點,在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點,包括:
20、遍歷所述鄰接表中維護的所述頂點標(biāo)識,并基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,進一步訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點。
21、可選的,所述鏈表包含指向與所述頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的首個鄰居頂點的指針,以及與所述頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的其它鄰居頂點相對于所述首個鄰居頂點的指針偏移;
22、基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,進一步訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點,包括:
23、基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的首個鄰居頂點,以及基于所述鏈表中包含的指針偏移,訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的其它鄰居頂點。
24、可選的,基于預(yù)設(shè)的圖算法對數(shù)據(jù)庫中存儲的任一目標(biāo)圖數(shù)據(jù)分片進行圖計算,包括:
25、在從所述目標(biāo)圖數(shù)據(jù)分片包含的頂點中指定的需要參與迭代的初始的激活頂點集合的基礎(chǔ)上,迭代執(zhí)行預(yù)設(shè)的計算過程,直到無法確定出需要繼續(xù)參與下一輪迭代的激活頂點或者所述迭代的計算滿足預(yù)設(shè)的算法收斂條件;
26、其中,所述預(yù)設(shè)的計算過程包括:
27、基于所述預(yù)設(shè)的圖算法針對所述初始的激活頂點集合中的激活頂點進行圖計算,得到所述激活頂點集合中的激活頂點的圖計算結(jié)果;
28、在所述目標(biāo)圖數(shù)據(jù)分片中遍歷所述激活頂點集合中的激活頂點的鄰居頂點,基于所述激活頂點集合中的激活頂點的圖計算結(jié)果,確定遍歷到的所述激活頂點的鄰居頂點,是否滿足與所述圖算法對應(yīng)的激活條件;
29、將滿足所述激活條件的鄰居頂點確定為新的激活節(jié)點,并基于確定出的新的激活頂點進一步創(chuàng)建需要繼續(xù)參與下一輪的迭代的激活頂點集合。
30、可選的,所述多個圖計算結(jié)果包括針對所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點進行離線的圖計算得到的,該頂點分別在所述各個圖數(shù)據(jù)分片中的圖計算結(jié)果;
31、基于所述多個圖計算結(jié)果計算針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的中間計算結(jié)果,包括:
32、基于所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點,分別在所述各個圖數(shù)據(jù)分片中的圖計算結(jié)果,計算針對所述頂點進行全局的圖計算的中間計算結(jié)果。
33、可選的,在所述中間計算結(jié)果的基礎(chǔ)上,基于所述預(yù)設(shè)的圖算法在所述全局圖結(jié)構(gòu)中遍歷所述多個數(shù)據(jù)圖分片中包含的具有鄰居關(guān)系的頂點,在所述各個圖數(shù)據(jù)分片中的鄰居頂點所有的鄰居頂點,以繼續(xù)針對所述多個圖數(shù)據(jù)分片包含的頂點進行在線的圖計算,包括:
34、基于所述中間計算結(jié)果,從所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點中,為所述各個圖數(shù)據(jù)分片分別確定出初始的激活頂點集合;
35、在所述初始的激活頂點集合的基礎(chǔ)上,針對所述各個圖數(shù)據(jù)分片,分別迭代執(zhí)行預(yù)設(shè)的計算過程,直到無法確定出需要繼續(xù)參與下一輪迭代的激活頂點或者所述迭代的計算滿足預(yù)設(shè)的算法收斂條件;
36、其中,所述預(yù)設(shè)的計算過程包括:
37、基于所述預(yù)設(shè)的圖算法針對所述初始的激活頂點集合中的激活頂點進行圖計算,得到所述激活頂點集合中的激活頂點的圖計算結(jié)果;
38、在所述全局圖結(jié)構(gòu)中遍歷所述激活頂點集合中的激活頂點的鄰居頂點,基于所述激活頂點集合中的激活頂點的圖計算結(jié)果,確定遍歷到所述激活頂點的鄰居頂點,是否滿足與所述圖算法對應(yīng)的激活條件;
39、將滿足所述激活條件的鄰居頂點確定為新的激活節(jié)點,并基于確定出的新的激活頂點進一步創(chuàng)建需要繼續(xù)參與下一輪迭代的激活頂點集合。
40、可選的,在所述初始的激活頂點集合的基礎(chǔ)上,針對所述各個圖數(shù)據(jù)分片,分別迭代執(zhí)行預(yù)設(shè)的計算過程,直到無法確定出需要繼續(xù)參與下一輪迭代的激活頂點或者所述迭代的計算滿足預(yù)設(shè)的算法收斂條件,包括:
41、在所述初始的激活頂點集合的基礎(chǔ)上,通過在所述各個圖數(shù)據(jù)分片中遍歷該激活頂點集合中的激活頂點的鄰居頂點,分別執(zhí)行一輪所述預(yù)設(shè)的計算過程,得到與所述各個圖數(shù)據(jù)分片對應(yīng)的需要繼續(xù)參與下一輪迭代的激活頂點集合;
42、針對與所述各個圖數(shù)據(jù)分片對應(yīng)的激活頂點集合進行合并,得到與所述多個圖數(shù)據(jù)分片對應(yīng)的目標(biāo)激活頂點集合,并在所述目標(biāo)激活頂點集合的基礎(chǔ)上,通過在所述全局圖結(jié)構(gòu)中遍歷該激活頂點集合中的激活頂點的鄰居頂點,繼續(xù)迭代執(zhí)行所述預(yù)設(shè)的計算過程,直到無法確定出需要繼續(xù)參與下一輪迭代的激活頂點或者所述迭代的計算滿足預(yù)設(shè)的算法收斂條件。
43、可選的,基于所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點,分別在所述各個圖數(shù)據(jù)分片中的圖計算結(jié)果,計算針對所述頂點進行全局的圖計算的中間計算結(jié)果,包括:
44、針對所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的任一頂點,從該頂點分別在所述各個圖數(shù)據(jù)分片中的圖計算結(jié)果中,確定出與針對所述頂點進行全局的圖計算的最終計算結(jié)果的誤差最小的目標(biāo)圖計算結(jié)果;
45、將所述目標(biāo)圖計算結(jié)果確定為針對所述頂點進行全局的圖計算的中間計算結(jié)果。
46、可選的,基于所述中間計算結(jié)果,從所述多個圖數(shù)據(jù)分片中的各個圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點中,為所述各個圖數(shù)據(jù)分片分別確定出需要參與所述全局的圖計算的迭代的初始的激活頂點集合,包括:
47、針對所述多個圖數(shù)據(jù)分片中的任一圖數(shù)據(jù)分片,確定該圖數(shù)據(jù)分片包含的具有鄰居關(guān)系的頂點,在該圖數(shù)據(jù)分片中的圖計算結(jié)果,與為該頂點確定出的所述目標(biāo)圖計算結(jié)果是否相同;
48、如果不相同,將該頂點作為需要參與所述全局的圖計算的迭代的激活頂點,添加至為該圖數(shù)據(jù)分片創(chuàng)建的初始的激活頂點集合中。
49、可選的,所述計算系統(tǒng)還維護了所述多個圖數(shù)據(jù)分片中包含的具有鄰居關(guān)系的頂點在所述各個圖數(shù)據(jù)分片中的鄰居頂點的總數(shù)量;
50、遍歷所述鄰接表中維護的所述頂點標(biāo)識,并基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,進一步訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點,包括:
51、針對在所述鄰接表中遍歷到的任一頂點標(biāo)識,獲取維護的與該頂點標(biāo)識的對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的鄰居頂點的總數(shù)量,并確定獲取到的所述總數(shù)量是否大于閾值;
52、如果獲取到的所述總數(shù)量大于閾值,則為與該頂點標(biāo)識對應(yīng)的頂點分配一個獨立的線程,并運行該線程,按照與所述頂點標(biāo)識對應(yīng)的鄰接表中維護的所述鏈表中包含的指針的順序,依次訪問該頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點;如果獲取到的所述總數(shù)量大于所述閾值,則為該頂點分配多個獨立的線程,并運行該多個獨立的線程,分別基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,并行的訪問在與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點。
53、可選的,如果獲取到的所述總數(shù)量大于所述閾值,則為該頂點分配多個獨立的線程,包括:
54、如果獲取到的所述總數(shù)量大于所述閾值,進一步計算與所述頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的鄰居頂點的數(shù)量的差值,并確定所述差值是否低于閾值;
55、如果是,為與該頂點標(biāo)識對應(yīng)的頂點分配與所述多個圖數(shù)據(jù)分片一一對應(yīng)的多個獨立的線程;其中,所述多個獨立的線程中的各個線程,分別用于訪問該頂點在與該線程對應(yīng)的圖數(shù)據(jù)分片中的所有的鄰居頂點;
56、如果否,為與該頂點標(biāo)識對應(yīng)的頂點分配能夠處理的鄰居頂點的數(shù)量相同的多個獨立的線程;其中,所述多個獨立的線程中的各個線程,分別用于訪問從該頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點中分配給該線程的鄰居頂點;分配給所述各個線程的鄰居頂點的數(shù)量相同。可選的,遍歷所述鄰接表中維護的所述頂點標(biāo)識,并基于與所述頂點標(biāo)識對應(yīng)的鏈表中包含的指針,進一步訪問與該頂點標(biāo)識對應(yīng)的頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點之前,還包括:
57、從所述鄰接表中維護的各個頂點標(biāo)識中,確定出目標(biāo)頂點標(biāo)識;其中,所述目標(biāo)頂點標(biāo)識為在所述各個圖數(shù)據(jù)分片中的鄰居頂點的數(shù)量不大于閾值的目標(biāo)頂點對應(yīng)的頂點標(biāo)識;
58、從所述數(shù)據(jù)庫中讀取與所述目標(biāo)頂點標(biāo)識對應(yīng)的目標(biāo)頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點,并將讀取到的所述鄰居頂點進一步存儲到在內(nèi)存中預(yù)先分配的連續(xù)的內(nèi)存空間中進行存儲,并將與所述目標(biāo)頂點標(biāo)識對應(yīng)的鄰接表中維護的所述鏈表中包含的指針,進一步替換為與所述連續(xù)的內(nèi)存空間對應(yīng)的指針,以在遍歷到該目標(biāo)頂點時,分配給該目標(biāo)頂點的線程基于所述鏈表中包含的所述指針,從所述連續(xù)的內(nèi)存空間中訪問該目標(biāo)頂點在所述各個圖數(shù)據(jù)分片中的所有的鄰居頂點。
59、可選的,所述計算請求為針對在預(yù)設(shè)的時間窗口內(nèi)產(chǎn)生的多個圖數(shù)據(jù)分片的圖查詢操作所觸發(fā)的計算請求;所述方法還包括:
60、響應(yīng)于針對所述多個圖數(shù)據(jù)分片進行全局的圖計算得到的最終計算結(jié)果,基于所述最終計算結(jié)果生成滿足與所述圖查詢操作相關(guān)的查詢條件的查詢結(jié)果;
61、向所述圖查詢操作的發(fā)起方輸出所述查詢結(jié)果。
62、可選的,所述多個圖數(shù)據(jù)分片以csr格式在所述數(shù)據(jù)庫中離散存儲。
63、可選的,所述圖數(shù)據(jù)分片中包含的頂點表示用戶;所述圖數(shù)據(jù)分片中包含的連接頂點之間的邊表示用戶之間產(chǎn)生的交易。
64、可選的,所述數(shù)據(jù)庫包括數(shù)據(jù)倉庫。
65、本說明書還提出一種圖計算裝置,應(yīng)用于執(zhí)行圖計算的計算系統(tǒng),所述裝置包括:
66、第一計算模塊,基于預(yù)設(shè)的圖算法對數(shù)據(jù)庫中存儲的各個圖數(shù)據(jù)分片分別進行離線的圖計算,并保存針對所述圖數(shù)據(jù)分片進行圖計算得到的圖計算結(jié)果;其中,所述圖算法為輸出的圖計算結(jié)果具有單調(diào)性的圖算法;
67、獲取模塊,響應(yīng)于對數(shù)據(jù)庫中存儲的在預(yù)設(shè)的時間窗口內(nèi)產(chǎn)生的多個圖數(shù)據(jù)分片進行全局的圖計算的計算請求,獲取針對所述多個圖數(shù)據(jù)分片分別進行離線的圖計算得到的多個圖計算結(jié)果;
68、第二計算模塊,基于所述多個圖計算結(jié)果計算針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的中間計算結(jié)果,并在所述中間計算結(jié)果的基礎(chǔ)上,基于所述預(yù)設(shè)的圖算法繼續(xù)針對所述多個圖數(shù)據(jù)分片進行在線的圖計算,以得到針對所述多個圖數(shù)據(jù)分片進行全局的圖計算的最終計算結(jié)果。
69、上述實施例中,一方面,由于在針對該多個圖數(shù)據(jù)分片在線的進行全局的圖計算的過程中,可以復(fù)用對該多個圖數(shù)據(jù)分片進行離線計算的圖計算結(jié)果,從而可以在在線計算的階段,避免對該多個圖數(shù)據(jù)分片重復(fù)的進行圖計算,從而可以減少對系統(tǒng)中的在線計算資源的占用,降低計算的開銷,提升系統(tǒng)對該多個圖數(shù)據(jù)分片在線的進行全局的圖計算的計算性能;
70、另一方面,由于在針對該多個圖數(shù)據(jù)分片在線的進行全局的圖計算的過程中,在基于對該多個圖數(shù)據(jù)分片進行離線計算的圖計算結(jié)果,計算出的針對該多個圖數(shù)據(jù)分片進行全局的圖計算的中間計算結(jié)果的基礎(chǔ)上,就可以繼續(xù)完成針對該多個圖數(shù)據(jù)分片的在線的圖計算,使得系統(tǒng)在針對該多個圖數(shù)據(jù)分片在線的進行全局的圖計算時,可以避免對該多個圖數(shù)據(jù)分片的圖結(jié)構(gòu)進行合并,從而可以顯著的降低系統(tǒng)的開銷,進一步提升對該多個圖數(shù)據(jù)分片在線的進行全局的圖計算的計算性能。