專利名稱::數(shù)據(jù)分布統(tǒng)計方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及電數(shù)字?jǐn)?shù)據(jù)處理領(lǐng)域,特別涉及數(shù)據(jù)分布統(tǒng)計方法。技術(shù)背景隨著網(wǎng)絡(luò)技術(shù)和應(yīng)用的飛速發(fā)展,大量用戶通過網(wǎng)絡(luò)訪問海量資源,統(tǒng)計資源的點擊率和訪問量等參數(shù)需要進行復(fù)雜運算,占用資源。
發(fā)明內(nèi)容本發(fā)明目的在于提供一種數(shù)據(jù)分布統(tǒng)計方法,提高數(shù)據(jù)統(tǒng)計效率。本發(fā)明提供一種數(shù)據(jù)分布統(tǒng)計方法,包括將訪問記錄分布定位的步驟;根據(jù)記錄建立索引的步驟;通過索引進行統(tǒng)計的步驟。優(yōu)選地,上述記錄包括鍵和至少一屬性,鍵的取值為鍵值,屬性的取值為屬性值。優(yōu)選地,上述將訪問記錄分布定位的步驟包括根據(jù)記錄的屬性值將記錄定位到區(qū)域中的步驟;根據(jù)記錄的鍵值將記錄定位到區(qū)域的簇中的步驟;將記錄定位到簇的節(jié)點中的步驟。優(yōu)選地,上述根據(jù)記錄建立索引的步驟包括按照至少一屬性分別建立子索引,將屬性值相同的記錄的4建值列入子索引中的步驟。優(yōu)選地,上述按照至少一屬性分別建立子索引,將屬性值相同的記錄的鍵值列入子索引中的步驟包括查找對應(yīng)屬性的子索引的步驟;將訪問記錄的鍵值加入已存在的對應(yīng)屬性子索引中的步驟;建立與訪問記錄屬性對應(yīng)的子索引,將訪問記錄的鍵值加入子索引中的步驟。優(yōu)選地,上述才艮據(jù)記錄建立索引的步驟包括建立主索引,將子索引中記錄的4建值及其對應(yīng)計數(shù)記入主索引中的步驟。優(yōu)選地,上述建立主索引,將子索引中的鍵值及其對應(yīng)計數(shù)記入主索引中的步驟包括建立主索引;設(shè)主索引指針指向主索引頭部,設(shè)子索引指針指向子索引頭部;判斷當(dāng)前主索引指針和子索引指針分別指向的鍵值是否相等,相等則主索引中鍵值的計數(shù)加l;判斷子索引指針指向的鍵值是否小于主索引指針指向的4定值,如果小于則將子索引指針后移一位指向下一記錄;如果大于則將主索引指針后移一位指向下一鍵值;判斷子索引指針是否指向子索引尾部,尚未指向尾部則指針后移一位指向下一鍵值,返回判斷當(dāng)前主索引指針和子索引指針分別指向的鍵值是否相等,循環(huán)直到子索引指針指向子索引尾部。優(yōu)選地,上述通過索引進行統(tǒng)計的步驟是指讀取主索引,取得4定值及其對應(yīng)計數(shù)作為統(tǒng)計結(jié)果。優(yōu)選地,上述數(shù)據(jù)分布統(tǒng)計方法在節(jié)點中統(tǒng)計訪問記錄,在簇中整合屬于簇的所有節(jié)點的統(tǒng)計結(jié)果,在區(qū)域中匯總屬于區(qū)域的所有簇的統(tǒng)計結(jié)果。本發(fā)明提供的數(shù)據(jù)分布統(tǒng)計方法,以一個有100個節(jié)點,數(shù)據(jù)量為1000億的群集為例,設(shè)其記錄的鍵值數(shù)量為io億,鍵值使用整數(shù)表示,每個鍵值占用4個字節(jié),平均分布在100個節(jié)點中,每個節(jié)點的所有子索引大致占用40M(40億*4/100)存儲空間。設(shè)每個節(jié)點有5個子索引,則每個子索引只存儲8M的數(shù)據(jù),而主索引就集合了80M(40億*8/100)數(shù)據(jù)。當(dāng)需要對所有記錄進行統(tǒng)計時,采用本發(fā)明可以在1秒內(nèi)的時間內(nèi)處理完畢,即不占用大量資源,也無需集中運算,大大提高統(tǒng)計效率。圖l是本發(fā)明第一實施例的三層次結(jié)構(gòu)示意圖;圖2是本發(fā)明第二實施例子索引示意圖;圖3是本發(fā)明第二實施例主索引示意圖;圖4是本發(fā)明第二實施例建立子索引的流程示意圖;圖5是本發(fā)明第二實施例建立主索引的流程示意圖。本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。具體實施方式本發(fā)明提出第一實施例,本實施例提出將網(wǎng)絡(luò)上的服務(wù)器或計算機在邏輯上分為區(qū)域、簇和節(jié)點三層次結(jié)構(gòu)。如圖1所示,將網(wǎng)絡(luò)上進行具體數(shù)據(jù)存儲和/或處理的單位稱為節(jié)點,服務(wù)器、計算機、手持設(shè)備甚至虛擬主機都可以作為一個節(jié)點;多個節(jié)點組成一個蔟,多個簇組成一個區(qū)域,節(jié)點、蔟和區(qū)域都是虛擬概念而非局限于實體。區(qū)域、簇和節(jié)點的組織邏輯為每個簇可以有簇和節(jié)點兩種子節(jié)點,每個節(jié)點都有一定的存儲和/或處理能力,數(shù)據(jù)量超出存儲和/或處理能力可能引起不穩(wěn)定或速度降低。每當(dāng)某個節(jié)點數(shù)據(jù)量達到其存儲和/或處理能力極限的時候,就將一個節(jié)點分裂為多個節(jié)點,而原節(jié)點就轉(zhuǎn)化為一個新簇,新簇依然隸屬于原簇。本實施例根據(jù)用戶對各站點或網(wǎng)絡(luò)資源的每次訪問都形成一條記錄,每條記錄都有一個唯一標(biāo)示該記錄的鍵。參照表l,每條記錄都有多個屬性,每個屬性都有若干取值,屬性的取值為屬性值;每條記錄都有一個鍵,鍵的取值稱為鍵值。<table>tableseeoriginaldocumentpage6</column></row><table>表l當(dāng)用戶訪問某站點或網(wǎng)絡(luò)資源,形成一條訪問記錄時,本實施例先將記錄分布定位,在需要進行統(tǒng)計時,根據(jù)記錄建立索引,通過索引進行統(tǒng)計。其中對記錄的分布定位的步驟包括步驟SIO,根據(jù)記錄的4盍值進行路由,將記錄定位到某個具體的區(qū)域;步驟S12,根據(jù)記錄的鍵值,將記錄定位到上述區(qū)域的某個具體的簇中;步驟S14,簇根據(jù)自己預(yù)設(shè)的策略將記錄定位到具體的節(jié)點。對于鍵值相同的多筆記錄,本實施例將其都定位在一組節(jié)點上,多筆記錄之間互不重疊,這是保證可以進行并行分布計算的前提。本實施例定義主索引及子索引兩種索引,其中主索引記載至少一鍵值及該鍵值對應(yīng)的記錄數(shù);而子索引是按照屬性分別建立的,每個子索引僅記載相同屬性值的所有記錄的鍵值,主索引及子索引都按照鍵值的順序排序。在需要統(tǒng)計記錄數(shù)量時,本實施例的建立索引的步驟包括步驟S20,按照至少一屬性分別建立子索引,將所有記錄都列入子索引中;步驟S22,建立主索引,將子索引中記錄的4建#_記入主索引中。根據(jù)索引進行統(tǒng)計的步驟是對建立好的主索引,讀取其中的鍵值和相應(yīng)的計數(shù),形成統(tǒng)計結(jié)果?;谏弦粚嵤├?,本發(fā)明提出第二實施例,實現(xiàn)數(shù)據(jù)的統(tǒng)計。參照圖1示出的區(qū)域、簇和節(jié)點三層次結(jié)構(gòu),一個區(qū)域包括4個簇,每個簇包括兩個節(jié)點。以一個站點的訪問記錄數(shù)據(jù)為例,每筆訪問記錄都有用戶編號、性別、職業(yè)、年齡、愛好等多個屬性,每個屬性都分別取值,這些取值可以是在預(yù)設(shè)值中選取,也可以是由用戶提供;選取用戶編號作為鍵。參見表2,示出多筆記錄的示例<table>tableseeoriginaldocumentpage7</column></row><table>表2根據(jù)上述三層結(jié)構(gòu),本實施例提出分布定位方法包括步驟S30,按照一個或多個屬性將記錄入不同的區(qū)域中,例如按照職業(yè)來劃分,將職業(yè)為學(xué)生的記錄劃分到第一區(qū)域,將職業(yè)為職員的記錄劃分到第二區(qū)域,依此類推;步驟S32,根據(jù)記錄中鍵值模4的結(jié)果對應(yīng)定位到某個具體的簇中;步驟S34,根據(jù)記錄中鍵值模2的結(jié)果,將記錄定位到某個具體的節(jié)點中;上述模運算是根據(jù)簇和節(jié)點的數(shù)量而定,不同的簇可以擁有不同個數(shù)的節(jié)點,每個簇記錄自己擁有的節(jié)點數(shù)量,當(dāng)節(jié)點數(shù)變化時,修改該節(jié)點數(shù)量,以便根據(jù)節(jié)點數(shù)量單獨進行求模運算。上述分布定位也可采用其他算法。在需要統(tǒng)計記錄數(shù)量時,結(jié)合表2所示的訪問記錄示例,本實施例提出才艮據(jù)用戶性別這一屬性分別建立子索引,本實施例的統(tǒng)計方法包括步驟S40,讀取訪問記錄;步驟S42,將訪問記錄按照鍵值排序;步驟S44,將這些訪問記錄的鍵值分別列入男性子索引和女性子索引中,形成如圖2所示的子索引;建立主索引,將子索引所有鍵值列入主索引,將鍵值對應(yīng)計數(shù)分別記載在該鍵值對應(yīng)的計數(shù)欄,形成如圖3所示的主索引;步驟S44,根據(jù)主索引,得出所有鍵值及其對應(yīng)的計數(shù),該數(shù)字即訪問該站點的訪問量,流程結(jié)束。上述步驟S42,將訪問記錄排序是為了方便將新增的記錄并入子索引中,也就是新增記錄和原有子索引可以歸并排序。上述步驟S44,鍵值對應(yīng)計數(shù)是指該鍵值在子索引中出現(xiàn)的次數(shù)。上述步驟S44建立子索引的具體做法如圖4所示,包括步驟S440,查找是否已有與當(dāng)前訪問記錄的屬性對應(yīng)的子索引存在;如果已存在則進行步驟S441,否則進行步驟S442;步驟S441,將當(dāng)前訪問記錄的鍵值加入已存在的子索引中;步驟S442,建立與當(dāng)前訪問記錄的屬性對應(yīng)的子索引,將當(dāng)前訪問記錄的鍵值加入該子索引中;步驟S443,判斷是否完成對所有訪問記錄的遍歷,如果未完成則繼續(xù)遍歷訪問記錄,重復(fù)上述過程;如果已完成則建立子索引的流程結(jié)束。上述步驟S44將子索引所有鍵值列入主索引,將鍵值對應(yīng)計數(shù)分別記載在該鍵值對應(yīng)的計數(shù)欄的具體做法如圖5所示,包括步驟S444,打開主索引文件;步驟S445,打開子索引文件;步驟S446,設(shè)置主索引指針,使其指向主索引文件頭部;設(shè)置子索引指針,使其指向子索引文件的頭部;步驟S447,判斷當(dāng)前主索引指針和子索^1指針指向的兩筆4建值是否相等,如果相等則主索引該4定值的計數(shù)加1,轉(zhuǎn)步驟S449;如果兩筆記錄的4建值不相等則進行步驟S448;步驟S448,判斷子索引指針指向的鍵值是否小于主索引指針指向的鍵值,如果小于則將子索引指針后移一位指向下一筆鍵值,轉(zhuǎn)到步驟S"7;如果大于則將主索引指針后移一位指向下一筆4建值,轉(zhuǎn)到步驟S447;步驟S449,判斷子索引指針是否指向子索引文件尾部,如果尚未指向尾部則指針后移一位指向下一筆鍵值,進行步驟S447;否則說明完成對當(dāng)前子索引的遍歷,流程結(jié)束。通過上述遍歷過程,可分別對各子索引完成遍歷和統(tǒng)計,分別將各子索引中的記錄數(shù)統(tǒng)計到主索引中。本實施例可以先在每個節(jié)點內(nèi)部統(tǒng)計自身的訪問記錄,然后在簇中整合屬于該簇的所有節(jié)點的統(tǒng)計結(jié)果,最后在區(qū)域中匯總所有簇的統(tǒng)計結(jié)果,以此實現(xiàn)統(tǒng)計的分布運算,分擔(dān)運算壓力,提高統(tǒng)計效率。在區(qū)域、簇和節(jié)點中都可以設(shè)置數(shù)據(jù)代理服務(wù)器,數(shù)據(jù)在節(jié)點上進行計算,然后通過蔟層層上報到區(qū)域。例如某一個簇有兩個節(jié)點,該簇收到2個節(jié)點分別上報的數(shù)據(jù)后,將鍵值相同的統(tǒng)計數(shù)據(jù)求和并上報到區(qū)域。當(dāng)需要查詢訪問記錄統(tǒng)計結(jié)果時,直4妄連4妄到相應(yīng)的區(qū)i或進4亍查詢。當(dāng)然,本實施例也可以用愛好、性別等多種屬性詳細(xì)統(tǒng)計多種用戶分別訪問某資源的次數(shù),原理與統(tǒng)計訪問量類似,故不贅述。以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的
技術(shù)領(lǐng)域:
,均同理包括在本發(fā)明的專利保護范圍內(nèi)。權(quán)利要求1.一種數(shù)據(jù)分布統(tǒng)計方法,包括將訪問記錄分布定位的步驟;根據(jù)記錄建立索引的步驟;通過索引進行統(tǒng)計的步驟。2.根據(jù)權(quán)利要求l所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,所述記錄包括4建和至少一屬性,所述鍵的取值為鍵值,所述屬性的取值為屬性值。3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,所述將訪問記錄分布定位的步驟包括根據(jù)記錄的屬性值將記錄定位到區(qū)域中的步驟;根據(jù)記錄的鍵值將記錄定位到所述區(qū)域的簇中的步驟;將記錄定位到所述簇的節(jié)點中的步驟。4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,根據(jù)記錄建立索引的步驟包括按照至少一屬性分別建立子索引,將屬性值相同的記錄的鍵值列入所述子索引中的步驟。5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,按照至少一屬性分別建立子索引,將屬性值相同的記錄的4建#_列入所述子索引中的步驟包括查找對應(yīng)屬性的子索引的步驟;將訪問記錄的鍵值加入已存在的對應(yīng)屬性子索引中的步驟;建立與訪問記錄屬性對應(yīng)的子索引,將訪問記錄的4定值加入所迷子索引中的步驟。6.根據(jù)權(quán)利要求2所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,根據(jù)記錄建立索引的步驟包括建立主索引,將子索引中記錄的鍵值及其對應(yīng)計數(shù)記入主索引中的步驟。7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,所述建立主索引,將子索引中的鍵值及其對應(yīng)計數(shù)記入主索引中的步驟包括建立主索引;設(shè)主索引指針指向主索引頭部,設(shè)子索引指針指向子索引頭部;判斷當(dāng)前主索引指針和子索引指針分別指向的4建值是否相等,相等則主索引中所述鍵值的計數(shù)加1;判斷子索引指針指向的鍵值是否小于主索引指針指向的鍵值,如果小于則將子索引指針后移一位指向下一記錄;如果大于則將主索引指針后移一位指向下一鍵值;判斷子索引指針是否指向子索引尾部,尚未指向尾部則指針后移一位指向下一鍵值,返回判斷當(dāng)前主索引指針和子索引指針分別指向的鍵值是否相等,循環(huán)直到子索引指針指向子索引尾部。8.根據(jù)權(quán)利要求2所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,通過索引進行統(tǒng)計的步驟是指讀取主索引,取得4建值及其對應(yīng)計數(shù)作為統(tǒng)計結(jié)果。9.根據(jù)權(quán)利要求1至8任意一項所述的數(shù)據(jù)分布統(tǒng)計方法,其特征在于,在節(jié)點中統(tǒng)計訪問記錄,在簇中整合屬于所述簇的所有節(jié)點的統(tǒng)計結(jié)果,在所述區(qū)域中匯總屬于所述區(qū)域的所有簇的統(tǒng)計結(jié)果。全文摘要本發(fā)明提供一種數(shù)據(jù)分布統(tǒng)計方法,包括將訪問記錄分布定位的步驟;根據(jù)記錄建立索引的步驟;通過索引進行統(tǒng)計的步驟。本發(fā)明提供的數(shù)據(jù)分布統(tǒng)計方法,以一個有100個節(jié)點,數(shù)據(jù)量為1000億的群集為例,設(shè)其記錄的鍵值數(shù)量為10億,鍵值使用整數(shù)表示,每個鍵值占用4個字節(jié),平均分布在100個節(jié)點中,每個節(jié)點的所有子索引大致占用40M(40億*4/100)存儲空間。設(shè)每個節(jié)點有5個子索引,則每個子索引只存儲8M的數(shù)據(jù),而主索引就集合了80M(40億*8/100)數(shù)據(jù)。當(dāng)需要對所有記錄進行統(tǒng)計時,采用本發(fā)明可以在1秒內(nèi)的時間內(nèi)處理完畢,既不占用大量資源,也無需集中運算,大大提高統(tǒng)計效率。文檔編號G06F17/30GK101231649SQ200710307139公開日2008年7月30日申請日期2007年12月27日優(yōu)先權(quán)日2007年12月27日發(fā)明者雙吳申請人:騰訊科技(深圳)有限公司