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