本發(fā)明涉及社交網(wǎng)絡(luò)、大數(shù)據(jù)和分布式存儲(chǔ)領(lǐng)域,尤其涉及一種社交網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法。
背景技術(shù):
::如今在線社交網(wǎng)絡(luò)(onlinesocialnetworks,簡稱osns)如facebook,twitter和微信等已經(jīng)成為最熱門的互聯(lián)網(wǎng)應(yīng)用之一。以facebook為例,2016年初其月度活躍用戶數(shù)已達(dá)到15.9億,相當(dāng)于近四分之一的世界人口都在用facebook作為社交工具在互聯(lián)網(wǎng)上進(jìn)行交流。在線社交網(wǎng)絡(luò)之所以如此受歡迎,除了互聯(lián)網(wǎng)的普及之外,更為重要的是它能夠?qū)⑷藗兊纳缃魂P(guān)系和社交活動(dòng)投射到網(wǎng)絡(luò)空間,從而讓交流變得更加方便、快捷和高效,尤其對(duì)于那些地域上相距較遠(yuǎn)的用戶。伴隨在線社交網(wǎng)絡(luò)的蓬勃發(fā)展,用戶數(shù)目不斷增加,用戶的數(shù)據(jù)量也在急劇增長。面對(duì)pb甚至eb級(jí)的大數(shù)據(jù)(bigdata),任何集中存儲(chǔ)技術(shù)都無法滿足如此大規(guī)模數(shù)據(jù)的存儲(chǔ)需求,必須采用分布式存儲(chǔ)技術(shù)將用戶數(shù)據(jù)分散地存儲(chǔ)在眾多的存儲(chǔ)服務(wù)器之上。近年來,分布式鍵值存儲(chǔ)(key-valuestores)應(yīng)運(yùn)而生,它正是分布式存儲(chǔ)技術(shù)在大數(shù)據(jù)時(shí)代延續(xù)和發(fā)展。目前,大多數(shù)社交網(wǎng)絡(luò)服務(wù)提供商均基于鍵值存儲(chǔ)技術(shù)來構(gòu)建存儲(chǔ)系統(tǒng),其中知名的系統(tǒng)包括谷歌文件系統(tǒng)(googlefilesystem,簡稱gfs)及其開源實(shí)現(xiàn)項(xiàng)目hadoop分布式文件系統(tǒng)(hadoopdistributedfilesystem,簡稱hdfs),亞馬遜的高性能鍵值存儲(chǔ)系統(tǒng)dynamo及facebook開發(fā)的其開源實(shí)現(xiàn)項(xiàng)目cassandra等。如圖1所示,gfs利用主節(jié)點(diǎn)作為統(tǒng)一的元數(shù)據(jù)服務(wù)器(meta-dataserver,簡稱mds)存儲(chǔ)和管理數(shù)據(jù)及其副本的元數(shù)據(jù)信息,數(shù)據(jù)則劃分成若干塊通過哈希分散存儲(chǔ)于塊存儲(chǔ)服務(wù)器中,系統(tǒng)默認(rèn)的數(shù)據(jù)塊大小為64mb,數(shù)據(jù)塊具體存放的位置由哈希值決定。數(shù)據(jù)訪問請(qǐng)求首先到達(dá)主節(jié)點(diǎn)查找元數(shù)據(jù)獲得想要訪問數(shù)據(jù)的位置、句柄等信息,然后直接根據(jù)地址訪問塊存儲(chǔ)服務(wù)器。圖2給出亞馬遜鍵值存儲(chǔ)系統(tǒng)dynamo的數(shù)據(jù)放置示意圖,該結(jié)構(gòu)將系統(tǒng)節(jié)點(diǎn)按照分布式哈希表(distributedhashtable,簡稱dht)構(gòu)建在一個(gè)閉環(huán)空間內(nèi),每個(gè)節(jié)點(diǎn)根據(jù)哈希值負(fù)責(zé)存儲(chǔ)和管理一部分?jǐn)?shù)據(jù),系統(tǒng)無統(tǒng)一的主節(jié)點(diǎn),訪問請(qǐng)求不再需要先訪問主節(jié)點(diǎn),使得高并發(fā)訪問量被分?jǐn)偟较到y(tǒng)中所有節(jié)點(diǎn),避免了性能瓶頸和單點(diǎn)失效問題。對(duì)于在線社交網(wǎng)絡(luò)而言,用戶在交互過程中將頻繁地訪問彼此的數(shù)據(jù),如用戶經(jīng)常瀏覽好友發(fā)布的信息并對(duì)此適時(shí)地發(fā)表一些評(píng)論,這些操作都涉及到對(duì)社交用戶數(shù)據(jù)的讀寫?,F(xiàn)有健值存儲(chǔ)系統(tǒng)采用哈希方式,用戶數(shù)據(jù)存儲(chǔ)位置由哈希值隨機(jī)確定,哈希使得任意用戶及其好友的數(shù)據(jù)分散存儲(chǔ)在多臺(tái)服務(wù)器上,用戶交互操作需要服務(wù)器間通信,隨著用戶量快速增長,數(shù)據(jù)中心內(nèi)通信量急劇增加,而巨大的內(nèi)部通信量會(huì)導(dǎo)致網(wǎng)絡(luò)擁塞、數(shù)據(jù)訪問延遲增加,降低系統(tǒng)可擴(kuò)展性。針對(duì)現(xiàn)有健值存儲(chǔ)系統(tǒng)中哈希方法帶來的高通信量,本發(fā)明提供一種基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法,將社交網(wǎng)絡(luò)用戶交互關(guān)系建模為超圖,利用超圖分割解決用戶數(shù)據(jù)放置問題,以降低數(shù)據(jù)中心內(nèi)通信量,同時(shí)保持服務(wù)器間負(fù)載均衡。技術(shù)實(shí)現(xiàn)要素:為解決上述技術(shù)問題,本發(fā)明的目的是提供一種基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法,將社交網(wǎng)絡(luò)用戶交互關(guān)系建模為超圖,利用超圖分割解決用戶數(shù)據(jù)放置問題,以降低數(shù)據(jù)中心內(nèi)通信量,同時(shí)保持服務(wù)器間負(fù)載均衡。本發(fā)明的基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法,用于社交網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中,包括步驟:步驟1、將社交網(wǎng)絡(luò)模型化為一副超圖g=(v,e),其中頂點(diǎn)集v表示所有社交用戶集合,邊集e表示社交用戶間交互關(guān)系集合;步驟2、用多層方法對(duì)所述步驟1中生成的超圖進(jìn)行劃分,劃分成n個(gè)子圖,其中n為用于存儲(chǔ)社交網(wǎng)絡(luò)用戶數(shù)據(jù)的服務(wù)器的數(shù)量;步驟3、將所述步驟2中獲得的n個(gè)子圖與數(shù)據(jù)中心內(nèi)n個(gè)服務(wù)器進(jìn)行一對(duì)一映射。進(jìn)一步的,所述步驟1中社交網(wǎng)絡(luò)模型構(gòu)建方法為:將社交網(wǎng)絡(luò)中每個(gè)用戶作為超圖g的一個(gè)頂點(diǎn),超圖g的每條邊e由兩個(gè)以上頂點(diǎn)表示,稱為超邊,每次交互中所有參與交互的用戶共同構(gòu)成一條超邊,每條超邊ei附帶一個(gè)權(quán)值ri,權(quán)值ri表示超邊ei對(duì)應(yīng)交互所產(chǎn)生的通信量。進(jìn)一步的,所述步驟2中,用cut表示割值,計(jì)算超圖劃分割值的方法為:首先,計(jì)算超邊割值,當(dāng)一個(gè)超邊ei被分割成ti個(gè)部分,則ei的割值為:cut(ei)=(ti-1)ri(1)表示分割后的通信量為分割前的(ti-1)倍;然后,對(duì)所有被分割的超邊的割值求和作為超圖劃分的割值,即進(jìn)一步的,所述步驟2中多層劃分過程為:步驟201、對(duì)原超圖g逐步粗化,粗化方法是從原超圖中每次找出最大獨(dú)立超邊集,將屬于超邊集的一組頂點(diǎn)合并在一起,每個(gè)合并后的頂點(diǎn)集都將作為第一層粗化圖中的一個(gè)新的頂點(diǎn),從而得到一個(gè)規(guī)模較原超圖更小的超圖g1;再利用同樣的方法對(duì)超圖g1粗化,依次粗化下去直到得到超圖gm,其頂點(diǎn)數(shù)量為n的整數(shù)倍;步驟202、對(duì)步驟201中得到的超圖gm進(jìn)行劃分,先劃分成2個(gè)部分,找出所有劃分中割值最小的,且保證劃分后的負(fù)載均衡小于預(yù)先設(shè)定的閾值lb*,再按照同樣的方法依次對(duì)上一輪劃分的子圖進(jìn)一步劃分,直到最終超圖gm被劃分成n個(gè)子超圖為止;步驟203、對(duì)步驟202中得到的劃分結(jié)果去粗化,根據(jù)步驟201中粗化過程逐層超圖頂點(diǎn)間的映射關(guān)系,做反向的映射,將步驟202中得到的n個(gè)子超圖逐層反向映射為原超圖g的n個(gè)子超圖。進(jìn)一步的,所述步驟2中,負(fù)載均衡lb的計(jì)算方法為:其中n為劃分的子圖數(shù)目,li和li分別表示子圖pi和pj的負(fù)載,分別用pi和pj包含的用戶數(shù)衡量。進(jìn)一步的,所述步驟3中,數(shù)據(jù)中心內(nèi)通信量的計(jì)算方法為:首先,對(duì)于任一對(duì)服務(wù)器x和y,從服務(wù)器x到y(tǒng)的訪問請(qǐng)求所產(chǎn)生的通信量rxy為:其中sx表示服務(wù)器x上存儲(chǔ)的用戶集合,ru表示用戶u的訪問通信量,函數(shù)c(u,y)用來判斷服務(wù)器y上是否存儲(chǔ)用戶u的好友的數(shù)據(jù),若是,則其值取1,否則為0;其次,針對(duì)樹型數(shù)據(jù)中心拓?fù)浣Y(jié)構(gòu),根據(jù)服務(wù)器x和y所處位置確定二者之間通信距離dxy,即經(jīng)過的交換機(jī)數(shù)目:其中pac表示接入層交換機(jī)接入服務(wù)器的端口數(shù),pag表示匯聚層接入下層的端口數(shù);最后,數(shù)據(jù)中心內(nèi)通信量t表示為:其中n表示數(shù)據(jù)中心內(nèi)服務(wù)器的集合。進(jìn)一步的,所述步驟3中的映射過程如下:步驟301、根據(jù)所述步驟2中劃分出的n個(gè)子圖,計(jì)算每一對(duì)子圖間通信量,計(jì)算公式如下:其中pi和pj表示任一對(duì)子圖,ru和rv分別表示用戶u和v的訪問通信量,函數(shù)c(u,pj)和c(v,pi)分別表示用戶u的好友是否在子圖pj內(nèi)和用戶v的好友是否在子圖pi內(nèi),若是,則其值取1,否則為0;步驟302、將所有子圖對(duì)根據(jù)步驟301計(jì)算的結(jié)果進(jìn)行非升序排列,并依次放入隊(duì)列q;步驟303、初始化未分配服務(wù)器指針empty指向第一臺(tái)服務(wù)器,開始第一輪子圖到服務(wù)器的映射,進(jìn)入步驟304;步驟304、如果是第一輪映射,則從隊(duì)列q依次取出m個(gè)子圖對(duì),其中m滿足選中的子圖對(duì)中子圖的數(shù)目記為[m],使得[m]=pac或pac+1,將[m]個(gè)子圖從empty指向的服務(wù)器開始依次映射,并更新empty指針,如果不是第一輪分配則進(jìn)入步驟305;步驟305、從隊(duì)列q中找出所有子圖對(duì),滿足子圖對(duì)中的一個(gè)子圖已經(jīng)映射到和empty所指服務(wù)器同屬一個(gè)接入交換機(jī)的服務(wù)器,從這些子圖對(duì)中找出對(duì)應(yīng)通信量最小的子圖對(duì),并將該子圖對(duì)中未映射的子圖與empty所指服務(wù)器做映射;步驟306、若隊(duì)列q不為空,則進(jìn)入步驟304,否則,完成子圖到服務(wù)器映射。借由上述方案,本發(fā)明至少具有以下優(yōu)點(diǎn):與現(xiàn)有技術(shù)相比,本發(fā)明的基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法,包括三個(gè)步驟:構(gòu)建基于超圖的社交網(wǎng)絡(luò)模型、超圖劃分和子圖到服務(wù)器映射。本發(fā)明利用超圖中超邊能夠準(zhǔn)確描述社交網(wǎng)絡(luò)中多用戶交互行為,根據(jù)用戶交互行為放置用戶數(shù)據(jù),可以極大地降低用戶交互過程中產(chǎn)生的通信量,優(yōu)化數(shù)據(jù)放置的同時(shí)能夠保持服務(wù)器間負(fù)載均衡。本發(fā)明能夠根據(jù)社交網(wǎng)絡(luò)用戶交互行為優(yōu)化用戶數(shù)據(jù)在各服務(wù)器上的放置,保持服務(wù)器間負(fù)載均衡,降低數(shù)據(jù)中心內(nèi)通信量。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,并可依照說明書的內(nèi)容予以實(shí)施,以下以本發(fā)明的較佳實(shí)施例并配合附圖詳細(xì)說明如后。附圖說明圖1谷歌文件系統(tǒng)gfs架構(gòu)圖;圖2亞馬遜高性能鍵值存儲(chǔ)系統(tǒng)數(shù)據(jù)放置示意圖;圖3樹型數(shù)據(jù)中心網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);圖4數(shù)據(jù)優(yōu)化放置方法流程圖;圖5子圖到服務(wù)器映射實(shí)例;圖6仿真實(shí)驗(yàn)在不同負(fù)載均衡閾值下的數(shù)據(jù)中心內(nèi)部通信量比較圖;圖7仿真實(shí)驗(yàn)在不同服務(wù)器規(guī)模下的數(shù)據(jù)中心內(nèi)部通信量比較圖。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。下面結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)的說明。基于超圖分割的社交用戶數(shù)據(jù)優(yōu)化放置方法,其目標(biāo)是降低數(shù)據(jù)中心內(nèi)通信量。本發(fā)明所述方法的流程圖如圖4所示,包括以下步驟:步驟1)將社交網(wǎng)絡(luò)模型化為一副超圖g=(v,e),其中頂點(diǎn)集v表示所有社交用戶集合,邊集e表示社交用戶間交互關(guān)系集合;步驟2)用多層方法對(duì)步驟1)生成的超圖進(jìn)行劃分,劃分成n個(gè)子圖,其中n為用于存儲(chǔ)社交網(wǎng)絡(luò)用戶數(shù)據(jù)的服務(wù)器的數(shù)量;步驟3)將步驟2)獲得的n個(gè)子圖與數(shù)據(jù)中心內(nèi)n個(gè)服務(wù)器進(jìn)行一對(duì)一映射。進(jìn)一步:所述的步驟1)中社交網(wǎng)絡(luò)模型構(gòu)建方法為:將社交網(wǎng)絡(luò)中每個(gè)用戶作為超圖g的一個(gè)頂點(diǎn),超圖g的每條邊e由兩個(gè)以上頂點(diǎn)表示,稱為超邊,每次交互中所有參與交互的用戶共同構(gòu)成一條超邊,多用戶參與的交互是社交網(wǎng)絡(luò)中最常見的一種交互,超邊能夠刻畫這種類型的交互。每條超邊ei附帶一個(gè)權(quán)值ri,表示超邊ei對(duì)應(yīng)交互所產(chǎn)生的通信量。進(jìn)一步:所述步驟2)中,計(jì)算超圖劃分割值(cut)的方法為:首先,計(jì)算超邊割值,當(dāng)一個(gè)超邊ei被分割成ti個(gè)部分,則ei的割值為:cut(ei)=(ti-1)ri(1)表示分割后的通信量為分割前的(ti-1)倍。然后,對(duì)超圖劃分的割值等于所有被分割的超邊的割值之和,即進(jìn)一步:所述步驟2)的多層劃分過程為:步驟201)對(duì)原超圖g逐步粗化,粗化方法是從原超圖中每次找出最大獨(dú)立超邊集,將屬于超邊集的一組頂點(diǎn)合并在一起,每個(gè)合并后的頂點(diǎn)集都將作為第一層粗化圖中的一個(gè)新的頂點(diǎn),從而得到一個(gè)規(guī)模較原超圖更小的超圖g1。再利用同樣的方法對(duì)超圖g1粗化,依次粗化下去直到得到超圖gm,其頂點(diǎn)數(shù)量為n的整數(shù)倍,比如100倍;步驟202)對(duì)步驟201)得到的超圖gm進(jìn)行劃分,先劃分成2個(gè)部分,找出所有劃分中割值最小的,且保證劃分后的負(fù)載均衡小于預(yù)先設(shè)定的閾值lb*,再按照同樣的方法依次對(duì)上一輪劃分的子圖進(jìn)一步劃分,直到最終超圖gm被劃分成n個(gè)子超圖為止;步驟203)對(duì)步驟202)得到的劃分結(jié)果去粗化,根據(jù)步驟201)中粗化過程逐層超圖頂點(diǎn)間的映射關(guān)系,做反向的映射,將步驟202)得到的n個(gè)子超圖逐層反向映射為原超圖g的n個(gè)子超圖。進(jìn)一步:所述步驟2)中,負(fù)載均衡lb的計(jì)算方法為:其中n為劃分的子圖數(shù)目,li和li分別表示子圖pi和pj的負(fù)載,分別用pi和pj包含的用戶數(shù)衡量。進(jìn)一步:步驟3)中,數(shù)據(jù)中心內(nèi)通信量的計(jì)算方法為:首先,對(duì)于任一對(duì)服務(wù)器x和y,從服務(wù)器x到y(tǒng)的訪問請(qǐng)求所產(chǎn)生的通信量rxy為:其中sx表示服務(wù)器x上存儲(chǔ)的用戶集合,ru表示用戶u的訪問通信量,函數(shù)c(u,y)用來判斷服務(wù)器y上是否存儲(chǔ)用戶u的好友的數(shù)據(jù),若是,則其值取1,否則為0。其次,對(duì)于如圖3所示的樹型數(shù)據(jù)中心拓?fù)浣Y(jié)構(gòu),根據(jù)服務(wù)器x和y所處位置確定二者之間通信距離dxy,即經(jīng)過的交換機(jī)數(shù)目:其中pac表示接入層交換機(jī)接入服務(wù)器的端口數(shù),pag表示匯聚層接入下層的端口數(shù)。最后,數(shù)據(jù)中心內(nèi)通信量t可表示為:其中n表示數(shù)據(jù)中心內(nèi)服務(wù)器的集合。進(jìn)一步:如圖5所示實(shí)例,步驟3)的映射過程如下:步驟301)根據(jù)步驟2)所劃分出的n個(gè)子圖,計(jì)算每一對(duì)子圖間通信量,計(jì)算公式如下:其中pi和pj表示任一對(duì)子圖,ru和rv分別表示用戶u和v的訪問通信量,函數(shù)c(u,pj)和c(v,pi)分別表示用戶u的好友是否在子圖pj內(nèi)和用戶v的好友是否在子圖pi內(nèi),若是,則其值取1,否則為0;步驟302)將所有子圖對(duì)根據(jù)步驟301)計(jì)算結(jié)果進(jìn)行非升序排列,并依次放入隊(duì)列q,;步驟303)初始化未分配服務(wù)器指針empty指向第一臺(tái)服務(wù)器,開始第一輪子圖到服務(wù)器的映射,進(jìn)入步驟304);步驟304)如果是第一輪映射,則從隊(duì)列q依次取出m個(gè)子圖對(duì),其中m滿足選中的子圖對(duì)中子圖的數(shù)目記為[m],使得[m]=pac或pac+1,將[m]個(gè)子圖從empty指向的服務(wù)器開始依次映射,并更新empty指針。如果不是第一輪分配則進(jìn)入步驟305);步驟305)從隊(duì)列q中找出所有子圖對(duì),滿足子圖對(duì)中的一個(gè)子圖已經(jīng)映射到和empty所指服務(wù)器同屬一個(gè)接入交換機(jī)的服務(wù)器,從這些子圖對(duì)中找出對(duì)應(yīng)通信量最小的子圖對(duì),并將該子圖對(duì)中未映射的子圖與empty所指服務(wù)器做映射;步驟306)若隊(duì)列q不為空,則進(jìn)入步驟304),否則,完成子圖到服務(wù)器映射。為了驗(yàn)證本方法的有效性,通過仿真實(shí)驗(yàn)提供一具體實(shí)施例。實(shí)驗(yàn)做如下設(shè)置:社交網(wǎng)絡(luò)數(shù)據(jù)集由網(wǎng)絡(luò)爬蟲程序?qū)acebook抓取獲得,該數(shù)據(jù)集包含124.1萬用戶注冊(cè)名、好友列表和用戶發(fā)帖等。數(shù)據(jù)中心內(nèi)包含1152臺(tái)服務(wù)器即n=1152,服務(wù)器按照樹型結(jié)構(gòu)組織網(wǎng)絡(luò)拓?fù)洌渲薪尤雽?、匯聚層和核心層交換機(jī)的數(shù)目分別為96、12和4,pac=12,pag=8。哈希方法將用戶數(shù)據(jù)隨機(jī)存儲(chǔ)在服務(wù)器上,是目前主要采用的方法,在仿真實(shí)驗(yàn)中實(shí)現(xiàn)了該方法用于比較。除此以外,metis作為經(jīng)典的圖分割算法,可用于實(shí)現(xiàn)對(duì)社交網(wǎng)絡(luò)的劃分,在實(shí)驗(yàn)中一并實(shí)現(xiàn)并與我們所提方法進(jìn)行比較,實(shí)驗(yàn)結(jié)果如圖6和圖7所示。圖6對(duì)比三種方法在不同負(fù)載均衡閾值下所產(chǎn)生的通信量,為了便于觀察,此處用哈希方法的通信量對(duì)所有方法的通信量進(jìn)行規(guī)格化。隨著閾值的增加,閾值對(duì)放置的限制逐漸放松,使得通信量隨之下降,哈希方法由于未做任何優(yōu)化,故通信量始終最高且不受閾值影響,我們所提方法可以獲得更低的通信量。圖7對(duì)比了在不同服務(wù)器規(guī)模下的三種方法產(chǎn)生的通信量,實(shí)驗(yàn)結(jié)果表明無論在何種服務(wù)器規(guī)模下我們所提方法均可以獲得更低的通信量,原因在于超圖劃分可以更好地將經(jīng)常交互的用戶劃分在一個(gè)子圖,而子圖到服務(wù)器匹配則可以將通信量較大的子圖對(duì)映射到彼此更近的服務(wù)器上。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,并不用于限制本發(fā)明,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
:的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變型,這些改進(jìn)和變型也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁12當(dāng)前第1頁12