国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      文件合并方法和裝置制造方法

      文檔序號:6518721閱讀:199來源:國知局
      文件合并方法和裝置制造方法【專利摘要】本發(fā)明實施例提供一種文件合并方法和裝置,包括:根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū);對于每一個節(jié)點,確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點的緩存中,根據(jù)各第一文件中存儲的各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū);將具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。通過對節(jié)點內(nèi)區(qū)間進行分區(qū),經(jīng)過一次數(shù)據(jù)合并,將具有相同鍵值的數(shù)據(jù)存儲在同一分區(qū)內(nèi)。在查詢時,根據(jù)鍵值確定數(shù)據(jù)所在的分區(qū),然后掃描分區(qū)內(nèi)各文件,由于分區(qū)內(nèi)的文件個數(shù)較少,只需要從較少的文件中進行數(shù)據(jù)篩選,從而達到讀性能提升?!緦@f明】文件合并方法和裝置【
      技術(shù)領(lǐng)域
      】[0001]本發(fā)明實施例涉及數(shù)據(jù)通訊技術(shù),尤其涉及一種文件合并方法和裝置。【
      背景技術(shù)
      】[0002]隨著互聯(lián)網(wǎng)不斷的發(fā)展,互聯(lián)網(wǎng)應(yīng)用的規(guī)模不斷壯大,這些應(yīng)用依賴的數(shù)據(jù)庫存儲面臨越來越大的挑戰(zhàn)。傳統(tǒng)的關(guān)系型數(shù)據(jù)已經(jīng)很難滿足海量數(shù)據(jù)的存儲需求,非關(guān)系型數(shù)據(jù)庫NoSql應(yīng)用而生,例如:Google開發(fā)的BigTable,Facebook的Cassandra都是非關(guān)系型數(shù)據(jù)庫。通常非關(guān)系型數(shù)據(jù)庫是一個分布式系統(tǒng),它所存儲的數(shù)據(jù)分布在各個節(jié)點上,目前大多非關(guān)系型數(shù)據(jù)庫都是通過一致性哈希(hash)來實現(xiàn),所謂一致性hash,是將hash函數(shù)所有的hash值組成一個首尾相連接的環(huán)(最大值和最小值相連接),而非關(guān)系型數(shù)據(jù)庫集群中的每一個節(jié)點負責這個環(huán)的一部分,同樣的,對需要存儲的數(shù)據(jù)也進行哈希,通過哈希值就可以找到負責數(shù)據(jù)存儲的節(jié)點,這樣就達到了數(shù)據(jù)存儲和節(jié)點的對應(yīng)。[0003]就每個節(jié)點的數(shù)據(jù)存儲物理存儲結(jié)構(gòu)而言,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫有著固定的塊,可以反復進行數(shù)據(jù)的讀寫,而非關(guān)系型數(shù)據(jù)庫為了保證并發(fā)寫性能,采用了磁盤隨機寫模式,以磁盤上的一個邏輯數(shù)據(jù)文件為最小的數(shù)據(jù)存儲單元,不刪除舊數(shù)據(jù),而是通過時間戳新舊確定最新的數(shù)據(jù),這種不同于關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)持久化方式是當前許多非關(guān)系型數(shù)據(jù)庫所采用的。圖1為非關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存放示意圖,如圖1所示,在寫數(shù)據(jù)時,首先將數(shù)據(jù)寫到內(nèi)存表(memorytable)中,當內(nèi)存表中的數(shù)據(jù)滿時,將內(nèi)存表中的待寫數(shù)據(jù)通過flush方式寫到磁盤成為一個文件組,該文件組的數(shù)據(jù)輸出格式可以是有序字符串表(SSTable,SortedStringTable)的。每個文件組包括一組文件,各個文件分別用于存儲用戶數(shù)據(jù)、文件的索引信息、鍵值的哈希算法、靜態(tài)統(tǒng)計文件。如圖1所示,將內(nèi)存表(待寫)中的數(shù)據(jù)正在寫入到文件組η中。相同用戶的數(shù)據(jù)可能分散在多個不同的文件中,隨著文件的不斷增多,每一次的數(shù)據(jù)讀都需要從多個文件中進行數(shù)據(jù)篩選,通過對比相同記錄的時間戳新舊,才能決定需要返回哪一條記錄給客戶。在這樣的場景下,時間越久,數(shù)據(jù)文件越多,那整個數(shù)據(jù)庫的讀性能會有呈指數(shù)級下降。因此在許多非關(guān)系型數(shù)據(jù)庫產(chǎn)品中已經(jīng)提出了并實現(xiàn)了數(shù)據(jù)合并的方法,利用鍵值相同,將數(shù)據(jù)由分布在零散的數(shù)據(jù)文件中通過合并比較(MAP-REDUCE)整合到一個大的數(shù)據(jù)文件中,通過多次合并比較,將文件數(shù)量減少,以此來提升數(shù)據(jù)庫的讀性能。現(xiàn)有技術(shù)中,即使通過文件合并的方法,節(jié)點上存儲的文件的個數(shù)仍然較大,每一次的數(shù)據(jù)讀都需要從多個文件中進行數(shù)據(jù)篩選,整個數(shù)據(jù)庫的讀性能仍然不高。【
      發(fā)明內(nèi)容】[0004]本發(fā)明實施例提供一種文件合并方法和裝置,能夠提升文件的讀性能。[0005]本發(fā)明第一方面提供一種文件合并方法,包括:[0006]根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),所述各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);[0007]對于每一個節(jié)點,確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中,所述各第一文件未進行過合并,所述各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0008]根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū);[0009]根據(jù)所述各鍵值對所述各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0010]在本發(fā)明第一方面的第一種可能的實現(xiàn)方式中,所述根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū),包括:[0011]根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算所述各鍵值對應(yīng)的哈希值;[0012]根據(jù)所述各鍵值對應(yīng)的哈希值確定所述各鍵值所屬的目標分區(qū)。[0013]在本發(fā)明第一方面的第二種可能的實現(xiàn)方式中,根據(jù)所述各鍵值對所述各目標文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)之后,還包括:[0014]確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,所述各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0015]根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值對所述各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在所述目標分區(qū)的第三文件中。[0016]結(jié)合本發(fā)明第一方面以及第一方面的第一種和第二種可能的實現(xiàn)方式,在本發(fā)明第一方面的第三種可能的實現(xiàn)方式中,根據(jù)所述各鍵值對所述各目標文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)之后,還包括:[0017]當接收到數(shù)據(jù)查詢請求時,根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;[0018]根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū),根據(jù)所述待查詢數(shù)據(jù)的鍵值掃描所述待查詢分區(qū)內(nèi)的所有文件,獲取所述待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。[0019]在本發(fā)明第一方面的第四種可能的實現(xiàn)方式中,根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū),包括:[0020]計算所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值;[0021]根據(jù)所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū)。[0022]在本發(fā)明第一方面的第五種可能的實現(xiàn)方式中,所述確定所述節(jié)點滿足第一觸發(fā)條件,包括:[0023]判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);[0024]若是,則確定所述節(jié)點滿足第一觸發(fā)條件。[0025]在本發(fā)明第一方面的第六種可能的實現(xiàn)方式中,所述確定所述節(jié)點滿足第一觸發(fā)條件,包括:[0026]判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);[0027]若是,根據(jù)所述各第一文件的大小確定所述各第一文件是否滿足第一合并條件;[0028]若是,則確定所述節(jié)點滿足第一觸發(fā)條件。[0029]在本發(fā)明第一方面的第七種可能的實現(xiàn)方式中,所述確定所述目標分區(qū)滿足第二觸發(fā)條件,包括:[0030]判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);[0031]若是,則確定所述目標分區(qū)滿足第二觸發(fā)條件。[0032]在本發(fā)明第一方面的第八種可能的實現(xiàn)方式中,所述確定所述目標分區(qū)滿足第二觸發(fā)條件,包括:[0033]判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);[0034]若是,根據(jù)所述各第二文件的大小確定所述各第二文件是否滿足第二合并條件;[0035]若滿足,則確定所述目標分區(qū)滿足第二觸發(fā)條件。[0036]在本發(fā)明第一方面的第九種可能的實現(xiàn)方式中,所述根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),包括:[0037]如果所述集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將所述集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示所述集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示所述集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于O的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);[0038]對于所述各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)所述分區(qū)步長S對所述節(jié)點進行分區(qū),得到|rl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈|rl-r2|/S-1,η為正整數(shù),所述每個區(qū)間為所述節(jié)點的一個分區(qū),rl表示所述節(jié)點所負責的區(qū)間的最小哈希值,r2表示所述節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于O的正整數(shù),且r2大于rl,rl-r2表示取rl和r2差值的絕對值。[0039]本發(fā)明第二方面提供一種文件合并裝置,包括:[0040]分區(qū)模塊,用于根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),所述各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);[0041]文件讀取模塊,用于對于每一個節(jié)點,確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中,所述各第一文件未進行過合并,所述各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0042]分區(qū)確定模塊,用于根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū);[0043]文件合并模塊,用于根據(jù)所述各鍵值對所述各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0044]在本發(fā)明第二方面的第一種可能的實現(xiàn)方式中,所述分區(qū)確定模塊具體用于:[0045]根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算所述各鍵值對應(yīng)的哈希值;[0046]根據(jù)所述各鍵值對應(yīng)的哈希值確定所述各鍵值所屬的目標分區(qū)。[0047]在本發(fā)明第二方面的第二種可能的實現(xiàn)方式中,所述讀取模塊還用于:[0048]確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,所述各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0049]所述文件合并模塊,還用于根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值對所述各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在所述目標分區(qū)的第三文件中。[0050]結(jié)合本發(fā)明第二方面以及第二方面的第一種和第二種可能的實現(xiàn)方式,在本發(fā)明第二方面的第三種可能的實現(xiàn)方式中,還包括:接收模塊、鍵值獲取模塊和查詢模塊;[0051]所述接收模塊,用于接收數(shù)據(jù)查詢請求;[0052]所述鍵值獲取模塊,用于當所述接收模塊接收到數(shù)據(jù)查詢請求時,根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;[0053]所述分區(qū)確定模塊還用于:根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū);[0054]所述查詢模塊,用于根據(jù)所述待查詢數(shù)據(jù)的鍵值掃描所述待查詢分區(qū)內(nèi)的所有文件,獲取所述待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。[0055]在本發(fā)明第二方面的第四種可能的實現(xiàn)方式中,所述分區(qū)確定模塊具體用于:[0056]計算所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值;[0057]根據(jù)所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū)。[0058]在本發(fā)明第二方面的第五種可能的實現(xiàn)方式中,所述文件讀取模塊具體用于:[0059]判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);[0060]若是,則確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中。[0061]在本發(fā)明第二方面的第六種可能的實現(xiàn)方式中,所述文件讀取模塊具體用于:[0062]判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);[0063]若是,根據(jù)所述各第一文件的大小確定所述各第一文件是否滿足第一合并條件;[0064]若是,則確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中。[0065]在本發(fā)明第二方面的第六種可能的實現(xiàn)方式中,所述文件讀取模塊具體用于:[0066]判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);[0067]若是,則確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。[0068]在本發(fā)明第二方面的第六種可能的實現(xiàn)方式中,所述文件讀取模塊具體用于:[0069]判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);[0070]若是,根據(jù)所述各第二文件的大小確定所述各第二文件是否滿足第二合并條件;[0071]若滿足,則確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。[0072]在本發(fā)明第二方面的第九種可能的實現(xiàn)方式中,所述分區(qū)模塊具體用于:[0073]如果所述集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將所述集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示所述集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示所述集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于0的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);[0074]對于所述各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)所述分區(qū)步長S對所述節(jié)點進行分區(qū),得到|rl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈|rl-r2|/S-1,n為正整數(shù),所述每個區(qū)間為所述節(jié)點的一個分區(qū),rl表示所述節(jié)點所負責的區(qū)間的最小哈希值,r2表示所述節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于0的正整數(shù),且r2大于rl,rl-r2表示取rl和r2差值的絕對值。[0075]本發(fā)明實施例的文件合并方法和裝置,通過對節(jié)點所負責的區(qū)間進行分區(qū),當滿足第一觸發(fā)條件時,觸發(fā)節(jié)點上的未經(jīng)過合并的文件進行一次合并,經(jīng)過一次數(shù)據(jù)合并后,將具有相同鍵值的用戶數(shù)據(jù)存儲在同一分區(qū)內(nèi),使數(shù)據(jù)存放的粒度降低。在查詢時,首先根據(jù)鍵值確定數(shù)據(jù)所在的分區(qū),在所屬分區(qū)掃描各數(shù)據(jù)文件查詢需要的數(shù)據(jù),由于分區(qū)內(nèi)文件個數(shù)較少,只需要從較少的文件中進行數(shù)據(jù)篩選,從而提升讀性能?!緦@綀D】【附圖說明】[0076]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0077]圖1為非關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存放示意圖;[0078]圖2為集群分布系統(tǒng)圖;[0079]圖3為現(xiàn)有技術(shù)中一種文件合并的示意圖;[0080]圖4為本發(fā)明文件合并方法實施例一的流程圖;[0081]圖5為本發(fā)明文件合并方法實施例二的流程圖;[0082]圖6為本實施例所適用的節(jié)點分區(qū)示意圖;[0083]圖7為本發(fā)明文件合并裝置實施例一的結(jié)構(gòu)示意圖;[0084]圖8為本發(fā)明文件合并裝置實施例二的結(jié)構(gòu)示意圖;[0085]圖9為本發(fā)明文件合并裝置實施例三的結(jié)構(gòu)示意圖?!揪唧w實施方式】[0086]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。[0087]在介紹本發(fā)明各實施例之前,先簡單介紹一下本發(fā)明各實施例所適用的一個場景,本發(fā)明各實施例主要適用于非關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫可以通過一致性哈希來實現(xiàn),所謂一致性hash,是將hash函數(shù)所有的hash值組成一個首尾相連接的哈希環(huán),該哈希環(huán)的第一個為最大值,最后一個為最小值,即最大值和最小值相連接,該哈希環(huán)上的所有哈希值組成了非關(guān)系型數(shù)據(jù)庫集群系統(tǒng)的區(qū)間,而集群中的每一個節(jié)點負責該哈希環(huán)的部分區(qū)間,即每個節(jié)點上存儲的數(shù)據(jù)對應(yīng)的哈希值必須落在該節(jié)點負責的區(qū)間內(nèi),同樣的,對需要存儲的數(shù)據(jù)也進行哈希,通過哈希值就可以找到負責數(shù)據(jù)存儲的節(jié)點,這樣就達到了數(shù)據(jù)存儲和節(jié)點的對應(yīng)。[0088]圖2為集群分布系統(tǒng)圖,如圖2所示,圖2中的集群分布系統(tǒng)共有四個節(jié)點,圖中哈希環(huán)上分布的四個大圓圈分別表示四個節(jié)點,這四個大圓圈為虛線箭頭所指向的圓圈,四個節(jié)點分別為節(jié)點1、節(jié)點2、節(jié)點3、節(jié)點4,每個節(jié)點對應(yīng)一個緩存和磁盤,各個大圓圈之間的小圓圈表示用戶數(shù)據(jù)。集群系統(tǒng)所負責的哈希值的區(qū)間為(0,2~32],按照順時針方向,節(jié)點4和節(jié)點I之間的區(qū)間為節(jié)點I負責的區(qū)間,節(jié)點I和節(jié)點2之間的區(qū)間為節(jié)點2負責的區(qū)間,節(jié)點2和節(jié)點3之間的區(qū)間為節(jié)點3負責的區(qū)間,節(jié)點3和節(jié)點4之間的區(qū)間為節(jié)點4所負責的區(qū)間。各個節(jié)點負責的區(qū)間的哈希值不同,當每個節(jié)點接收到數(shù)據(jù)時,先獲取數(shù)據(jù)所對應(yīng)的用戶的鍵值信息,計算鍵值所對應(yīng)的哈希值,判斷鍵值對應(yīng)的哈希值落在哪個節(jié)點所負責的區(qū)間內(nèi),將用戶數(shù)據(jù)存儲在該節(jié)點上。圖2只是舉例進行說明,集群系統(tǒng)的節(jié)點可能會更多。[0089]圖4為本發(fā)明文件合并方法實施例一的流程圖,本實施例提供的方法由各個節(jié)點分別執(zhí)行,每個節(jié)點都按照本實施例提供的方法對自己節(jié)點上的文件按照如下方法進行合并,如圖4所示,本實施例提供的文件合并方法包括以下步驟:[0090]步驟101、根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū)。[0091]對節(jié)點所負責的區(qū)間進行分區(qū),是指按照一定的規(guī)則將節(jié)點所負責的區(qū)間劃分為更小的區(qū)間,劃分后的每個區(qū)間即為一個分區(qū),這個分區(qū)就是一個該區(qū)間的子區(qū)間,在本發(fā)明的各個實施例中,分區(qū)就是某個區(qū)間的子區(qū)間。本實施例提供的方法,通過對各節(jié)點所負責的區(qū)間進一步的劃分為更小的分區(qū),每個分區(qū)負責一個更小的區(qū)間,各分區(qū)與用于數(shù)據(jù)的鍵值——對應(yīng)。[0092]步驟102、對于每一個節(jié)點,確定該節(jié)點滿足第一觸發(fā)條件,從該節(jié)點的磁盤中讀取至少兩個第一文件至該節(jié)點對應(yīng)的緩存中,各第一文件未進行過合并,各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同。[0093]每個節(jié)點上有專門的模塊負責文件的合并,該模塊通過確定該節(jié)點上滿足第一觸發(fā)條件,當該節(jié)點滿足第一觸發(fā)條件時觸發(fā)文件合并任務(wù)。確定該節(jié)點是否滿足第一觸發(fā)條件,具體為,判斷該節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,Ml的取值為大于等于2的正整數(shù),若是,則確定節(jié)點滿足第一觸發(fā)條件。預設(shè)的第一文件合并個數(shù)例如為4,則當節(jié)點上的第一文件數(shù)達到4個時,就觸發(fā)文件的合并任務(wù),這里第一文件是指未進行過合并的文件,當該節(jié)點接收到用戶數(shù)據(jù)時,將用戶數(shù)據(jù)存儲到節(jié)點上的文件中,該節(jié)點上也存儲有一些已經(jīng)進行過合并的文件,如果節(jié)點上個各文件滿足該第一觸發(fā)條件,則觸發(fā)合并任務(wù)。[0094]當然,第一觸發(fā)條件還可以包括其他預設(shè)的條件,例如當該節(jié)點上的第一文件的個數(shù)到達預設(shè)的文件合并個數(shù),進一步根據(jù)各第一文件的大小確定各第一文件是否滿足第一合并條件;若是,則確定節(jié)點滿足第一觸發(fā)條件。這里,根據(jù)各第一文件的大小確定各第一文件是否滿足第一合并條件,具體為判斷各第一文件的大小差異滿足預設(shè)的閾值,若各第一文件的大小差異滿足預設(shè)的閾值,才觸發(fā)文件合并任務(wù),如果各第一合并文件大小差異很大,則不進行文件合并,具體通過一個例子來說明,如果有4個第一文件,分別用1、2、3、4表示,文件I大小為100M,文件2大小為200M,文件3大小為300M,文件4大小為50M,當讀取到文件I和文件2后,取文件I和文件2大小的平均值為150M,然后用平均值乘以最大加權(quán)因子和最小加權(quán)因子,通常情況下,最大加權(quán)因子為1.5,最小加權(quán)因子為0.5,本實施例中,平均值乘以最大加權(quán)因子和最小加權(quán)因子分別得到75M和225M,如果文件3的大小落在【75M,225M】區(qū)間內(nèi),則說明文件3的大小合適滿足合并條件,能夠與文件1、2進行合并,本實施例中文件3大小為300M超出了【75M,225M]區(qū)間,所以不滿足合并條件,然后可以用同樣的方法繼續(xù)比較文件4的大小,本實施例中文件4大小為50M,雖然沒有落在【75M,225M】區(qū)間內(nèi),但是由于文件4本身很小,即使合并也不會占用多少資源,因此,對于小文件可以不滿足上述區(qū)間,可以設(shè)置一個閾值,如果文件小于該閾值,則直接對文件進行合并,例如將閾值設(shè)置為50M。這里,指示舉了一個例子來說明如果判斷各文件大小差異是否滿足預設(shè)的閾值,當然也可以通過其他方法來判斷,這里不再一一列舉。[0095]步驟103、根據(jù)各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū)。[0096]讀取待合并的第一文件后,根據(jù)第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū),即判斷各用戶對應(yīng)的數(shù)據(jù)的鍵值落在哪個分區(qū)內(nèi)。根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū),具體為:首先,根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值;然后,根據(jù)各鍵值對應(yīng)的哈希值確定各鍵值所屬的目標分區(qū),不同的鍵值對應(yīng)的哈希值可能落在不同的分區(qū)內(nèi)。[0097]步驟104、根據(jù)各鍵值對各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0098]本步驟中,將各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,例如A用戶的數(shù)據(jù)分別存儲在文件1、文件2和文件3中,則從這三個文件中分別讀取A用戶的數(shù)據(jù),A用戶的數(shù)據(jù)在三個文件中的鍵值相同,則將A用戶的數(shù)據(jù)合并后存儲在目標分區(qū)內(nèi),目標分區(qū)是根據(jù)A用戶數(shù)據(jù)對應(yīng)的鍵值的哈希值確定的。在文件合并完成后,會將合并后的數(shù)據(jù)存儲在目標分區(qū)的第二文件中,例如存儲在目標分區(qū)A的第二文件中,每一個文件都會對應(yīng)一個靜態(tài)統(tǒng)計文件,靜態(tài)統(tǒng)計文件用于存儲有該文件相關(guān)的信息,例如數(shù)據(jù)寫入的時間,文件的大小等信息,本實施例中,通過將該第二文件與所屬目標分區(qū)的對應(yīng)關(guān)系保存到靜態(tài)統(tǒng)計文件中,后續(xù)當節(jié)點重新啟動的時候,根據(jù)靜態(tài)統(tǒng)計文件可以直接將該第二文件加載到該目標分區(qū)對應(yīng)的分區(qū)文件列表中,分區(qū)文件列表中記錄有該目標分區(qū)內(nèi)所有文件的信息,例如該目標分區(qū)內(nèi)的各文件分別位于磁盤上的存儲地址信息,當節(jié)點重新啟動時,根據(jù)靜態(tài)統(tǒng)計文件將目標分區(qū)內(nèi)的所有的文件都加載在該目標分區(qū)對應(yīng)的分區(qū)文件列表中,在進行數(shù)據(jù)查詢的時候,根據(jù)靜態(tài)統(tǒng)計文件中該第二文件與所屬目標分區(qū)的對應(yīng)關(guān)系,找到該分區(qū)文件列表,然后根據(jù)該分區(qū)文件列表從磁盤上讀取數(shù)據(jù)。[0099]需要說明的是,如果用戶A的數(shù)據(jù)只存儲在文件I中,在文件2和文件3中沒有存儲A用戶的數(shù)據(jù),這時,實際上在合并的過程中,對用戶A的數(shù)據(jù)來說,并沒有合并,只是將用戶A的數(shù)據(jù)按照鍵值對應(yīng)的目標分區(qū),將A用戶的數(shù)據(jù)存儲到目標分區(qū)上的第二文件中,只有當兩個第一文件中的存儲有鍵值相同的數(shù)據(jù)時,才對數(shù)據(jù)進行了合并。[0100]本實施例提供的方法,通過對節(jié)點所負責的區(qū)間進行分區(qū),當滿足第一觸發(fā)條件時,觸發(fā)節(jié)點上的未經(jīng)過合并的文件進行合并,各文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同,根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值,并確定各鍵值對應(yīng)的哈希值所屬的目標分區(qū),然后將待合并的文件中具有相同鍵值的數(shù)據(jù)進行合并,并根據(jù)該鍵值對應(yīng)的哈希值所屬的目標分區(qū),將合并后的數(shù)據(jù)存儲到該目標分區(qū)內(nèi)。通過對節(jié)點內(nèi)區(qū)域進行分區(qū),然后經(jīng)過一次數(shù)據(jù)合并,將具有相同鍵值的用戶數(shù)據(jù)存儲在同一分區(qū)內(nèi),使數(shù)據(jù)存放的粒度降低。當查詢時,首先根據(jù)鍵值確定數(shù)據(jù)所在的分區(qū),在所屬分區(qū)掃描各數(shù)據(jù)文件查詢需要的數(shù)據(jù),由于分區(qū)內(nèi)文件個數(shù)較少,只需要從較少的文件中進行數(shù)據(jù)篩選,從而達到讀性能提升。[0101]圖5為本發(fā)明文件合并方法實施例二的流程圖,本實施例提供的方法由各個節(jié)點分別執(zhí)行,每個節(jié)點都按照本實施例提供的方法對自己節(jié)點上的文件按照如下方法進行合并,和實施例一相比,本實施例在實施例一的基礎(chǔ)上,當分區(qū)內(nèi)滿足合并條件時,對該分區(qū)內(nèi)的文件進一步進行合并。如圖5所示,本實施例提供的文件合并方法包括以下步驟:[0102]步驟201、根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū)。[0103]對節(jié)點所負責的區(qū)間進行分區(qū),是指按照一定的規(guī)則將節(jié)點所負責的區(qū)間劃分為更小的區(qū)間,劃分后的每個區(qū)間即為一個分區(qū)。本實施例中,可通過以下方式進行分區(qū):如果集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于0的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù),分區(qū)因子N可以根據(jù)實際需要進行設(shè)置。[0104]對于每個節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)分區(qū)步長S對節(jié)點進行分區(qū),得到Irl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈|rl-r2|/S-1,n為正整數(shù),每個區(qū)間為節(jié)點的一個分區(qū),rl表示節(jié)點所負責的區(qū)間的最小哈希值,r2表示節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于0的正整數(shù),且r2大于rl,|rl-r2I表示取rl和r2差值的絕對值。[0105]這里只是列舉了一種分區(qū)方法,在分區(qū)時,各個分區(qū)的大小可以相同也可以不同,本發(fā)明并不對此進行限制。[0106]以下將通過一個具體例子來說明,圖6為本實施例所適用的節(jié)點分區(qū)示意圖,如圖6所示,上圖中圓圈表示整個集群系統(tǒng),集群系統(tǒng)中共有四個節(jié)點,分別是節(jié)點A、節(jié)點B、節(jié)點C、節(jié)點D,節(jié)點A負責的區(qū)間對應(yīng)的哈希值的范圍為(70,10],其中,70和10表示哈希值,節(jié)點B負責的區(qū)間為(10,30],節(jié)點C負責的區(qū)間為(30,50],節(jié)點D負責的區(qū)間為(50,70]。以節(jié)點B為例進行說明,首先將節(jié)點B負責的區(qū)間為(10,30]劃分為三個分區(qū),分別為分區(qū)(siice)BI,分區(qū)B2和分區(qū)B3,分區(qū)BI的區(qū)間為(10,15],分區(qū)B2的區(qū)間為(15,25],分區(qū)B3的區(qū)間為(25,30]。節(jié)點B上有5個待合并的第一文件,將這5個文件合并為3個第二文件,合并后的3個第二文件分別屬于不同的分區(qū),將合并后的第二文件分別存儲到對對應(yīng)的目標分區(qū),如圖6中所示,箭頭指示的方向即表示各第二文件所屬的目標分區(qū),以下將通過具體的例子來說明,假設(shè)節(jié)點B上有5個待合并的第一文件分別為:文件1、文件2、文件3、文件4和文件5,其中,文件I上存儲有三個用戶的數(shù)據(jù),用戶Al的數(shù)據(jù)對應(yīng)的鍵值為al,用戶A2的數(shù)據(jù)對應(yīng)的鍵值為a2、用戶A3的數(shù)據(jù)對應(yīng)的鍵值為a3;文件2上存儲有用戶Al和A2的數(shù)據(jù),文件3上存儲有用戶Al的數(shù)據(jù),還存儲有用戶A4和A5的數(shù)據(jù),用戶A4的數(shù)據(jù)對應(yīng)的鍵值為a4,用戶A5的數(shù)據(jù)對應(yīng)的鍵值為a5,文件4上存儲有用戶A3和用戶A4的數(shù)據(jù),文件5上存儲有用戶A2、A3、A4、A5的數(shù)據(jù)。這里以鍵值為al的數(shù)據(jù)進行合并為例進行說明,首先,按照哈希算法計算鍵值al對應(yīng)的哈希值,然后確定鍵值al對應(yīng)的哈希值落在哪個分區(qū)內(nèi),假設(shè)鍵值al對應(yīng)的哈希值落在分區(qū)BI內(nèi),則將分區(qū)BI確定為鍵值al所屬的目標分區(qū),最后,將文件1、文件2和文件3中鍵值為al的數(shù)據(jù)進行合并,并將合并后的數(shù)據(jù)存儲在分區(qū)BI上的文件6中。按照同樣的方法,對鍵值為a2、a3、a4和a5分別進行合并,假設(shè)鍵值a2和a5所屬的目標分區(qū)為分區(qū)B2,鍵值al和a3所屬的目標分區(qū)為分區(qū)BI,鍵值a4所屬的目標分區(qū)為分區(qū)B3,則將鍵值al和a3合并后的數(shù)據(jù)存儲在文件6中,文件6屬于分區(qū)BI,將鍵值a2和a5合并后的數(shù)據(jù)存儲在文件7中,文件7屬于B2,將鍵值a4合并后的數(shù)據(jù)存儲在文件8中,文件8屬于B3,文件6、文件7、文件8都是第二文件。通過上述的合并,將五個第一文件中的數(shù)據(jù)合并到三個第二文件中,每個第二文件屬于不同的片區(qū),從而將用戶A1、A3的數(shù)據(jù)通過合并都存儲在分區(qū)BI上,用戶A2、A5的數(shù)據(jù)通過合并都存儲在分區(qū)B2上,用戶A4的數(shù)據(jù)通過合并后存儲在分區(qū)B3上。[0107]步驟202、對于每一個節(jié)點,確定該節(jié)點滿足第一觸發(fā)條件,從該節(jié)點的磁盤中讀取至少兩個第一文件至該節(jié)點對應(yīng)的緩存中。[0108]本步驟中,第一文件是指未進行過合并的文件,各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同。具體實現(xiàn)方式可參照實施例一種步驟102中的描述。[0109]步驟203、根據(jù)各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū)。[0110]不同用戶對應(yīng)的數(shù)據(jù)可通過鍵值來區(qū)分,對于每個用戶來說,該用戶所有的數(shù)據(jù)的鍵值都相同,用戶數(shù)據(jù)和鍵值一一對應(yīng),在查詢時根據(jù)鍵值找到該用戶對應(yīng)的數(shù)據(jù)。本實施例中,根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū)具體為:首先,根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值,在得到鍵值對應(yīng)的哈希值后,判斷各哈希值分別屬于哪個分區(qū),每個分區(qū)負責一個區(qū)間,各鍵值對應(yīng)的哈希值所屬的分區(qū)即為各鍵值所屬的目標分區(qū)。[0111]步驟204、根據(jù)各鍵值對各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0112]本步驟中,將各第一文件中具有相同鍵值的數(shù)據(jù)合并,并將合并后的數(shù)據(jù)存儲在目標分區(qū)的第二文件中。在合并完成后,將該第二文件與所屬的目標分區(qū)的關(guān)系存儲在該第二文件對應(yīng)的靜態(tài)統(tǒng)計文件中,每一個文件都對應(yīng)一個靜態(tài)統(tǒng)計文件,后續(xù)當節(jié)點重新啟動的時候,可以根據(jù)靜態(tài)統(tǒng)計文件直接將該第二文件加載到該目標分區(qū)對應(yīng)的分區(qū)文件列表中,在進行數(shù)據(jù)查詢的時候,根據(jù)靜態(tài)統(tǒng)計文件中該第二文件與所屬的目標分區(qū)的關(guān)系,找到該目標分區(qū)的分區(qū)文件列表,然后根據(jù)該目標分區(qū)的分區(qū)文件列表從磁盤上讀取數(shù)據(jù)。[0113]步驟205、確定目標分區(qū)滿足第二觸發(fā)條件,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。[0114]上述步驟201-204中,通過對節(jié)點內(nèi)區(qū)域進行分區(qū),將數(shù)據(jù)存放的粒度再次降低,對未進行過合并的文件進行一次合并,通過一次合并將數(shù)據(jù)分散到不同的分區(qū)內(nèi)。而本步驟中,當某個分區(qū)內(nèi)的文件滿足合并條件時,對分區(qū)內(nèi)的文件再次進行合并,各個分區(qū)都是獨立,在進行合并時,只對本分區(qū)內(nèi)的文件進行合并。具體地,當目標分區(qū)滿足第二觸發(fā)條件時,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的待合并的至少兩個第二文件至緩存中,各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同。[0115]本實施例中,確定目標分區(qū)是否滿足第二觸發(fā)條件,具體為,判斷目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,M2的取值為大于等于2的正整數(shù),當然,第二觸發(fā)條件還可以包括其他預設(shè)的條件,例如當該目標分區(qū)上的第二文件的個數(shù)到達預設(shè)的第二文件合并個數(shù),進一步根據(jù)各第二文件的大小確定各第二文件是否滿足第二合并條件,確定各第二文件是否滿足第二合并條件具體指判斷各第二文件的大小差異是否滿足預設(shè)的最大閾值,若各第二文件大小差異滿足預設(shè)的最大閾值才觸發(fā)文件合并任務(wù),如果各第二文件大小差異很大,則不進行文件合并,本實施例中,判斷各第二文件大小差異是否滿足預設(shè)的最大閾值,可采用實施例一中判斷各第一文件大小差異是否滿足預設(shè)的最大閾值的方法,這里不再贅述,但具體的參數(shù)設(shè)置可以不同。舉例來說,如果一個第二文件大小為500M,而另一個第二文件大小為30M,則不進行合并。預設(shè)的文件合并個數(shù)M2可根據(jù)實際的需要設(shè)置,如果對查詢速率要求高,則可將M2的值設(shè)置的小一些,增加合并次數(shù),以減少文件的個數(shù),提高查詢效率。[0116]步驟206、根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值對各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在目標分區(qū)的第三文件中。[0117]本步驟中,將目標分區(qū)內(nèi)各待合并的第二文件中具有相同鍵值的數(shù)據(jù)合并在同一個第三文件中,使得同一分區(qū)內(nèi)數(shù)據(jù)高度聚合。圖3為現(xiàn)有技術(shù)中一種文件合并的示意圖,如圖3所示,當文件個數(shù)超過4個后,就會發(fā)起合并任務(wù),將4個文件合并成為一個新的文件,如果再有新的數(shù)據(jù)文件生成時,會通過大小的比較,選取大小相近的數(shù)據(jù)文件進行合并。具體實現(xiàn)方式是,將同一張表下的所有sstable按大小進行分組,將大小相似的sstable歸為一組,這樣就形成n個組(n>=l),再從這n個組中獲取平均大小最小的一個組形成一個task進行compaction的操作。每組的大小必須在(4,32]的范圍內(nèi),數(shù)量過多的組將進行截斷,之后通過map-reduce的方式將有相同鍵值的數(shù)據(jù)合并到一起,從而形成新的數(shù)據(jù)文件。且該方法中支持多線程并發(fā)執(zhí)行多個任務(wù),每個任務(wù)選取的數(shù)據(jù)文件不相同。但是現(xiàn)有技術(shù)也存在以下問題,數(shù)據(jù)文件合并的觸發(fā)條件低,4個文件即可觸發(fā),每天發(fā)生合并的次數(shù)多,大量的文件合并會占用相當大的內(nèi)存、CPU、I/O等資源,而且在數(shù)據(jù)文件經(jīng)過多輪合并后,鍵值已經(jīng)達到相當高的整合度,此時再進行的合并,僅僅是進行鍵值數(shù)據(jù)的搬遷,只有少量的合并動作,造成系統(tǒng)資源的浪費。本實施例提供的方法通過將大文件拆分成小的分區(qū)文件,合并時只有當分區(qū)內(nèi)的文件滿足合并條件時,才對分區(qū)內(nèi)的文件進行合并,由于分區(qū)內(nèi)文件個數(shù)相對于現(xiàn)有技術(shù)中一個節(jié)點上的文件個數(shù)很少,從而能夠減少合并次數(shù),提高合并效率,在數(shù)據(jù)平均分布的情況下,每個分區(qū)上存儲的文件大小相同,相同數(shù)據(jù)量的合并效率可以提升30%以上。[0118]步驟207、當接收到數(shù)據(jù)查詢請求時,根據(jù)數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值,根據(jù)待查詢數(shù)據(jù)的鍵值確定待查詢數(shù)據(jù)所在的待查詢分區(qū),根據(jù)待查詢數(shù)據(jù)的鍵值掃描待查詢分區(qū)內(nèi)的所有文件,獲取待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。[0119]數(shù)據(jù)查詢時,首先根據(jù)待查詢數(shù)據(jù)的鍵值確定待查詢數(shù)據(jù)所在的分區(qū),然后對所屬分區(qū)內(nèi)的數(shù)據(jù)文件進行過濾掃描,進而將得到符合條件的結(jié)果并返回。具體地,當接收到數(shù)據(jù)查詢請求時,解析出待查詢數(shù)據(jù)的鍵值信息,然后,計算待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值,根據(jù)待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定待查詢數(shù)據(jù)所在的待查詢分區(qū)。根據(jù)待查詢數(shù)據(jù)的鍵值掃描待查詢分區(qū)內(nèi)的所有文件,獲取鍵值對應(yīng)的待查詢數(shù)據(jù)并返回。[0120]本實施提供的方法,還能夠提升查詢效率,在查詢過程中,對比以前的查詢掃描方式,需要對磁盤上所有文件進行一次判斷,確定要查詢的數(shù)據(jù)是否在此數(shù)據(jù)文件中,使得查詢效率低,而且需要從磁盤上頻繁的讀取數(shù)據(jù),增加了系統(tǒng)的I/O開銷,同時也會占用過多的CPU和內(nèi)存,造成資源的浪費。假設(shè)數(shù)據(jù)平均分布,數(shù)據(jù)量為100G,查詢深度為1000,如果將節(jié)點分為四個分區(qū),分區(qū)查詢效率可以提升25%。[0121]本實施例提供的方法,通過對節(jié)點內(nèi)區(qū)域進行分區(qū),將數(shù)據(jù)存放的粒度再次降低,通過一次合并,將數(shù)據(jù)分散到不同的分區(qū)內(nèi),而當分區(qū)內(nèi)滿足合并條件時,對分區(qū)內(nèi)的文件進行合并,將分區(qū)內(nèi)具有相同鍵值的數(shù)據(jù)合并到一個文件中,提高了分區(qū)內(nèi)文件的聚合度。在查詢過程中,首先根據(jù)鍵值確定要查詢的數(shù)據(jù)所在的分區(qū),對所屬分區(qū)內(nèi)的數(shù)據(jù)文件進行過濾掃描,進而將得到符合條件的結(jié)果并返回,由于分區(qū)內(nèi)文件個數(shù)少,而且每個文件中的數(shù)據(jù)高度聚合,能夠減少查詢次數(shù),提高了查詢效率。[0122]圖7為本發(fā)明文件合并裝置實施例一的結(jié)構(gòu)示意圖,本實施例提供的文件合并裝置可以集成在集群系統(tǒng)的各節(jié)點上,當然也可以獨立設(shè)置,如圖7所示,本實施例提供的文件合并裝置包括:分區(qū)模塊31、文件讀取模塊32、分區(qū)確定模塊33、文件合并模塊34。[0123]其中,分區(qū)模塊31,用于根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);[0124]文件讀取模塊32,用于對于每一個節(jié)點,確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點對應(yīng)的緩存中,各第一文件未進行過合并,各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0125]分區(qū)確定模塊33,用于根據(jù)各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū);[0126]文件合并模塊34,用于根據(jù)各鍵值對各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0127]本實施例中,分區(qū)確定模塊33具體用于:根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值;根據(jù)各鍵值對應(yīng)的哈希值確定各鍵值所屬的目標分區(qū)。[0128]本實施例提供的文件合并裝置,可用于執(zhí)行方法實施例一提供的技術(shù)方案,具體實現(xiàn)方式和技術(shù)效果類型,這里不再贅述。[0129]圖8為本發(fā)明文件合并裝置實施例二的結(jié)構(gòu)示意圖,本實施例提供的文件合并裝置可以集成在集群系統(tǒng)的各節(jié)點上,當然也可以獨立設(shè)置,如圖8所示,本實施例提供的文件合并裝置包括:分區(qū)模塊41、文件讀取模塊42、分區(qū)確定模塊43、文件合并模塊44。[0130]其中,分區(qū)模塊41,用于根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);[0131]文件讀取模塊42,用于對于每一個節(jié)點,確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點對應(yīng)的緩存中,各第一文件未進行過合并,各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0132]分區(qū)確定模塊43,用于根據(jù)各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū);[0133]文件合并模塊44,用于根據(jù)各鍵值對各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0134]本實施例中,分區(qū)模塊41具體通過以下方式對集群系統(tǒng)的各節(jié)點進行分區(qū):如果集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于0的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);對于各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)分區(qū)步長S對節(jié)點進行分區(qū),得到Irl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,-r2I/S-1,n為正整數(shù),每個區(qū)間為節(jié)點的一個分區(qū),rl表示節(jié)點所負責的區(qū)間的最小哈希值,r2表示節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于0的正整數(shù),且r2大于rl,rl-r2表示取rl和r2差值的絕對值。[0135]文件讀取模塊42具體用于:判斷節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)Ml,其中,Ml的取值為大于等于2的正整數(shù);若是,則確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點對應(yīng)的緩存中?;蛘?,文件讀取模塊42具體用于:判斷節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,根據(jù)各第一文件的大小確定各第一文件是否滿足第一合并條件;若是,則確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點對應(yīng)的緩存中。[0136]分區(qū)確定模塊43具體用于:根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值;根據(jù)各鍵值對應(yīng)的哈希值確定各鍵值所屬的目標分區(qū)。[0137]對于每一個節(jié)點,在通過一次合并后,將文件分布到該節(jié)點的各分區(qū)內(nèi),本實施例中,當各分布滿足合并條件時,進一步對分區(qū)內(nèi)的文件進行合并,使各分區(qū)內(nèi)的文件高度聚合,因此,本實施例中,文件讀取模塊42還用于:確定目標分區(qū)滿足第二觸發(fā)條件,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同。相應(yīng)地,文件合并模塊44,還用于根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值對各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值的對應(yīng)的數(shù)據(jù)存儲在目標分區(qū)的第三文件中。[0138]本實施例中,文件讀取模塊42具體通過以下兩種方式確定目標分區(qū)是否滿足第二觸發(fā)條件:第一種,判斷目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,則確定目標分區(qū)滿足第二觸發(fā)條件,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。第二種,判斷目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,根據(jù)各第二文件的大小確定各第二文件是否滿足第二合并條件;若滿足,則確定目標分區(qū)滿足第二觸發(fā)條件,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。[0139]進一步的,本實施例的文件合并裝置還包括:接收模塊45、鍵值獲取模塊46和查詢模塊47,接收模塊45,用于接收數(shù)據(jù)查詢請求;鍵值獲取模塊46,用于當接收模塊接收到數(shù)據(jù)查詢請求時,根據(jù)數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;分區(qū)確定模塊43還用于:根據(jù)待查詢數(shù)據(jù)的鍵值確定待查詢數(shù)據(jù)所在的待查詢分區(qū);查詢模塊47,用于根據(jù)待查詢數(shù)據(jù)的鍵值掃描待查詢分區(qū)內(nèi)的所有文件,獲取待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。[0140]本實施例中,分區(qū)確定模塊43通過以下方式確定待查詢數(shù)據(jù)所在的待查詢分區(qū):首先,計算待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值,然后,根據(jù)待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定待查詢數(shù)據(jù)所在的待查詢分區(qū)。[0141]本實施例提供的文件合并裝置可用于執(zhí)行方法實施例二提供的技術(shù)方案,具體實現(xiàn)方式和技術(shù)效果類似,這里不再贅述。[0142]圖9為本發(fā)明文件合并裝置實施例三的結(jié)構(gòu)示意圖,本實施例提供的文件合并裝置500包括:處理器51、存儲器52、接收器53。存儲器52、接收器53通過總線和處理器51相連。其中,存儲器52存儲執(zhí)行指令,當文件合并裝置500運行時,處理器51與存儲器52之間通信,處理器51執(zhí)行執(zhí)行指令使得文件合并裝置500執(zhí)行以下操作:[0143]根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);[0144]對于每一個節(jié)點,確定節(jié)點滿足第一觸發(fā)條件,從節(jié)點的磁盤中讀取至少兩個第一文件至節(jié)點對應(yīng)的緩存中,各第一文件未進行過合并,各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0145]根據(jù)各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū);[0146]根據(jù)各鍵值對各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值的對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。[0147]根據(jù)所各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定各鍵值所屬的目標分區(qū),具體為:根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算各鍵值對應(yīng)的哈希值;根據(jù)各鍵值對應(yīng)的哈希值確定各鍵值所屬的目標分區(qū)。[0148]處理器51還用于:[0149]確定目標分區(qū)滿足第二觸發(fā)條件,從目標分區(qū)所在的節(jié)點的磁盤中讀取目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;[0150]根據(jù)各用戶對應(yīng)的數(shù)據(jù)的鍵值對各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后具有相同鍵值的數(shù)據(jù)存儲在目標分區(qū)的第三文件中。[0151]其中,根據(jù)待查詢數(shù)據(jù)的鍵值確定待查詢數(shù)據(jù)所在的待查詢分區(qū),包括:計算待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值;根據(jù)待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定待查詢數(shù)據(jù)所在的待查詢分區(qū)。[0152]本實施例中,確定節(jié)點是否滿足第一觸發(fā)條件,包括:判斷節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,則確定節(jié)點滿足第一觸發(fā)條件。[0153]或者,判斷節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,根據(jù)各第一文件的大小確定各第一文件是否滿足第一合并條件;若是,則確定節(jié)點滿足第一觸發(fā)條件。[0154]本實施例中,確定目標分區(qū)滿足第二觸發(fā)條件,包括:判斷目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,則確定目標分區(qū)滿足第二觸發(fā)條件?;蛘撸袛嗄繕朔謪^(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,根據(jù)各第二文件的大小確定各第二文件是否滿足第二合并條件;若滿足,則確定目標分區(qū)滿足第二觸發(fā)條件。[0155]本實施例中,根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),包括:[0156]如果集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于0的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);[0157]對于各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)分區(qū)步長S對節(jié)點進行分區(qū),得到|rl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈|rl-r2|/S-l,n為正整數(shù),每個區(qū)間為節(jié)點的一個分區(qū),rl表示節(jié)點所負責的區(qū)間的最小哈希值,r2表示節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于0的正整數(shù),且r2大于rl,rl-r2表示取rl和r2差值的絕對值。[0158]本實施例中,接收器53用于接收數(shù)據(jù)查詢請求,處理器51還用于當接收到數(shù)據(jù)查詢請求時,根據(jù)數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;根據(jù)待查詢數(shù)據(jù)的鍵值確定待查詢數(shù)據(jù)所在的待查詢分區(qū),根據(jù)待查詢數(shù)據(jù)的鍵值掃描待查詢分區(qū)內(nèi)的所有文件,獲取待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。[0159]本實施例提供的文件合并裝置,可用于執(zhí)行方法實施例一和實施例二所示的方法,具體實現(xiàn)方式和技術(shù)效果類似,這里不再贅述。[0160]本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。[0161]最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫罔本發(fā)明各實施例技術(shù)方案的范圍?!緳?quán)利要求】1.一種文件合并方法,其特征在于,包括:根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),所述各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);對于每一個節(jié)點,確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中,所述各第一文件未進行過合并,所述各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū);根據(jù)所述各鍵值對所述各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū),包括:根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算所述各鍵值對應(yīng)的哈希值;根據(jù)所述各鍵值對應(yīng)的哈希值確定所述各鍵值所屬的目標分區(qū)。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述各鍵值對所述各目標文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)之后,還包括:確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,所述各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值對所述各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在所述目標分區(qū)的第三文件中。4.根據(jù)權(quán)利要求1-3任一項所述的方法,其特征在于,根據(jù)所述各鍵值對所述各目標文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后各鍵值對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)之后,還包括:當接收到數(shù)據(jù)查詢請求時,根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū),根據(jù)所述待查詢數(shù)據(jù)的鍵值掃描所述待查詢分區(qū)內(nèi)的所有文件,獲取所述待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū),包括:計算所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值;根據(jù)所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū)。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述確定所述節(jié)點滿足第一觸發(fā)條件,包括:判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,則確定所述節(jié)點滿足第一觸發(fā)條件。7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述確定所述節(jié)點滿足第一觸發(fā)條件,包括:判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,根據(jù)所述各第一文件的大小確定所述各第一文件是否滿足第一合并條件;若是,則確定所述節(jié)點滿足第一觸發(fā)條件。8.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定所述目標分區(qū)滿足第二觸發(fā)條件,包括:判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,則確定所述目標分區(qū)滿足第二觸發(fā)條件。9.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定所述目標分區(qū)滿足第二觸發(fā)條件,包括:判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,根據(jù)所述各第二文件的大小確定所述各第二文件是否滿足第二合并條件;若滿足,則確定所述目標分區(qū)滿足第二觸發(fā)條件。10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),包括:如果所述集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將所述集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示所述集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示所述集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于0的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);對于所述各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)所述分區(qū)步長S對所述節(jié)點進行分區(qū),得到|rl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈Irl-r2I/S-1,n為正整數(shù),所述每個區(qū)間為所述節(jié)點的一個分區(qū),rl表示所述節(jié)點所負責的區(qū)間的最小哈希值,r2表示所述節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于0的正整數(shù),且r2大于rl,|rl-r2|表示取rl和r2差值的絕對值。11.一種文件合并裝置,其特征在于,包括:分區(qū)模塊,用于根據(jù)用戶數(shù)據(jù)的鍵值信息對集群系統(tǒng)中各節(jié)點所負責的區(qū)間分別進行分區(qū),所述各節(jié)點的各分區(qū)與用戶數(shù)據(jù)的鍵值一一對應(yīng);文件讀取模塊,用于對于每一個節(jié)點,確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中,所述各第一文件未進行過合并,所述各第一文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;分區(qū)確定模塊,用于根據(jù)所述各第一文件中各用戶對應(yīng)的數(shù)據(jù)的鍵值分別確定所述各鍵值所屬的目標分區(qū);文件合并模塊,用于根據(jù)所述各鍵值對所述各第一文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值的對應(yīng)的數(shù)據(jù)存儲在對應(yīng)的目標分區(qū)內(nèi)。12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述分區(qū)確定模塊具體用于:根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值分別計算所述各鍵值對應(yīng)的哈希值;根據(jù)所述各鍵值對應(yīng)的哈希值確定所述各鍵值所屬的目標分區(qū)。13.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述讀取模塊還用于:確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中,所述各第二文件中存儲有至少一個用戶對應(yīng)的數(shù)據(jù),每個用戶對應(yīng)的數(shù)據(jù)的鍵值不同;所述文件合并模塊,還用于根據(jù)所述各用戶對應(yīng)的數(shù)據(jù)的鍵值對所述各第二文件中具有相同鍵值的數(shù)據(jù)進行合并,并將合并后所述各鍵值對應(yīng)的數(shù)據(jù)存儲在所述目標分區(qū)的第三文件中。14.根據(jù)權(quán)利要求11-13任一項所述的裝置,其特征在于,還包括:接收模塊、鍵值獲取模塊和查詢模塊;所述接收模塊,用于接收數(shù)據(jù)查詢請求;所述鍵值獲取模塊,用于當所述接收模塊接收到數(shù)據(jù)查詢請求時,根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)的鍵值;所述分區(qū)確定模塊還用于:根據(jù)所述待查詢數(shù)據(jù)的鍵值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū);所述查詢模塊,用于根據(jù)所述待查詢數(shù)據(jù)的鍵值掃描所述待查詢分區(qū)內(nèi)的所有文件,獲取所述待查詢數(shù)據(jù)的鍵值對應(yīng)的待查詢數(shù)據(jù)。15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述分區(qū)確定模塊具體用于:計算所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值;根據(jù)所述待查詢數(shù)據(jù)的鍵值對應(yīng)的哈希值確定所述待查詢數(shù)據(jù)所在的待查詢分區(qū)。16.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述文件讀取模塊具體用于:判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,則確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中。17.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述文件讀取模塊具體用于:判斷所述節(jié)點上存儲的第一文件的個數(shù)是否達到預設(shè)的第一文件合并個數(shù)M1,其中,Ml的取值為大于等于2的正整數(shù);若是,根據(jù)所述各第一文件的大小確定所述各第一文件是否滿足第一合并條件;若是,則確定所述節(jié)點滿足第一觸發(fā)條件,從所述節(jié)點的磁盤中讀取至少兩個第一文件至所述節(jié)點對應(yīng)的緩存中。18.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述文件讀取模塊具體用于:判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,則確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。19.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述文件讀取模塊具體用于:判斷所述目標分區(qū)上存儲的第二文件的個數(shù)是否達到預設(shè)的第二文件合并個數(shù)M2,其中,M2的取值為大于等于2的正整數(shù);若是,根據(jù)所述各第二文件的大小確定所述各第二文件是否滿足第二合并條件;若滿足,則確定所述目標分區(qū)滿足第二觸發(fā)條件,從所述目標分區(qū)所在的節(jié)點的磁盤中讀取所述目標分區(qū)內(nèi)的至少兩個第二文件至緩存中。20.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述分區(qū)模塊具體用于:如果所述集群系統(tǒng)所負責的區(qū)間為(min,min+2~127],將所述集群系統(tǒng)所負責的區(qū)間按照2~N進行拆分,得到分區(qū)步長S,S=2~127/2~N,其中,min表示所述集群系統(tǒng)所負責的區(qū)間的最小哈希值,min+2~127表示所述集群系統(tǒng)所負責的區(qū)間的最大哈希值,min的取值為大于等于O的正整數(shù),N為分區(qū)因子,N的取值為大于等于I的正整數(shù);對于所述各節(jié)點,如果節(jié)點所負責的區(qū)間為(rl,r2],則根據(jù)所述分區(qū)步長S對所述節(jié)點進行分區(qū),得到|rl-r2|/S個區(qū)間,順序相鄰的兩個區(qū)間形成一個左開右閉區(qū)間(rn,rn+1],其中,0〈n〈Irl-r2I/S-1,η為正整數(shù),所述每個區(qū)間為所述節(jié)點的一個分區(qū),rl表示所述節(jié)點所負責的區(qū)間的最小哈希值,r2表示所述節(jié)點所負責的區(qū)間的最大哈希值,rl和r2的取值都為大于等于O的正整數(shù),且r2大于rl,|rl-r2|表示取rl和r2差值的絕對值?!疚臋n編號】G06F17/30GK103593436SQ201310561317【公開日】2014年2月19日申請日期:2013年11月12日優(yōu)先權(quán)日:2013年11月12日【發(fā)明者】包海龍申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1