專利名稱:一種分布式海量數(shù)據(jù)排重方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息處理技術(shù)領(lǐng)域,尤其涉及一種分布式海量數(shù)據(jù)排重方法及系統(tǒng)。
背景技術(shù):
隨著信息技術(shù)的不斷發(fā)展,各領(lǐng)域的信息存儲(chǔ)量也在不斷增大,因此在好多領(lǐng)域中都需要對(duì)大量的數(shù)據(jù)進(jìn)行排查重復(fù)數(shù)據(jù)的工作。例如,在搜索引擎中需要判斷哪些網(wǎng)頁(yè)在系統(tǒng)中已經(jīng)有收錄,或者在電信行業(yè)中,需要對(duì)上億條電信話單進(jìn)行排重工作,以免重復(fù)收費(fèi)等等。以網(wǎng)絡(luò)信息技術(shù)為例,在網(wǎng)絡(luò)爬蟲里,判斷一個(gè)網(wǎng)址是否被訪問過,最常用的方法就是通過數(shù)據(jù)庫(kù)來排重,現(xiàn)有的數(shù)據(jù)庫(kù)排重方法是根據(jù)網(wǎng)址URL計(jì)算相應(yīng)的HASH值,再將計(jì)算出的HASH值存于數(shù)據(jù)庫(kù)中,存儲(chǔ)的同時(shí)將此HASH值的字段設(shè)置索引或者主鍵,于是當(dāng)網(wǎng)絡(luò)爬蟲每抓取一個(gè)URL地址前,搜索數(shù)據(jù)庫(kù)中是否有此URL地址相應(yīng)的HASH值即可判斷此URL地址在該數(shù)據(jù)庫(kù)中是否已經(jīng)存儲(chǔ)過。這種書庫(kù)排重方法雖然方便,但是效率較低,并且會(huì)造成數(shù)據(jù)庫(kù)服務(wù)器壓力過大。為解決上述數(shù)據(jù)庫(kù)排重方法效率低的問題,現(xiàn)有的另一種方法就是用內(nèi)存進(jìn)行排重。內(nèi)存排重方法是預(yù)先將已訪問過的URL地址的HASH值列表以哈希表的方式在服務(wù)器內(nèi)存中存儲(chǔ),則當(dāng)網(wǎng)絡(luò)爬蟲每抓取一個(gè)URL地址前,可根據(jù)此URL地址的HASH值判斷此URL 地址的HASH值在服務(wù)器內(nèi)存中的哈希表中是否已經(jīng)存在。此方法比數(shù)據(jù)庫(kù)排重方法的數(shù)據(jù)排重效率高很多,但是當(dāng)需要排重的數(shù)據(jù)量比較大時(shí),就需要更大的內(nèi)存存儲(chǔ)空間,因?yàn)橛霉1砻看鎯?chǔ)一億個(gè)URL地址信息,大概需要2G的內(nèi)存空間,存貯幾十億個(gè)URL地址可能需要上百GB的內(nèi)存,這么大的內(nèi)存需求量在一般的服務(wù)器上是無法實(shí)現(xiàn)的。綜上所述,需要一種不僅具有較高的數(shù)據(jù)排重效率,還能節(jié)省單臺(tái)服務(wù)器內(nèi)存使用量的數(shù)據(jù)排重方法及系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種分布式海量數(shù)據(jù)排重方法及系統(tǒng)以解決現(xiàn)有的數(shù)據(jù)排重技術(shù)效率低或?qū)Ψ?wù)器內(nèi)存需求量過大的問題。本發(fā)明提供的分布式海量數(shù)據(jù)排重方法及系統(tǒng)能夠高效地進(jìn)行海量數(shù)據(jù)的排重。為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種分布式海量數(shù)據(jù)排重方法,執(zhí)行前預(yù)先將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,記錄每個(gè)所述HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;所述分布式海量數(shù)據(jù)排重方法包括以下步驟步驟一接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中” 的數(shù)據(jù)判斷請(qǐng)求;步驟二 接受所述數(shù)據(jù)判斷請(qǐng)求并計(jì)算所述當(dāng)前數(shù)據(jù)的HASH值;步驟三根據(jù)所述預(yù)先記錄的所述HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系,確定所述當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址;步驟四比對(duì)判斷所述當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器中是否有當(dāng)前數(shù)據(jù)的HASH值,若是,則濾去所述當(dāng)前數(shù)據(jù),同時(shí)返回“當(dāng)前數(shù)據(jù)已存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,結(jié)束流程;否則,繼續(xù)執(zhí)行步驟五;步驟五返回“當(dāng)前數(shù)據(jù)不存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,并請(qǐng)求更新所述當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合;步驟六接受所述更新請(qǐng)求,將所述當(dāng)前數(shù)據(jù)的HASH值插入至所述當(dāng)前數(shù)據(jù)的 FASH值應(yīng)該所處的HASH值集合中,同時(shí)將所述當(dāng)前數(shù)據(jù)的HASH值插入至所述數(shù)據(jù)庫(kù)中,結(jié)束流程。所述預(yù)先將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,包括以HASH值的起始16進(jìn)制字符為劃分依據(jù),將所述數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的HASH值平分成2n個(gè)HASH值集合;將所述2n個(gè)HASH值集合隨機(jī)分為M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中;其中,所述η為自然數(shù),所述M為已有節(jié)點(diǎn)服務(wù)器的數(shù)量,M取值為大于等于2的正整數(shù)。當(dāng)所述2η能被所述M整除時(shí),將所述2η個(gè)HASH值集合隨機(jī)平分為M等份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中。當(dāng)所述2n不能被所述M整除時(shí),將所述2n個(gè)HASH值集合隨機(jī)分為M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中,其中,所述Μ個(gè)節(jié)點(diǎn)服務(wù)器中有m個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中分別存儲(chǔ)了(N2+N1)個(gè)HASH值集合,有(M-Nl)個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中分別存儲(chǔ)了 N2個(gè)HASH 值集合,所述m為2n除以M所得的余數(shù),所述N2為2n除以M所得的商。上述方法中,每增加一個(gè)所述節(jié)點(diǎn)服務(wù)器,從所述每個(gè)已有節(jié)點(diǎn)服務(wù)器的內(nèi)存中轉(zhuǎn)移規(guī)定數(shù)量的HASH值集合至所述增加的節(jié)點(diǎn)服務(wù)器的內(nèi)存中存儲(chǔ),并更新各節(jié)點(diǎn)服務(wù)器和各HASH值集合之間的映射關(guān)系記錄。本發(fā)明還提供一種分布式海量數(shù)據(jù)排重系統(tǒng),包括初始化模塊、系統(tǒng)排重接口模塊、分布式服務(wù)器節(jié)點(diǎn)控制模塊、分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊、數(shù)據(jù)排重比對(duì)模塊、排重集合更新模塊、數(shù)據(jù)庫(kù)和至少兩個(gè)節(jié)點(diǎn)服務(wù)器;所述初始化模塊根據(jù)所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊發(fā)出的初始化數(shù)據(jù)請(qǐng)求,預(yù)先將所述數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中,并通知所述分布式服務(wù)器節(jié)點(diǎn)控制模塊預(yù)先記錄每個(gè)所述HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;所述系統(tǒng)排重接口模塊用于接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求,向用戶返回該數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果; 所述分布式服務(wù)器節(jié)點(diǎn)控制模塊用于記錄所述數(shù)據(jù)庫(kù)中的每個(gè)HASH值集合和存放該HASH 值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;當(dāng)收到所述系統(tǒng)排重接口模塊提出的所述數(shù)據(jù)判斷請(qǐng)求時(shí),所述分布式服務(wù)器節(jié)點(diǎn)控制模塊計(jì)算所述當(dāng)前數(shù)據(jù)的FASH值,并根據(jù)所述預(yù)先記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器的地址之間的映射關(guān)系確定所述當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址,將所述數(shù)據(jù)判斷請(qǐng)求、當(dāng)前數(shù)據(jù)的 HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址發(fā)送給所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊;所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊用于接受所述數(shù)據(jù)判斷請(qǐng)求,向所述數(shù)據(jù)排重比對(duì)模塊發(fā)送FASH值比對(duì)請(qǐng)求、所述當(dāng)前數(shù)據(jù)的FASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址;所述數(shù)據(jù)排重比對(duì)模塊接受所述FASH值比對(duì)請(qǐng)求,比對(duì)判斷所述當(dāng)前數(shù)據(jù)的FASH值是否已存在當(dāng)前指明地址的節(jié)點(diǎn)服務(wù)器內(nèi)存的相應(yīng)HASH值集合中;若是,則順序通過所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊和所述分布式服務(wù)器節(jié)點(diǎn)控制模塊向所述系統(tǒng)排重接口模塊返回“當(dāng)前數(shù)據(jù)已存在”的所述數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果; 否則,順序通過所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊和所述分布式服務(wù)器節(jié)點(diǎn)控制模塊向所述系統(tǒng)排重接口模塊返回“當(dāng)前數(shù)據(jù)不存在”的所述數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果,同時(shí)向所述排重集合更新模塊發(fā)出HASH值集合更新請(qǐng)求;所述排重集合更新模塊用于接受所述 FASH值集合更新請(qǐng)求,將所述當(dāng)前數(shù)據(jù)的HASH值插入至所述當(dāng)前指明地址的節(jié)點(diǎn)服務(wù)器內(nèi)存的相應(yīng)HASH值集合中,同時(shí)將該HASH值插入至所述數(shù)據(jù)庫(kù)中。所述初始化模塊根據(jù)所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊發(fā)出的初始化數(shù)據(jù)請(qǐng)求,預(yù)先讀取所述數(shù)據(jù)庫(kù)中的所有HASH值,并以HASH值的起始16進(jìn)制字符為劃分依據(jù),將所述數(shù)據(jù)庫(kù)中的所有HASH值分成2n個(gè)HASH值集合,并將所述2n個(gè)HASH值集合隨機(jī)分成 M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中;其中,η為自然數(shù),所述M為已有節(jié)點(diǎn)服務(wù)器的數(shù)量,M取值為大于等于2的正整數(shù)。所述分布式服務(wù)器節(jié)點(diǎn)控制模塊還用于配置各分布式服務(wù)器的連接信息,管理各分布式服務(wù)接口并監(jiān)控各節(jié)點(diǎn)服務(wù)器狀態(tài)。每增加一個(gè)所述節(jié)點(diǎn)服務(wù)器,所述分布式服務(wù)器節(jié)點(diǎn)控制模塊從所述每個(gè)已有節(jié)點(diǎn)服務(wù)器的內(nèi)存中轉(zhuǎn)移規(guī)定數(shù)量的HASH值集合至所述新增的節(jié)點(diǎn)服務(wù)器的內(nèi)存中存儲(chǔ), 并更新各節(jié)點(diǎn)服務(wù)器和各HASH值集合之間的映射關(guān)系記錄。本發(fā)明提供的分布式海量數(shù)據(jù)排重方法或系統(tǒng)中,對(duì)每臺(tái)已有節(jié)點(diǎn)服務(wù)器采用內(nèi)存排重的方式進(jìn)行數(shù)據(jù)排重,保留了現(xiàn)有的內(nèi)存排重方法排重效率高的優(yōu)點(diǎn),此外,本發(fā)明提供的方案采用多臺(tái)服務(wù)器分布式部署,通過網(wǎng)絡(luò)將多臺(tái)服務(wù)器的內(nèi)存集群,解決了現(xiàn)有技術(shù)中單臺(tái)服務(wù)器的內(nèi)存容量有限的問題,可以進(jìn)行高效的海量存儲(chǔ),降低了單臺(tái)服務(wù)器的硬件投入。此外,本發(fā)明還提供了增加服務(wù)器數(shù)量時(shí)的解決辦法,在不改變現(xiàn)有存儲(chǔ)規(guī)則的情況下服務(wù)器的數(shù)量可以靈活添加,操作簡(jiǎn)單,可實(shí)施性強(qiáng)。
圖1是本發(fā)明實(shí)施例提供的分布式海量數(shù)據(jù)排重的初始化設(shè)置方法流程圖;圖2是增加節(jié)點(diǎn)服務(wù)器時(shí)已有的各節(jié)點(diǎn)服務(wù)器中的FASH值集合轉(zhuǎn)移存儲(chǔ)示意圖;圖3是本發(fā)明實(shí)施例提供的一種分布式海量數(shù)據(jù)排重方法流程圖;圖4是本發(fā)明實(shí)施例提供的一種分布式海量數(shù)據(jù)排重系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為解決現(xiàn)有技術(shù)中存在的問題,本發(fā)明實(shí)施例提供的分布式海量數(shù)據(jù)排重方法采用分布式的方案,將海量數(shù)據(jù)的哈希表平均分配到若干臺(tái)服務(wù)器的內(nèi)存中進(jìn)行存儲(chǔ),即通過網(wǎng)絡(luò)組成一個(gè)大的服務(wù)器內(nèi)存集群,以滿足海量哈希表數(shù)據(jù)的內(nèi)存緩存需求。以下結(jié)合附圖具體說明本發(fā)明實(shí)施例。在進(jìn)行海量數(shù)據(jù)排重之前,需要對(duì)數(shù)據(jù)庫(kù)中的海量數(shù)據(jù)的HASH值和用于存儲(chǔ)海量數(shù)據(jù)的節(jié)點(diǎn)服務(wù)器進(jìn)行初始化設(shè)置,即將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的HASH值以哈希表的形式存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中。圖1為本發(fā)明實(shí)施例提供的海量數(shù)據(jù)排重的初始化設(shè)置方法流程圖,該初始化流程具體包括以下步驟 Sl 1 以HASH值的起始16進(jìn)制字符為劃分依據(jù),將數(shù)據(jù)庫(kù)中海量數(shù)據(jù)的HASH值平分成2n個(gè)HASH值集合(η為自然數(shù))。其中,不同的HASH值集合由不同的起始16進(jìn)制字符來區(qū)分。S12 將2nfHASH值集合隨機(jī)分成M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中。其中, M為已有的節(jié)點(diǎn)服務(wù)器的數(shù)量,M取值為大于等于2的整數(shù)。S13:記錄每個(gè)HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系。上述步驟S12中,若將2n表示為2n = MXN2+N1時(shí)(0彡附< Μ),即附為2η除以M所得的余數(shù),所述Ν2為2η除以M所得的商,則該步驟具體包括將2η個(gè)HASH值集合隨機(jī)分成M份,其中有m份中分別存包含(N2+N1)個(gè)HASH值集合,有(M-Nl)份中分別包含 N2個(gè)HASH值集合。S卩當(dāng)2n能被M整除時(shí)(Ni = 0時(shí)),將2n個(gè)HASH值集合隨機(jī)平分為 M等份后分別存入M個(gè)已有節(jié)點(diǎn)服務(wù)器的內(nèi)存中;當(dāng)2n不能被M整除,將2n除以M后剩余的 HASH值集合分到盡可能多的節(jié)點(diǎn)服務(wù)器內(nèi)存中存儲(chǔ),以盡量減少任意兩個(gè)節(jié)點(diǎn)服務(wù)器中存儲(chǔ)的HASH值集合數(shù)的差值。每增加一個(gè)節(jié)點(diǎn)服務(wù)器時(shí),只需從現(xiàn)有的每個(gè)節(jié)點(diǎn)服務(wù)器轉(zhuǎn)移一定比例的HASH 值集合至新增加的服務(wù)器并更新各節(jié)點(diǎn)服務(wù)器和各HASH值集合之間的映射關(guān)系記錄,這種方法有效的避免了原服務(wù)器中的HASH值集合的重整,操作更為簡(jiǎn)便。圖2所示為增加節(jié)點(diǎn)服務(wù)器時(shí)已有的各節(jié)點(diǎn)服務(wù)器中的FASH值集合轉(zhuǎn)移存儲(chǔ)示意圖,圖2中,不同圖案的小方塊代表不同節(jié)點(diǎn)服務(wù)器中存儲(chǔ)的HASH值集合。以圖2中的2臺(tái)節(jié)點(diǎn)服務(wù)器增加為3臺(tái)節(jié)點(diǎn)服務(wù)器為例,原來的2臺(tái)節(jié)點(diǎn)服務(wù)器分別存儲(chǔ)了 MfHASH值集合,當(dāng)增加為3臺(tái)節(jié)點(diǎn)服務(wù)器時(shí),從原來的2臺(tái)節(jié)點(diǎn)服務(wù)器中各取出8個(gè)HASH值集合存儲(chǔ)到新加的第三臺(tái)節(jié)點(diǎn)服務(wù)器中。當(dāng)數(shù)據(jù)庫(kù)中的海量數(shù)據(jù)的HASH值和節(jié)點(diǎn)服務(wù)器之間進(jìn)行了初始化設(shè)置后,即可采用該種系統(tǒng)進(jìn)行海量數(shù)據(jù)排重。圖3所示為本發(fā)明實(shí)施例提供的一種分布式海量數(shù)據(jù)排重方法流程圖,該方法包括以下步驟S31 接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求。S32 接受數(shù)據(jù)判斷請(qǐng)求并計(jì)算當(dāng)前數(shù)據(jù)的HASH值。S33:根據(jù)已記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系,找出當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址。S34:比對(duì)判斷當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器中是否有當(dāng)前數(shù)據(jù)的HASH值,若是,則濾去當(dāng)前數(shù)據(jù),同時(shí)返回“當(dāng)前數(shù)據(jù)已存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,結(jié)束流程,否則,繼續(xù)執(zhí)行S35。具體判斷時(shí),根據(jù)當(dāng)前數(shù)據(jù)的FASH值的起始16進(jìn)制字符可以獲知該HASH值應(yīng)該位于哪個(gè)HASH值集合中,然后根據(jù)已記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系去相應(yīng)的節(jié)點(diǎn)服務(wù)器中比對(duì)判斷是否存在該HASH 值。
S35:返回“當(dāng)前數(shù)據(jù)不存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,并請(qǐng)求更新當(dāng)前節(jié)點(diǎn)服務(wù)器內(nèi)存中的FASH值集合。S36 接受FASH值集合更新請(qǐng)求將當(dāng)前數(shù)據(jù)的HASH值插入至當(dāng)前節(jié)點(diǎn)服務(wù)器內(nèi)存中的相應(yīng)HASH值集合中,同時(shí)將此HASH值插入至數(shù)據(jù)庫(kù)中,結(jié)束流程。圖4所示為本發(fā)明實(shí)施例提供的一種分布式海量數(shù)據(jù)排重系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)包括數(shù)據(jù)庫(kù)1、初始化模塊3、系統(tǒng)排重接口模塊4、分布式服務(wù)器節(jié)點(diǎn)控制模塊5、分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6、數(shù)據(jù)排重比對(duì)模塊7、排重集合更新模塊8和至少兩個(gè)節(jié)點(diǎn)服務(wù)器2。其中,初始化模塊3根據(jù)分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6發(fā)出的初始化數(shù)據(jù)請(qǐng)求,根據(jù)相應(yīng)的參數(shù)從數(shù)據(jù)庫(kù)中讀取相應(yīng)的HASH列表存于節(jié)點(diǎn)服務(wù)器內(nèi)存的HASH表中。具體實(shí)施情況為初始化模塊3根據(jù)分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6發(fā)出的初始化數(shù)據(jù)請(qǐng)求,讀取數(shù)據(jù)庫(kù)中的HASH值,并以HASH值的起始16進(jìn)制字符為劃分依據(jù),將數(shù)據(jù)庫(kù)中海量數(shù)據(jù)的HASH值分成2n個(gè)HASH值集合(η為自然數(shù)),隨后將2η個(gè)HASH值集合隨機(jī)分成M 份后分別存入分布式服務(wù)器節(jié)點(diǎn)控制模塊5所管理的M個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,并通知分布式服務(wù)器節(jié)點(diǎn)控制模塊5記錄每個(gè)HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系。系統(tǒng)排重接口模塊4用于接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求,并向用戶返回該數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果。分布式服務(wù)器節(jié)點(diǎn)控制模塊5用于記錄數(shù)據(jù)庫(kù)中的每個(gè)HASH值集合和存放該 HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系。當(dāng)收到系統(tǒng)排重接口模塊4提出的“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求時(shí),分布式服務(wù)器節(jié)點(diǎn)控制模塊5計(jì)算當(dāng)前數(shù)據(jù)的FASH值,并根據(jù)已記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系,將數(shù)據(jù)判斷請(qǐng)求、當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址發(fā)送給分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6。此外,分布式服務(wù)器節(jié)點(diǎn)控制模塊5還用于配置各分布式服務(wù)器的連接信息,管理各分布式服務(wù)接口并監(jiān)控各節(jié)點(diǎn)服務(wù)器狀態(tài)。分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6用于接受數(shù)據(jù)判斷請(qǐng)求,向數(shù)據(jù)排重比對(duì)模塊 7發(fā)送當(dāng)前數(shù)據(jù)的FASH值、當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址以及FASH值比對(duì)請(qǐng)求。數(shù)據(jù)排重比對(duì)模塊7根據(jù)分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6提出的FASH值比對(duì)請(qǐng)求,判斷當(dāng)前數(shù)據(jù)的FASH值是否已存在相應(yīng)的節(jié)點(diǎn)服務(wù)器內(nèi)存的相應(yīng)HASH值集合中;若是,則濾去當(dāng)前數(shù)據(jù),同時(shí)順序通過分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6和分布式服務(wù)器節(jié)點(diǎn)控制模塊5向系統(tǒng)排重接口模塊4返回“當(dāng)前數(shù)據(jù)已存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果;否則,順序通過分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊6和分布式服務(wù)器節(jié)點(diǎn)控制模塊5向系統(tǒng)排重接口模塊4返回“當(dāng)前數(shù)據(jù)不存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,同時(shí)向排重集合更新模塊 8發(fā)出HASH值集合更新請(qǐng)求。排重集合更新模塊8用于接受FASH值集合更新請(qǐng)求將當(dāng)前數(shù)據(jù)的HASH值插入至當(dāng)前節(jié)點(diǎn)服務(wù)器內(nèi)存中的相應(yīng)HASH值集合中,同時(shí)將此HASH值插入至HASH值數(shù)據(jù)庫(kù)中。當(dāng)需要增加節(jié)點(diǎn)服務(wù)器時(shí),分布式服務(wù)器節(jié)點(diǎn)控制模塊5從已有的每個(gè)節(jié)點(diǎn)服務(wù)器中轉(zhuǎn)移一定比例的HASH值集合至新的節(jié)點(diǎn)服務(wù)器中存儲(chǔ),并更新各節(jié)點(diǎn)服務(wù)器和各 HASH值集合之間的映射關(guān)系記錄,無需將原來的所有節(jié)點(diǎn)服務(wù)器的HASH值集合重整后再重分,操作簡(jiǎn)單。本發(fā)明實(shí)施例所提供的分布式海量數(shù)據(jù)排重方法或系統(tǒng)中,每臺(tái)服務(wù)器采用內(nèi)存排重的方式進(jìn)行數(shù)據(jù)排重,保留了現(xiàn)有的內(nèi)存排重方法排重效率高地優(yōu)點(diǎn),此外,本發(fā)明提供的方案采用多臺(tái)服務(wù)器分布式部署,通過網(wǎng)絡(luò)將多臺(tái)服務(wù)器的內(nèi)存集群,解決了現(xiàn)有技術(shù)中單臺(tái)服務(wù)器的內(nèi)存容量有限的問題,可以進(jìn)行高效的海量存儲(chǔ),降低了單臺(tái)服務(wù)器的硬件投入。而且提供的增加服務(wù)器數(shù)量時(shí)的解決辦法,在不改變現(xiàn)有存儲(chǔ)規(guī)則的情況下服務(wù)器的數(shù)量可以靈活添加,操作簡(jiǎn)單,可實(shí)施性強(qiáng)。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種分布式海量數(shù)據(jù)排重方法,其特征在于,預(yù)先將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH 值分為若干個(gè)HASH值集合并存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,記錄每個(gè)所述HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;所述分布式海量數(shù)據(jù)排重方法包括以下步驟步驟一接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求;步驟二 接受所述數(shù)據(jù)判斷請(qǐng)求并計(jì)算所述當(dāng)前數(shù)據(jù)的HASH值;步驟三根據(jù)所述預(yù)先記錄的所述HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系,確定所述當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址;步驟四比對(duì)判斷所述當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器中是否有當(dāng)前數(shù)據(jù)的HASH值,若是,則濾去所述當(dāng)前數(shù)據(jù),同時(shí)返回“當(dāng)前數(shù)據(jù)已存在” 的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,結(jié)束流程;否則,繼續(xù)執(zhí)行步驟五;步驟五返回“當(dāng)前數(shù)據(jù)不存在”的數(shù)據(jù)判斷請(qǐng)求執(zhí)行結(jié)果,并請(qǐng)求更新所述當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合;步驟六接受所述更新請(qǐng)求,將所述當(dāng)前數(shù)據(jù)的HASH值插入至所述當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合中,同時(shí)將所述當(dāng)前數(shù)據(jù)的HASH值插入至所述數(shù)據(jù)庫(kù)中,結(jié)束流程。
2.如權(quán)利要求1所述的一種分布式海量數(shù)據(jù)排重方法,其特征在于,所述預(yù)先將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,包括以HASH值的起始16進(jìn)制字符為劃分依據(jù),將所述數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的HASH值平分成 2n個(gè)HASH值集合;將所述2n個(gè)HASH值集合隨機(jī)分為M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中;其中,所述η為自然數(shù),所述M為已有節(jié)點(diǎn)服務(wù)器的數(shù)量,M取值為大于等于2的正整數(shù)。
3.如權(quán)利要求2所述的一種分布式海量數(shù)據(jù)排重方法,其特征在于,當(dāng)所述2η能被所述M整除時(shí),將所述2η個(gè)HASH值集合隨機(jī)平分為M等份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中。
4.如權(quán)利要求2所述的一種分布式海量數(shù)據(jù)排重方法,其特征在于,當(dāng)所述2n不能被所述M整除時(shí),將所述2n個(gè)HASH值集合隨機(jī)分為M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中,其中,所述M個(gè)節(jié)點(diǎn)服務(wù)器中有m個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中分別存儲(chǔ)了(N2+N1)個(gè)HASH 值集合,有(M-Nl)個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中分別存儲(chǔ)了 N2個(gè)HASH值集合,所述m為2"除以M所得的余數(shù),所述N2為2n除以M所得的商。
5.如權(quán)利要求1至4任一項(xiàng)所述的一種分布式海量數(shù)據(jù)排重方法,其特征在于,每增加一個(gè)所述節(jié)點(diǎn)服務(wù)器,從所述每個(gè)已有節(jié)點(diǎn)服務(wù)器的內(nèi)存中轉(zhuǎn)移規(guī)定數(shù)量的HASH值集合至所述增加的節(jié)點(diǎn)服務(wù)器的內(nèi)存中存儲(chǔ),并更新各節(jié)點(diǎn)服務(wù)器和各HASH值集合之間的映射關(guān)系記錄。
6.一種分布式海量數(shù)據(jù)排重系統(tǒng),其特征在于,該系統(tǒng)包括初始化模塊、系統(tǒng)排重接口模塊、分布式服務(wù)器節(jié)點(diǎn)控制模塊、分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊、數(shù)據(jù)排重比對(duì)模塊、排重集合更新模塊、數(shù)據(jù)庫(kù)和至少兩個(gè)節(jié)點(diǎn)服務(wù)器;所述初始化模塊根據(jù)所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊發(fā)出的初始化數(shù)據(jù)請(qǐng)求,預(yù)先將所述數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的哈希HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中,并通知所述分布式服務(wù)器節(jié)點(diǎn)控制模塊預(yù)先記錄每個(gè)所述HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;所述系統(tǒng)排重接口模塊用于接收用戶輸入的當(dāng)前數(shù)據(jù)并發(fā)出“判斷當(dāng)前數(shù)據(jù)是否已存在于數(shù)據(jù)庫(kù)中”的數(shù)據(jù)判斷請(qǐng)求,向用戶返回該數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果;所述分布式服務(wù)器節(jié)點(diǎn)控制模塊用于記錄所述數(shù)據(jù)庫(kù)中的每個(gè)HASH值集合和存放該HASH值集合的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;當(dāng)收到所述系統(tǒng)排重接口模塊提出的所述數(shù)據(jù)判斷請(qǐng)求時(shí),所述分布式服務(wù)器節(jié)點(diǎn)控制模塊計(jì)算所述當(dāng)前數(shù)據(jù)的FASH值,并根據(jù)所述預(yù)先記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器的地址之間的映射關(guān)系確定所述當(dāng)前數(shù)據(jù)的 HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址,將所述數(shù)據(jù)判斷請(qǐng)求、當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址發(fā)送給所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊;所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊用于接受所述數(shù)據(jù)判斷請(qǐng)求,向所述數(shù)據(jù)排重比對(duì)模塊發(fā)送FASH值比對(duì)請(qǐng)求、所述當(dāng)前數(shù)據(jù)的FASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址;所述數(shù)據(jù)排重比對(duì)模塊接受所述FASH值比對(duì)請(qǐng)求,比對(duì)判斷所述當(dāng)前數(shù)據(jù)的FASH值是否已存在當(dāng)前指明地址的節(jié)點(diǎn)服務(wù)器內(nèi)存的相應(yīng)HASH值集合中;若是,則順序通過所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊和所述分布式服務(wù)器節(jié)點(diǎn)控制模塊向所述系統(tǒng)排重接口模塊返回“當(dāng)前數(shù)據(jù)已存在”的所述數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果;否則,順序通過所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊和所述分布式服務(wù)器節(jié)點(diǎn)控制模塊向所述系統(tǒng)排重接口模塊返回“當(dāng)前數(shù)據(jù)不存在”的所述數(shù)據(jù)判斷請(qǐng)求的執(zhí)行結(jié)果,同時(shí)向所述排重集合更新模塊發(fā)出 HASH值集合更新請(qǐng)求;所述排重集合更新模塊用于接受所述FASH值集合更新請(qǐng)求,將所述當(dāng)前數(shù)據(jù)的HASH 值插入至所述當(dāng)前指明地址的節(jié)點(diǎn)服務(wù)器內(nèi)存的相應(yīng)HASH值集合中,同時(shí)將該HASH值插入至所述數(shù)據(jù)庫(kù)中。
7.如權(quán)利要求6所述的一種分布式海量數(shù)據(jù)排重系統(tǒng),其特征在于,所述初始化模塊根據(jù)所述分布式服務(wù)器節(jié)點(diǎn)應(yīng)用接口模塊發(fā)出的初始化數(shù)據(jù)請(qǐng)求,預(yù)先讀取所述數(shù)據(jù)庫(kù)中的所有HASH值,并以HASH值的起始16進(jìn)制字符為劃分依據(jù),將所述數(shù)據(jù)庫(kù)中的所有HASH值分成 2n個(gè)HASH值集合,并將所述2n個(gè)HASH值集合隨機(jī)分成M份后分別存入M個(gè)節(jié)點(diǎn)服務(wù)器的內(nèi)存中;其中,η為自然數(shù),所述M為已有節(jié)點(diǎn)服務(wù)器的數(shù)量,M取值為大于等于2的正整數(shù)。
8.如權(quán)利要求6或7所述的一種分布式海量數(shù)據(jù)排重系統(tǒng),其特征在于,所述分布式服務(wù)器節(jié)點(diǎn)控制模塊還用于配置各分布式服務(wù)器的連接信息,管理各分布式服務(wù)接口并監(jiān)控各節(jié)點(diǎn)服務(wù)器狀態(tài)。
9.如權(quán)利要求8所述的一種分布式海量數(shù)據(jù)排重系統(tǒng),其特征在于,每增加一個(gè)所述節(jié)點(diǎn)服務(wù)器,所述分布式服務(wù)器節(jié)點(diǎn)控制模塊從所述每個(gè)已有節(jié)點(diǎn)服務(wù)器的內(nèi)存中轉(zhuǎn)移規(guī)定數(shù)量的HASH值集合至所述新增的節(jié)點(diǎn)服務(wù)器的內(nèi)存中存儲(chǔ),并更新各節(jié)點(diǎn)服務(wù)器和各 HASH值集合之間的映射關(guān)系記錄。
全文摘要
本發(fā)明提供的分布式海量數(shù)據(jù)排重方法中,預(yù)先將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的HASH值分為若干個(gè)HASH值集合并存儲(chǔ)到至少兩個(gè)節(jié)點(diǎn)服務(wù)器內(nèi)存中,記錄每個(gè)所述HASH值集合及其存放的節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系;當(dāng)接收到請(qǐng)求判斷當(dāng)前數(shù)據(jù)數(shù)據(jù)是否已存在的判斷請(qǐng)求時(shí),先計(jì)算當(dāng)前數(shù)據(jù)的HASH值,根據(jù)預(yù)先記錄的HASH值集合和節(jié)點(diǎn)服務(wù)器地址之間的映射關(guān)系確定當(dāng)前數(shù)據(jù)的HASH值及其應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器地址;隨后比對(duì)判斷當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合所對(duì)應(yīng)的節(jié)點(diǎn)服務(wù)器中是否有當(dāng)前數(shù)據(jù)的HASH值,若是,則返回“當(dāng)前數(shù)據(jù)已存在”的執(zhí)行結(jié)果并結(jié)束流程;否則返回“當(dāng)前數(shù)據(jù)不存在”的執(zhí)行結(jié)果,并更新當(dāng)前數(shù)據(jù)的FASH值應(yīng)該所處的HASH值集合。
文檔編號(hào)G06F17/30GK102298633SQ20111026486
公開日2011年12月28日 申請(qǐng)日期2011年9月8日 優(yōu)先權(quán)日2011年9月8日
發(fā)明者欒江霞, 羅佳, 陳志飛 申請(qǐng)人:廈門市美亞柏科信息股份有限公司