一種處理圖數(shù)據(jù)的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)挖掘技術(shù)領(lǐng)域,尤其涉及一種處理圖數(shù)據(jù)的方法及裝置。
【背景技術(shù)】
[0002]在大數(shù)據(jù)挖掘時代,圖不僅可以直接描述計算機(jī)科學(xué)、化學(xué)以及生物信息學(xué)等領(lǐng)域的許多現(xiàn)實應(yīng)用,例如社交網(wǎng)絡(luò)、web(網(wǎng)頁)圖、化學(xué)物質(zhì)以及生物結(jié)構(gòu)等,同時也可以用來描述各種數(shù)據(jù)挖掘算法,例如矩陣分解或最短路徑等等。其中,圖包括多個節(jié)點以及連接各個節(jié)點的邊,圖數(shù)據(jù)包括各個節(jié)點的節(jié)點數(shù)據(jù)以及連接各個節(jié)點的邊的邊數(shù)據(jù),一條邊的邊數(shù)據(jù)包括構(gòu)成該條邊的源節(jié)點、目的節(jié)點和該條邊的權(quán)值。在單機(jī)圖計算處理平臺(即采用單個計算機(jī)進(jìn)行圖計算的處理平臺)中,由于單個計算機(jī)的本地內(nèi)存的內(nèi)存容量有限,當(dāng)需要計算的圖數(shù)據(jù)的數(shù)據(jù)量超過該內(nèi)存容量時,需要對圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行處理,得到多個邊數(shù)據(jù)塊,一個邊數(shù)據(jù)塊包括一個或多個邊數(shù)據(jù)。
[0003]目前,在對圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行處理時,采用固定的方法,使得計算機(jī)在對一個邊數(shù)據(jù)塊中的節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算時,若無法直接獲取與該節(jié)點相關(guān)的邊數(shù)據(jù),則需要對該邊數(shù)據(jù)塊中的邊數(shù)據(jù)的排列順序進(jìn)行調(diào)整才可以得到需要的邊數(shù)據(jù)。例如,在GraphChi (—種單機(jī)圖計算處理平臺)中,由于在圖計算時是以目的節(jié)點為中心的計算模式,因此,計算機(jī)按照目的節(jié)點的ID(標(biāo)識)由小至大的順序?qū)D數(shù)據(jù)中的邊數(shù)據(jù)分割為多個邊數(shù)據(jù)塊(在GraphChi中稱為Shard),對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)被分割在一個邊數(shù)據(jù)塊中,為了順序更新節(jié)點數(shù)據(jù),每個邊數(shù)據(jù)塊中的邊數(shù)據(jù)又按照邊數(shù)據(jù)對應(yīng)的源節(jié)點的ID由小至大順序排列。該情況下,在計算機(jī)將一個邊數(shù)據(jù)塊讀入本地內(nèi)存之后,需要獲取該邊數(shù)據(jù)塊中的多個目的節(jié)點的全部入邊數(shù)據(jù)(即源節(jié)點為其他節(jié)點,目的節(jié)點為該節(jié)點的邊數(shù)據(jù))和全部出邊數(shù)據(jù)(即源節(jié)點為該節(jié)點,目的節(jié)點為其他節(jié)點的邊數(shù)據(jù)),以便依次對該邊數(shù)據(jù)塊中的多個目的節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算,為了快速的獲取目的節(jié)點的全部入邊數(shù)據(jù),需要將該邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照目的節(jié)點的ID由小至大的順序重新排序,而重新排序的過程耗時較長,使得圖計算的效率較低。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實施例提供一種處理圖數(shù)據(jù)的方法及裝置,用于提高圖計算的效率。
[0005]為達(dá)到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
[0006]第一方面,提供一種處理圖數(shù)據(jù)的方法,包括:
[0007]獲取圖數(shù)據(jù)中的邊數(shù)據(jù)和對所述圖數(shù)據(jù)進(jìn)行圖計算的計算算法;
[0008]根據(jù)所述計算算法,確定對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的分割算法,所述分割算法為根據(jù)構(gòu)成邊數(shù)據(jù)的節(jié)點對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的算法,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的源節(jié)點和/或目的節(jié)點;
[0009]根據(jù)所述分割算法和本地內(nèi)存的內(nèi)存容量,將所述圖數(shù)據(jù)中的邊數(shù)據(jù)分割為N個初始邊數(shù)據(jù)塊,所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊的數(shù)據(jù)量均小于所述內(nèi)存容量,N 2 I,N為整數(shù);
[0010]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照所述構(gòu)成邊數(shù)據(jù)的節(jié)點進(jìn)行排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0011]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的出邊數(shù)據(jù),對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個初始邊數(shù)據(jù)塊中,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的目的節(jié)點;
[0012]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照所述構(gòu)成邊數(shù)據(jù)的節(jié)點進(jìn)行排列,包括:
[0013]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)連續(xù)排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0014]該可選的方法,由于對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個目標(biāo)邊數(shù)據(jù)塊中、且對應(yīng)該目的節(jié)點的全部邊數(shù)據(jù)在該目標(biāo)邊數(shù)據(jù)塊中連續(xù)排列,因此,能夠快速的獲取該目的節(jié)點的入邊數(shù)據(jù),提高圖計算的效率。
[0015]進(jìn)一步的,在所述將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)連續(xù)排列之后,所述方法還包括:
[0016]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)按照該全部邊數(shù)據(jù)的源節(jié)點由小至大或由大至小順序排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0017]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的入邊數(shù)據(jù),對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)在一個初始邊數(shù)據(jù)塊中,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的源節(jié)點;
[0018]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照所述構(gòu)成邊數(shù)據(jù)的節(jié)點進(jìn)行排列,包括:
[0019 ]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)連續(xù)排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0020]該可選的方法,由于對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)在一個目標(biāo)邊數(shù)據(jù)塊中、且對應(yīng)該源節(jié)點的全部邊數(shù)據(jù)在該目標(biāo)邊數(shù)據(jù)塊中連續(xù)排列,因此,能夠快速的獲取該源節(jié)點的出邊數(shù)據(jù),提高圖計算的效率。
[0021]進(jìn)一步的,在所述將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)連續(xù)排列之后,所述方法還包括:
[0022 ]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)按照該全部邊數(shù)據(jù)的目的節(jié)點由小至大或由大至小順序排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0023]可選的,所述圖數(shù)據(jù)中的全部節(jié)點的節(jié)點數(shù)據(jù)存儲在所述本地內(nèi)存中,當(dāng)一個節(jié)點的節(jié)點數(shù)據(jù)變化時,在所述本地內(nèi)存中更新該節(jié)點的節(jié)點數(shù)據(jù)。
[0024]需要說明的是,由于在計算的過程中會頻繁的用到各個節(jié)點的節(jié)點數(shù)據(jù),因此,可以將節(jié)點數(shù)據(jù)存儲在本地內(nèi)存中,當(dāng)節(jié)點數(shù)據(jù)變化時,直接在本地內(nèi)存中進(jìn)行更新,在下次計算時,使用更新后的節(jié)點數(shù)據(jù),待計算完成后,將節(jié)點數(shù)據(jù)寫入磁盤中。這樣一來,可以避免反復(fù)地在磁盤中讀寫節(jié)點數(shù)據(jù),進(jìn)一步提高圖計算的效率。
[0025]第二方面,提供一種處理圖數(shù)據(jù)的裝置,包括:
[0026]獲取單元,用于獲取圖數(shù)據(jù)中的邊數(shù)據(jù)和對所述圖數(shù)據(jù)進(jìn)行圖計算的計算算法;
[0027]確定單元,用于根據(jù)所述計算算法,確定對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的分割算法,所述分割算法為根據(jù)構(gòu)成邊數(shù)據(jù)的節(jié)點對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的算法,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的源節(jié)點和/或目的節(jié)點;
[0028]分割單元,用于根據(jù)所述分割算法和本地內(nèi)存的內(nèi)存容量,將所述圖數(shù)據(jù)中的邊數(shù)據(jù)分割為N個初始邊數(shù)據(jù)塊,所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊的數(shù)據(jù)量均小于所述內(nèi)存容量,I,N為整數(shù);
[0029]排列單元,用于將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照所述構(gòu)成邊數(shù)據(jù)的節(jié)點進(jìn)行排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0030]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的出邊數(shù)據(jù),對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個初始邊數(shù)據(jù)塊中,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的目的節(jié)點;
[0031]所述排列單元具體用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)連續(xù)排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0032]該可選的方法,由于對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個目標(biāo)邊數(shù)據(jù)塊中、且對應(yīng)該目的節(jié)點的全部邊數(shù)據(jù)在該目標(biāo)邊數(shù)據(jù)塊中連續(xù)排列,因此,能夠快速的獲取該目的節(jié)點的入邊數(shù)據(jù),提高圖計算的效率。
[0033]進(jìn)一步的,所述排列單元還用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)按照該全部邊數(shù)據(jù)的源節(jié)點由小至大或由大至小順序排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0034]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的入邊數(shù)據(jù),對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)在一個初始邊數(shù)據(jù)塊中,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的源節(jié)點;
[0035]所述排列單元具體用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)連續(xù)排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0036]該可選的方法,由于對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)在一個目標(biāo)邊數(shù)據(jù)塊中、且對應(yīng)該源節(jié)點的全部邊數(shù)據(jù)在該目標(biāo)邊數(shù)據(jù)塊中連續(xù)排列,因此,能夠快速的獲取該源節(jié)點的出邊數(shù)據(jù),提高圖計算的效率。
[0037]進(jìn)一步的,所述排列單元還用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一源節(jié)點的全部邊數(shù)據(jù)按照該全部邊數(shù)據(jù)的目的節(jié)點由小至大或由大至小順序排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0038]可選的,所述圖數(shù)據(jù)中的全部節(jié)點的節(jié)點數(shù)據(jù)存儲在所述本地內(nèi)存中,當(dāng)一個節(jié)點的節(jié)點數(shù)據(jù)變化時,在所述本地內(nèi)存中更新該節(jié)點的節(jié)點數(shù)據(jù)。
[0039]需要說明的是,由于在計算的過程中會頻繁的用到各個節(jié)點的節(jié)點數(shù)據(jù),因此,可以將節(jié)點數(shù)據(jù)存儲在本地內(nèi)存中,當(dāng)節(jié)點數(shù)據(jù)變化時,直接在本地內(nèi)存中進(jìn)行更新,在下次計算時,使用更新后的節(jié)點數(shù)據(jù),待計算完成后,將節(jié)點數(shù)據(jù)寫入磁盤中。這樣一來,可以避免反復(fù)地在磁盤中讀寫節(jié)點數(shù)據(jù),進(jìn)一步提高圖計算的效率。
[0040]第三方面,提供一種處理圖數(shù)據(jù)的裝置,包括:存儲器和處理器,所述存儲器中用于存儲一組代碼,所述處理器根據(jù)該代碼執(zhí)行以下動作:
[0041]獲取圖數(shù)據(jù)中的邊數(shù)據(jù)和對所述圖數(shù)據(jù)進(jìn)行圖計算的計算算法;
[0042]根據(jù)所述計算算法,確定對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的分割算法,所述分割算法為根據(jù)構(gòu)成邊數(shù)據(jù)的節(jié)點對所述圖數(shù)據(jù)中的邊數(shù)據(jù)進(jìn)行分割的算法,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的源節(jié)點和/或目的節(jié)點;
[0043]根據(jù)所述分割算法和本地內(nèi)存的內(nèi)存容量,將所述圖數(shù)據(jù)中的邊數(shù)據(jù)分割為N個初始邊數(shù)據(jù)塊,所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊的數(shù)據(jù)量均小于所述內(nèi)存容量,N 2 I,N為整數(shù);
[0044]將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的邊數(shù)據(jù)按照所述構(gòu)成邊數(shù)據(jù)的節(jié)點進(jìn)行排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0045]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的出邊數(shù)據(jù),對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個初始邊數(shù)據(jù)塊中,所述構(gòu)成邊數(shù)據(jù)的節(jié)點為構(gòu)成邊數(shù)據(jù)的目的節(jié)點;
[0046]所述處理器具體用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)連續(xù)排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0047]該可選的方法,由于對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)在一個目標(biāo)邊數(shù)據(jù)塊中、且對應(yīng)該目的節(jié)點的全部邊數(shù)據(jù)在該目標(biāo)邊數(shù)據(jù)塊中連續(xù)排列,因此,能夠快速的獲取該目的節(jié)點的入邊數(shù)據(jù),提高圖計算的效率。
[0048]進(jìn)一步的,所述處理器還用于:將所述N個初始邊數(shù)據(jù)塊中的每個初始邊數(shù)據(jù)塊中的對應(yīng)同一目的節(jié)點的全部邊數(shù)據(jù)按照該全部邊數(shù)據(jù)的源節(jié)點由小至大或由大至小順序排列,得到N個目標(biāo)邊數(shù)據(jù)塊。
[0049]可選的,所述計算算法在對所述圖數(shù)據(jù)中的一個節(jié)點的節(jié)點數(shù)據(jù)進(jìn)行計算的過程中,不需要使用該節(jié)點的入邊數(shù)據(jù),對應(yīng)同