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