本發(fā)明涉及子圖枚舉問題與并行計(jì)算技術(shù)領(lǐng)域,尤其涉及基于pregel編程框架的分布式子圖枚舉方法。
背景技術(shù):
子圖枚舉問題是計(jì)算機(jī)圖數(shù)據(jù)結(jié)構(gòu)上的一類基本問題。子圖枚舉為以子圖為處理單元的圖分析算法提供了分析基礎(chǔ),在生物信息學(xué)、社交網(wǎng)絡(luò)分析以及描述社會(huì)網(wǎng)絡(luò)演變等諸多領(lǐng)域都有著廣泛的應(yīng)用。子圖枚舉問題在計(jì)算機(jī)領(lǐng)域是一個(gè)困難的問題,計(jì)算的復(fù)雜度非常高。一方面,前人從單機(jī)時(shí)代已經(jīng)對(duì)這個(gè)問題進(jìn)行了大量的研究,單機(jī)子圖枚舉算法大部分是基于深度優(yōu)先搜索的方法來實(shí)現(xiàn)。但是由于子圖枚舉問題的復(fù)雜度過高,單機(jī)的方法經(jīng)常使用剪枝以及索引等方法來降低計(jì)算的復(fù)雜度。但是,這些方法并沒有從根本上解決子圖枚舉算法復(fù)雜度過高的問題。另一方面,通用集群蓬勃發(fā)展。它們有著搭建成本低,易于使用和維護(hù)等優(yōu)點(diǎn),并且隨著以apachespark為代表的數(shù)據(jù)并行計(jì)算框架和以hdfs為代表的分布式存儲(chǔ)系統(tǒng)的發(fā)展,通用集群具有了更加良好的容錯(cuò)性,計(jì)算和存儲(chǔ)能力也可以方便地水平擴(kuò)展。因此,基于各種分布式計(jì)算框架的分布式子圖枚舉計(jì)算方法應(yīng)運(yùn)而生。這些方法利用集群這種分布式的計(jì)算平臺(tái)來解決大規(guī)模的子圖枚舉問題。
分布式子圖枚舉問題,前人已經(jīng)做了非常多的研究。隨著大數(shù)據(jù)基本技術(shù)的不斷發(fā)展,基于不同的大數(shù)據(jù)引擎的分布式子圖枚舉算法應(yīng)運(yùn)而生。在以mapreduce為編程框架的hadoop大數(shù)據(jù)計(jì)算平臺(tái)上,前人提出了twintwigjoin方法來解決分布式的子圖枚舉計(jì)算問題。在以pregel為編程框架的giraph大數(shù)據(jù)計(jì)算平臺(tái)上,前人提出了psgl方法來解決分布式的子圖枚舉。目前性能最好的算法是基于hadoop平臺(tái)的seed算法,但是該方法需要大量的預(yù)處理計(jì)算來生成索引,對(duì)于數(shù)據(jù)更新頻繁的互聯(lián)網(wǎng)應(yīng)用來說,并不便于使用。
目前公認(rèn)的無須索引的、性能最好的分布式子圖枚舉方法是twintwigjoin。這個(gè)方法將查詢圖分解成一棵左深二叉查詢樹。根據(jù)這棵查詢樹依次從樹的底層往上逐漸生成部分匹配結(jié)果,直到處理到這棵查詢樹的根節(jié)點(diǎn),即得到了所有的匹配結(jié)果。該方法存在以下幾個(gè)問題:一是中間產(chǎn)生的部分匹配結(jié)果過大,這些結(jié)果都需要通過網(wǎng)絡(luò)發(fā)送到其他機(jī)器上,這樣會(huì)導(dǎo)致大量的網(wǎng)絡(luò)通信開銷;二是迭代的次數(shù)過多,將查詢圖轉(zhuǎn)成左深二叉樹,將導(dǎo)致查詢樹的高度過高,中間結(jié)果傳輸次數(shù)過多,造成嚴(yán)重的性能問題。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)上述現(xiàn)有技術(shù)存在的問題和不足,本發(fā)明的目的是提供一種在分布式的環(huán)境下不需要使用索引的子圖枚舉方法,解決了現(xiàn)有方法網(wǎng)絡(luò)傳輸量過高,網(wǎng)絡(luò)傳輸次數(shù)過多,需要預(yù)處理以及性能較低的問題。
技術(shù)方案:為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用的技術(shù)方案為一種子圖枚舉的分布式并行方法,包括以下步驟:
(1)由用戶輸入兩個(gè)輸入數(shù)據(jù):查詢圖和數(shù)據(jù)圖;
(2)根據(jù)輸入的查詢圖確定查詢圖上的每個(gè)頂點(diǎn)的權(quán)重;
(3)根據(jù)查詢圖和每個(gè)頂點(diǎn)的權(quán)重信息,生成一棵查詢樹;
(4)先將數(shù)據(jù)圖以鄰接表的格式存儲(chǔ)到分布式數(shù)據(jù)庫中,然后以查詢樹中高度為2的頂點(diǎn)作為初始查詢點(diǎn);
(5)在第一輪迭代開始之前,將數(shù)據(jù)圖中的每個(gè)頂點(diǎn)設(shè)為活躍狀態(tài);
(6)對(duì)于數(shù)據(jù)圖的各個(gè)活躍頂點(diǎn),按照如下的計(jì)算方法,計(jì)算部分匹配結(jié)果:根據(jù)該活躍頂點(diǎn)接收到的鄰居頂點(diǎn)發(fā)送過來的部分匹配結(jié)果,生成該活躍頂點(diǎn)本輪迭代的部分匹配結(jié)果,如果本輪的結(jié)果為空,則將該活躍頂點(diǎn)的自身狀態(tài)設(shè)置為不活躍;
(7)數(shù)據(jù)圖的每個(gè)活躍頂點(diǎn)按照發(fā)送函數(shù)向該活躍頂點(diǎn)的鄰居頂點(diǎn)發(fā)送消息;
(8)對(duì)于查詢樹和數(shù)據(jù)圖,多次迭代執(zhí)行所述步驟(6)到步驟(7),直到查詢樹自身已經(jīng)匹配完成,匹配出來的部分匹配結(jié)果保存在數(shù)據(jù)圖的各個(gè)頂點(diǎn)上;
(9)依據(jù)查詢樹和步驟(8)中得到的部分匹配結(jié)果,生成最終的子圖枚舉匹配結(jié)果。
進(jìn)一步地,所述步驟(2)中,將查詢圖中每個(gè)頂點(diǎn)的度數(shù)作為每個(gè)頂點(diǎn)的初始權(quán)重。
進(jìn)一步地,所述步驟(3)中,選擇權(quán)重最高的點(diǎn)插入到查詢樹中,并從查詢圖中刪除這個(gè)點(diǎn)及其相關(guān)的邊,并更新各個(gè)頂點(diǎn)的度數(shù)信息作為新的權(quán)重。重復(fù)這個(gè)過程,直到查詢圖的所有邊都已經(jīng)被全部刪除。
進(jìn)一步地,所述步驟(4)中,查詢樹上頂點(diǎn)高度為2的所有頂點(diǎn)均為初始查詢點(diǎn)。
進(jìn)一步地,所述步驟(5)中,在第1輪迭代之前,所有數(shù)據(jù)圖頂點(diǎn)均為活躍狀態(tài),且不會(huì)收到別的頂點(diǎn)傳過來的部分匹配結(jié)果。
進(jìn)一步地,所述步驟(6)中,每個(gè)活躍狀態(tài)的頂點(diǎn)的計(jì)算方法為:根據(jù)該頂點(diǎn)收到的部分匹配結(jié)果(在第0輪迭代時(shí),不會(huì)收到任何部分匹配結(jié)果;在其他輪迭代時(shí),會(huì)收到由鄰居頂點(diǎn)發(fā)送過來的部分匹配結(jié)果),首先完成兩件事:一,根據(jù)收到的部分匹配結(jié)果確定本輪超級(jí)步匹配的是查詢樹上的哪一棵子樹;二,根據(jù)收到的部分匹配結(jié)果,和當(dāng)前數(shù)據(jù)圖頂點(diǎn)的鄰接表信息,生成子樹在當(dāng)前數(shù)據(jù)圖頂點(diǎn)上的部分匹配結(jié)果。
進(jìn)一步地,所述步驟(7)中,每個(gè)活躍的頂點(diǎn)向該頂點(diǎn)的鄰接點(diǎn)發(fā)送本輪生成的部分匹配結(jié)果。
進(jìn)一步地,所述步驟(8)中,使用分布式圖計(jì)算框架,通過多輪迭代完成步驟(6)到步驟(7)。
進(jìn)一步地,所述步驟(9)中,在數(shù)據(jù)圖的所有頂點(diǎn)上,根據(jù)查詢樹和第(8)步中迭代完成后得到的部分匹配結(jié)果,匹配查詢樹上的所有葉子結(jié)點(diǎn),并得到最終完整的匹配結(jié)果。
有益效果:本發(fā)明給出了一種能夠在分布式計(jì)算環(huán)境中進(jìn)行子圖枚舉計(jì)算的方法。第一,本發(fā)明將分布式子圖枚舉問題解構(gòu)為上述步驟,這些步驟可以有效地減少分布式情況下的網(wǎng)絡(luò)傳輸數(shù)據(jù)量,高效的完成分布式子圖枚舉計(jì)算功能;第二,本發(fā)明使用通用的分布式圖計(jì)算框架,可以享受到分布式圖計(jì)算框架帶來的性能提升,并且具有良好的擴(kuò)展性。第三,本發(fā)明不需要任何索引構(gòu)建的預(yù)處理過程,適合于圖數(shù)據(jù)經(jīng)常更新的應(yīng)用場(chǎng)景。
附圖說明
圖1為本發(fā)明的方法總體流程示意圖;
圖2(a)為本發(fā)明的一個(gè)查詢圖示例;
圖2(b)為本發(fā)明的一個(gè)數(shù)據(jù)圖示例;
圖2(c)為本發(fā)明的一個(gè)查詢樹示例;
圖3為本發(fā)明中pregel編程框架超級(jí)步迭代步驟的流程示意圖;
圖4為本發(fā)明中圖2所示示例的最終匹配結(jié)果示意圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
本發(fā)明提出了一種基于分布式圖計(jì)算框架的分布式子圖枚舉方法。該方法包含三個(gè)子方法。第一,本發(fā)明提出了一種查詢分解的方法(對(duì)應(yīng)步驟(2)到步驟(3));其二,本發(fā)明提出了一種查詢部分匹配結(jié)果的方法(對(duì)應(yīng)步驟(4)到步驟(8)));其三,本發(fā)明提出了一種根據(jù)部分匹配結(jié)果得到最終匹配結(jié)果的查找方法(對(duì)應(yīng)步驟(9))。
如圖1所示,本發(fā)明的完整流程包括查詢分解步驟、通過分布式圖計(jì)算框架完成部分匹配結(jié)果的生成步驟以及最終結(jié)果的生成步驟3個(gè)部分。具體的實(shí)施方式分別說明如下:
查詢分解階段對(duì)應(yīng)技術(shù)方案步驟(2)和(3)。
步驟(2)的具體實(shí)施方式為:將查詢圖的每個(gè)頂點(diǎn)的度數(shù)作為該頂點(diǎn)的權(quán)重。
步驟(3)的具體實(shí)施方式為:給定查詢圖中的邊的集合。步驟(3)通過多輪迭代完成查詢樹生成。在每輪迭代中,在查詢圖中選擇一個(gè)查詢點(diǎn),在查詢樹中查找這個(gè)查詢點(diǎn)對(duì)應(yīng)的插入點(diǎn),將這個(gè)查詢點(diǎn)在邊集中的所有鄰居節(jié)點(diǎn)作為子節(jié)點(diǎn)插入到查詢樹的插入點(diǎn)中。迭代執(zhí)行上述任務(wù),直到查詢圖中邊集為空。下面具體說明查詢樹的插入過程。
在第一輪迭代開始之前,以查詢圖中權(quán)重最大的點(diǎn)作為查詢樹的根節(jié)點(diǎn),以該節(jié)點(diǎn)的所有鄰居結(jié)點(diǎn)作為查詢樹的根節(jié)點(diǎn)的子節(jié)點(diǎn),組成初始的查詢樹。然后將查詢圖中選中的頂點(diǎn)及其鄰接邊從查詢圖中刪除。
然后迭代開始。每一輪迭代過程中,從當(dāng)前的查詢圖中選擇權(quán)重最大的點(diǎn)作為查詢點(diǎn),從當(dāng)前的查詢樹的葉子結(jié)點(diǎn)中選擇和查詢點(diǎn)編號(hào)相同,離根節(jié)點(diǎn)最近的葉子結(jié)點(diǎn)作為插入點(diǎn)。將查詢點(diǎn)在邊集中的所有鄰居節(jié)點(diǎn)作為插入點(diǎn)的子節(jié)點(diǎn)插入到查詢樹中,成為插入點(diǎn)的子節(jié)點(diǎn)。完成插入后,將插入點(diǎn)及其鄰接邊從查詢圖中刪除。然后更新查詢圖各頂點(diǎn)的度數(shù)作為新的權(quán)重。一輪迭代過程完成。
重復(fù)上述迭代過程,直到查詢圖邊集為空。
以圖2(a)中給出的查詢圖和圖2(b)中給出的數(shù)據(jù)圖為例,生成圖2(c)給出的查詢樹。具體的實(shí)施方法如下:給出查詢圖{q0,q1,q2,q3,q4,q5}的初始權(quán)重{1,3,2,3,2,1},邊集{q0-q1,q1-q2,q1-q4,q2-q3,q3-q4,q3-q5}。選擇權(quán)重最大的點(diǎn)q1作為初始點(diǎn)。查詢樹為{q1-q0,q1-q2,q1-q4},即q1作為查詢樹的根節(jié)點(diǎn),q0,q2,q4作為q1的葉子結(jié)點(diǎn)。此時(shí)更新權(quán)重為{0,0,1,3,1,1},邊集刪除{q0-q1,q1-q2,q1-q4}。從查詢樹葉子結(jié)點(diǎn)中選擇權(quán)重最大的點(diǎn)q2作為查詢點(diǎn),查找查詢樹上q2對(duì)應(yīng)的插入點(diǎn)t2,將t3作為t2的子結(jié)點(diǎn)插入到查詢樹中,此時(shí)更新權(quán)重為{0,0,0,2,1,1},邊集刪除{q2-q3}。從查詢樹葉子節(jié)點(diǎn)中選擇q3作為插入點(diǎn),將q3的鄰接點(diǎn)q4,q5作為t3的葉子結(jié)點(diǎn)插入到查詢樹中,此時(shí)更新權(quán)重為{0,0,0,0,0,0},邊集刪除{q3-q4,q4-q5}。至此邊集為空。查詢樹生成方法執(zhí)行完成。
通過分布式圖計(jì)算框架完成部分匹配結(jié)果的生成階段對(duì)應(yīng)技術(shù)方案步驟(4)到(8)。
具體實(shí)施方式為:本技術(shù)方案是基于分布式圖計(jì)算框架,計(jì)算由一系列迭代計(jì)算過程構(gòu)成。在第0輪迭代時(shí),所有數(shù)據(jù)圖頂點(diǎn)均為活躍狀態(tài);在迭代過程中,數(shù)據(jù)圖的各個(gè)頂點(diǎn)會(huì)收到上一輪迭代中它的鄰接頂點(diǎn)發(fā)送過來的部分匹配結(jié)果,并且在本輪迭代中生成自己的部分匹配結(jié)果,如果本輪迭代中沒有生成有效的部分匹配結(jié)果,則該頂點(diǎn)將自身狀態(tài)設(shè)置為不活躍。
在每一個(gè)迭代過程中,每個(gè)處于活躍狀態(tài)的數(shù)據(jù)圖頂點(diǎn)的計(jì)算函數(shù)為:根據(jù)該頂點(diǎn)收到的部分匹配結(jié)果(在第0輪迭代時(shí),不會(huì)收到任何部分匹配結(jié)果;在其他輪迭代時(shí),會(huì)收到由鄰居頂點(diǎn)發(fā)送過來的部分匹配結(jié)果),首先完成兩件事:一,根據(jù)收到的部分匹配結(jié)果確定本輪所匹配的查詢子樹;二,根據(jù)收到的部分匹配結(jié)果,和當(dāng)前數(shù)據(jù)圖頂點(diǎn)的鄰接表信息,生成本輪查詢子樹在當(dāng)前數(shù)據(jù)圖頂點(diǎn)上的部分匹配結(jié)果。
進(jìn)一步地,確定本輪查詢子樹的方法為:從鄰接點(diǎn)接收到的部分匹配結(jié)果中,包含有對(duì)應(yīng)的上一輪查詢子樹的信息。以上一輪查詢子樹的父節(jié)點(diǎn)為根的查詢子樹,就是本輪迭代中需要處理的查詢子樹。進(jìn)一步地,生成部分匹配結(jié)果的方法為:先從分布式數(shù)據(jù)庫中獲取數(shù)據(jù)圖中當(dāng)前頂點(diǎn)的鄰接點(diǎn)列表,然后再遍歷收到的部分匹配結(jié)果,對(duì)收到的部分匹配結(jié)果和當(dāng)前頂點(diǎn)的鄰接點(diǎn)列表,按照查詢圖對(duì)應(yīng)點(diǎn)相同的原則,做基于笛卡爾積的連接操作,獲得本輪當(dāng)前查詢子樹的匹配結(jié)果。進(jìn)一步地,對(duì)于本輪查詢子樹的部分匹配結(jié)果,其中只保存本輪查詢子樹中非葉節(jié)點(diǎn)的匹配信息。
在生成本輪查詢子樹的部分匹配結(jié)果之后,每個(gè)活躍的數(shù)據(jù)圖頂點(diǎn)向該頂點(diǎn)的鄰接點(diǎn)發(fā)送本輪生成的部分匹配結(jié)果。如果本輪生成的部分匹配結(jié)果為空,則該頂點(diǎn)將自己設(shè)置為不活躍的狀態(tài),否則該頂點(diǎn)繼續(xù)保持活躍。
使用pregel編程框架完成上述的迭代過程(pregel編程框架是分布式圖計(jì)算框架的一種,在pregel編程框架中,迭代過程為超級(jí)步迭代過程),迭代終止的條件是查詢樹的所有子樹(含查詢樹本身)都已完成匹配。迭代終止后,對(duì)應(yīng)于查詢樹本身的部分匹配結(jié)果保存在數(shù)據(jù)圖的各頂點(diǎn)上。
以圖2(b)、(c)中給出的數(shù)據(jù)圖、查詢樹為例,在圖3中展示了使用pregel編程框架作為本例中的分布式圖計(jì)算框架來進(jìn)行超級(jí)步迭代過程的一個(gè)示例。在此,只選擇一個(gè)部分匹配結(jié)果為例子進(jìn)行說明,其他匹配結(jié)果同理。首先,整個(gè)查詢過程以查詢樹上的以頂點(diǎn)t2為根的查詢子樹作為初始查詢子樹,開始匹配。圖3中,示例了在數(shù)據(jù)圖頂點(diǎn)d2的匹配過程,從分布式數(shù)據(jù)庫中獲得頂點(diǎn)d2的鄰接點(diǎn)列表,即{d0,d1,d3,d5}。得到以t2為根節(jié)點(diǎn)的查詢樹的匹配結(jié)果為:得到以2為根節(jié)點(diǎn)的查詢樹的匹配結(jié)果:{d2,d0},{d2,d1},{d2,d3},{d2,d5}。在本輪超級(jí)步迭代結(jié)束時(shí),頂點(diǎn)d2將結(jié)果發(fā)送到它的鄰接點(diǎn){d0,d1,d3,d5}上。圖3示例了將上述部分匹配結(jié)果發(fā)送給頂點(diǎn)d1的過程。在下一輪超級(jí)步迭代中,頂點(diǎn)d1收到了上一輪迭代中頂點(diǎn)d2發(fā)送過來的部分匹配結(jié)果。頂點(diǎn)d1根據(jù)這些部分匹配結(jié)果,確定了本輪需要處理的查詢子樹是查詢樹中的節(jié)點(diǎn)t2的父節(jié)點(diǎn),即以節(jié)點(diǎn)t1為根的查詢子樹(即查詢樹本身)。數(shù)據(jù)圖頂點(diǎn)d1從分布式數(shù)據(jù)庫中獲得其鄰接點(diǎn)列表{d0,d2,d3,d4},然后將收到的部分匹配結(jié)果和鄰接點(diǎn)列表進(jìn)行基于笛卡爾積的連接操作,得到以節(jié)點(diǎn)t1為根的查詢子樹(即查詢樹本身)的匹配結(jié)果為:查詢子樹{q1,q2,q3}的匹配結(jié)果為:{d1,d2,d0},{d1,d2,d1},{d1,d2,d3},{d1,d2,d5}。至此,查詢樹本身已經(jīng)匹配完成。
擴(kuò)展部分匹配結(jié)果的階段對(duì)應(yīng)技術(shù)方案步驟(8)。具體實(shí)施方式為:根據(jù)上述得到的部分匹配結(jié)果,對(duì)每個(gè)部分匹配結(jié)果進(jìn)行擴(kuò)展。進(jìn)一步地,對(duì)于每個(gè)部分匹配結(jié)果擴(kuò)展的方法為:從分布式數(shù)據(jù)庫中查詢部分匹配結(jié)果中出現(xiàn)的數(shù)據(jù)圖頂點(diǎn)的鄰接表,然后根據(jù)查詢樹的拓?fù)湫畔?,將出現(xiàn)在查詢樹中但未出現(xiàn)在部分匹配結(jié)果中的查詢圖頂點(diǎn),根據(jù)數(shù)據(jù)庫查出的鄰接表信息填充完整。對(duì)每一個(gè)完整匹配的最終結(jié)果,判斷是否符合子圖同構(gòu)(即查詢圖頂點(diǎn)和數(shù)據(jù)圖頂點(diǎn)一一對(duì)應(yīng)、查詢圖邊和數(shù)據(jù)圖邊一一對(duì)應(yīng))的匹配條件,符合子圖同構(gòu)條件的匹配結(jié)果進(jìn)行輸出,否則拋棄。
繼續(xù)根據(jù)上一步的例子說明。在pregel編程框架迭代結(jié)束之后,數(shù)據(jù)圖的頂點(diǎn)d1上得到了以查詢樹自身的部分匹配結(jié)果。這些部分匹配結(jié)果中保存了查詢樹的非葉節(jié)點(diǎn){d1,d2,d3}的匹配信息。在數(shù)據(jù)圖頂點(diǎn)d1上,共有兩個(gè)部分匹配結(jié)果{d1,d2,d3}和{d1,d2,d5}。從分布式數(shù)據(jù)庫中獲得數(shù)據(jù)圖頂點(diǎn)d1,d2,d3,d5的鄰接表,用以填充。
對(duì)于部分匹配結(jié)果{d1,d2,d3},查詢圖頂點(diǎn)q4的可能匹配結(jié)果為數(shù)據(jù)圖頂點(diǎn)d1的鄰接點(diǎn)和數(shù)據(jù)圖頂點(diǎn)d3的鄰接點(diǎn)的交集,即{d0,d2}。查詢圖頂點(diǎn)q4沒有可以匹配的頂點(diǎn)。因此,沒有匹配結(jié)果。
對(duì)于部分匹配結(jié)果{d1,d2,d5},查詢圖頂點(diǎn)q4的可能匹配結(jié)果為數(shù)據(jù)圖1的鄰接點(diǎn)和數(shù)據(jù)圖d5的鄰接點(diǎn)的交集,即{d2,d4}。查詢圖頂點(diǎn)q4匹配頂點(diǎn)為數(shù)據(jù)圖的頂點(diǎn)d4,查詢圖頂點(diǎn)q0可能匹配結(jié)果為數(shù)據(jù)圖頂點(diǎn)d1的鄰接點(diǎn),即{d0,d2,d3,d4}。查詢頂點(diǎn)q5可能匹配結(jié)果為數(shù)據(jù)圖d5的鄰接點(diǎn),即{d2,d4,d6,d7}。經(jīng)過基于笛卡爾積的擴(kuò)展過程可以得到,查詢圖{d0,d1,d2,d3,d4,d5}的匹配結(jié)果為{d0,d1,d2,d5,d4,d6},{d3,d1,d2,d5,d4,d6},{d0,d1,d2,d5,d4,d7},{d3,d1,d2,d5,d4,d7},且這四個(gè)結(jié)果符合子圖同構(gòu)匹配條件,并進(jìn)行輸出。具體匹配結(jié)果的示例如圖4所示。
至此,本發(fā)明的所有步驟全部完成,所有正確的匹配結(jié)果均已得到輸出。
本發(fā)明基于已有的開源軟件實(shí)現(xiàn)了一個(gè)原型系統(tǒng)ptsearch。其中底層數(shù)據(jù)存儲(chǔ)使用hdfs,鄰接表存儲(chǔ)使用redis數(shù)據(jù)庫,大數(shù)據(jù)計(jì)算平臺(tái)使用apachespark。上述軟件不屬于本發(fā)明的內(nèi)容。
通過對(duì)一張數(shù)據(jù)圖uspatents以及幾個(gè)查詢圖對(duì)本發(fā)明實(shí)現(xiàn)的原型系統(tǒng)進(jìn)行測(cè)試,查詢圖例子為:查詢1:{0-1,1-2,2-3,0-3};查詢2:{0-1,1-2,2-3,0-3,0-2};查詢4:{0-1,1-2,2-3,0-3,0-2,1-3};查詢3:{0-1,0-4,1-2,1-4,2-3,3-4}。表1是在相同的硬件條件下對(duì)比本方法和目前最好的twintwigjoin以及psgl兩個(gè)方法的性能比較。從表格中可以看出,本方法在性能上有顯著地優(yōu)勢(shì)。表2是在相同的硬件條件下對(duì)比本方法和目前最好的twintwigjoin以及psgl兩個(gè)方法的網(wǎng)絡(luò)傳輸量比較。從表格中可以看出,本方法在網(wǎng)絡(luò)傳輸數(shù)據(jù)量上最少。驗(yàn)證了本方法的有益效果。
表1:分布式子圖枚舉算法的性能測(cè)試
表2:分布式子圖枚舉算法的網(wǎng)絡(luò)傳輸量測(cè)試