国产精品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>

      數(shù)據(jù)處理方法及裝置的制作方法

      文檔序號:7867556閱讀:159來源:國知局
      專利名稱:數(shù)據(jù)處理方法及裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及存儲系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及裝置。
      背景技術(shù)
      云存儲,與云計算類似,它是指通過集群應(yīng)用、網(wǎng)格技術(shù)或分布式文件系統(tǒng)等功能,將網(wǎng)絡(luò)中大量各種不同類型的存儲設(shè)備通過應(yīng)用軟件集合起來協(xié)同工作,共同對外提供數(shù)據(jù)存儲和業(yè)務(wù)訪問功能的一個系統(tǒng)。云存儲采用分布式哈希表(Distributed Hash Table, DHT)技術(shù)組成分布式文件系統(tǒng)(即分布式存儲集群,以下簡稱集群),每個存儲節(jié)點按照一致性哈希(hash)算法被分 配了獨立的多個分區(qū)(Partition)。由于云存儲采用廉價低可靠硬件組成大規(guī)模存儲池,存儲硬件故障呈常態(tài);同時為滿足資源的彈性供給,經(jīng)常出現(xiàn)存儲節(jié)點動態(tài)加入或離開集群。當節(jié)點出現(xiàn)故障或進行動態(tài)擴容、縮容時,Partition序列會在節(jié)點上重新分布,節(jié)點上管理的Partition范圍會發(fā)生變化,進行重新負載均衡(rebalance)的遷移操作,有些Partition需要遷移到別的節(jié)點,故障節(jié)點承擔(dān)的Partition將由其他節(jié)點承擔(dān),新增節(jié)點承擔(dān)一部分由其他節(jié)點承擔(dān)的Partition,從而保證各存儲節(jié)點之間的負載均衡?,F(xiàn)有的數(shù)據(jù)存儲形式通常采用開源軟件Tokyo Cabinet HDB/BDB/FDB (哈希數(shù)據(jù)庫/多路徑樹數(shù)據(jù)庫/固定長度記錄數(shù)據(jù)庫)的組織形式。存儲節(jié)點存儲的數(shù)據(jù)包括一系列的key-value(鍵-值)對,在存儲節(jié)點的存儲桶陣列(Bucket Array)中依次存放key-value鏈表,對應(yīng)于順序的存儲桶標識bucket ID,而key-value對在存儲節(jié)點的存儲介質(zhì)(如硬盤等)上的存儲地址是分散的。也就是說,對于不同bucket ID對應(yīng)的Key-value和同一個BucketID對應(yīng)的不同Key-value交織存儲于硬盤上。因而,存儲節(jié)點在遷移數(shù)據(jù)時,需要進行全盤掃描,每掃描一個key-value,根據(jù)掃描到的value中存儲的partition信息,與指定的需要遷移的partition進行比對,如相同則進行遷移。這樣的方式對硬盤的讀寫浪費非常嚴重,真正需要遷移的Partition可能不到全盤容量的5%,但卻要對硬盤進行全盤掃描。而且,在數(shù)據(jù)遷移時,僅能串行key-value匹配并發(fā)送遷移動作,硬盤1/0次數(shù)過多,效率低下。

      發(fā)明內(nèi)容
      有鑒于此,本發(fā)明的目的是提供一種數(shù)據(jù)處理方法及裝置,不需要對硬盤進行全盤掃描,減少Partition遷移時對硬盤讀操作的次數(shù),提高數(shù)據(jù)讀取效率,在數(shù)據(jù)遷移時可以并發(fā)發(fā)送key-value,提高節(jié)點間帶寬的利用率,提高數(shù)據(jù)讀取性能。為實現(xiàn)上述目的,本發(fā)明實施例第一方面提供了一種數(shù)據(jù)處理方法,所述方法包括獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識;根據(jù)所述數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點;
      將所述待存儲數(shù)據(jù)的所述數(shù)據(jù)標識和所述待儲存數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址;將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中。結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述索引區(qū)包括至少一個子索引區(qū),根據(jù)對所述生成的索引信息中的所述數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū),將所述生成的索引信息存放于所述確定的所述子索引區(qū)中。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式 中,將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中,包括將所述生成的索引信息中的數(shù)據(jù)標識與所述第一節(jié)點的索引區(qū)中已有索引信息的數(shù)據(jù)標識進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的索引信息中的數(shù)據(jù)標識在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,在獲得所述第一分區(qū)所屬的第一節(jié)點之后,還包括判斷所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,則執(zhí)行將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述第一節(jié)點的步驟;當所述索引區(qū)中存在所述數(shù)據(jù)標識相同的索引信息時,則不執(zhí)行將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述第一節(jié)點的步驟。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,還包括獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識;根據(jù)所述待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點;從所述第二節(jié)點的索引區(qū)中查詢與所述待查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址;根據(jù)匹配到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。結(jié)合第一方面的第四種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,在從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)之前,還包括對多個所述待查詢數(shù)據(jù)的所述數(shù)據(jù)存儲地址進行排序,根據(jù)排序結(jié)果從所述待查詢數(shù)據(jù)對應(yīng)的所述第二節(jié)點中順序讀取所述待查詢數(shù)據(jù)。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第一方面的第六種可能的實現(xiàn)方式中,所述方法還包括當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū);獲得所述待遷移分區(qū)所屬的第三節(jié)點;從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)標識相同的所有索引信息,所述第三節(jié)點的索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址;對匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。第二方面,本發(fā)明實施例還提供了一種數(shù)據(jù)處理裝置,所述裝置包括獲取單元,用于獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識;計算單元,用于根據(jù)所述獲取單元獲取的數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點;存儲單元,用于將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述 第一節(jié)點,并記錄數(shù)據(jù)存儲地址;索引單元,用于將所述獲取單元獲取的待存儲數(shù)據(jù)的數(shù)據(jù)標識、所述計算單元確定的所在的第一分區(qū)標識和所述存儲單元記錄的數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述計算單元確定的所述第一節(jié)點的索引區(qū)中。結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述索引區(qū)包括至少一個子索引區(qū),根據(jù)對所述生成的索引信息中的所述數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū),將所述生成的索引信息存放于所述確定的所述子索引區(qū)中。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述索引單元將所述生成的索引信息中的數(shù)據(jù)標識與所述第一節(jié)點的索引區(qū)中已有索引信息的數(shù)據(jù)標識進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的索引信息中的數(shù)據(jù)標識的在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述裝置還包括去重單元,用于判斷所述計算單元獲得的所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,觸發(fā)所述存儲單元;當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,則不觸發(fā)所述存儲單元。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述獲取單元還用于獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識;所述計算單元還用于根據(jù)所述獲取單元獲取的待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點;所述裝置還包括匹配單元,用于從所述第二節(jié)點的索引區(qū)中查詢與所述查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址;讀取單元,用于根據(jù)所述匹配單元得到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。結(jié)合第二方面的第四種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述裝置還包括排序單元,用于對所述匹配單元針對多個所述待查詢數(shù)據(jù)匹配到的所述數(shù)據(jù)存儲地址進行排序;所述讀取單元根據(jù)所述排序單元的排序結(jié)果從所述待查詢數(shù)據(jù)對應(yīng)的所述第二節(jié)點中順序讀取所述待查詢數(shù)據(jù)。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第六種可能的實現(xiàn)方式中,所述獲取單元還用于當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū);所述計算單元還用于獲得所述待遷移分區(qū)所屬的第三節(jié)點;所述裝置還包括
      匹配單元,用于從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)標識相同的所有索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址;排序單元,用于對所述匹配單元匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。本發(fā)明實施例提供的數(shù)據(jù)處理方法及裝置,將key和value分開存放,在數(shù)據(jù)的索引區(qū)中記錄key、partition及value在硬盤上的地址偏移,在數(shù)據(jù)遷移時只需要掃描索引區(qū),即可找出需要遷移的key以及value地址,不需要對硬盤進行全盤掃描,可以減少Partition遷移時對硬盤讀操作的次數(shù),提高數(shù)據(jù)讀取效率,在數(shù)據(jù)遷移時可以并發(fā)發(fā)送key-va I ue,提高節(jié)點間帶寬的利用率,提高數(shù)據(jù)讀取性能。


      圖I為本發(fā)明實施例提供的一種數(shù)據(jù)處理方法流程圖;圖2為本發(fā)明實施例提供的一種索引區(qū)的數(shù)據(jù)存儲內(nèi)容示意圖;圖3為本發(fā)明實施例提供的一種索引區(qū)的數(shù)據(jù)存儲形式示意圖;圖4為本發(fā)明實施例提供的一種數(shù)據(jù)查詢步驟的方法流程圖;圖5為本發(fā)明實施例提供的一種數(shù)據(jù)遷移步驟的方法流程圖;圖6為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的示意圖;圖7為本發(fā)明實施例提供的一種數(shù)據(jù)存儲系統(tǒng)的示意圖;圖8為本發(fā)明實施例提供的一種存儲管理節(jié)點的示意圖;圖9為圖8所示的存儲管理節(jié)點的存儲器中程序的示意圖;圖10為本發(fā)明實施例提供的一種數(shù)據(jù)存儲節(jié)點的示意圖;圖11為圖10所示的數(shù)據(jù)存儲節(jié)點的存儲器中程序的示意圖。
      具體實施例方式下面通過附圖和實施例,對本發(fā)明實施例的技術(shù)方案做進一步的詳細描述?,F(xiàn)有技術(shù)中分布式存儲集群通常采用鍵-值key-value結(jié)構(gòu)數(shù)據(jù)存儲系統(tǒng),存儲數(shù)據(jù)通常采用Key-value對的形式表示,Key是數(shù)據(jù)存取時在整個集群中唯一的標識,value是存取的數(shù)據(jù)本身。云存儲為了保證系統(tǒng)自身的強壯性、均衡性,其內(nèi)部的分布式存儲集群中數(shù)據(jù)遷移的應(yīng)用是非常廣泛的。其中最基本的包括兩種一是數(shù)據(jù)冗余備份處理,用以保證集群自身的容錯性、數(shù)據(jù)可靠性;二是由于集群是由眾多的動態(tài)節(jié)點組成的,即有點節(jié)點可能在某一時刻突然宕機,有的節(jié)點則有可能在某一時刻重新加入集群,系統(tǒng)為了保證整體存儲的均衡性,會自動或者手動觸發(fā)使各個節(jié)點間的存儲使用率平衡的命令,由此需要將已有節(jié)點的部分partition遷移到新增節(jié)點中,或者將故障節(jié)點的partition均衡后遷移到其他節(jié)點上。Partition是系統(tǒng)按照一致性哈希(hash)算法將存儲節(jié)點的存儲空間分為不同的分區(qū),每個存儲節(jié)點有多個獨立的Par t i t i on。例如,系統(tǒng)中IO個存儲節(jié)點,需要承擔(dān)100個 Partition,對應(yīng)的分區(qū)標識為 Partition O Partition 99,將這 100 個 Partition 分配到10個節(jié)點,例如,分配給第一個節(jié)點的包括Partition O Partition 9,分配給第二個節(jié)點的包括Partition 10 Partition 19,分配給第三個節(jié)點的包括Partition 20 Partition 29,依次類推,分配給第十個節(jié)點的包括Partition 90 Partition99,當然在實際應(yīng)用中可以不按順序進行分配,例如按照取模(模10)的方式分配。當新增一個節(jié)點時,系統(tǒng)需要從每個節(jié)點中均衡一部分partition到該新節(jié)點。 例如此時,分配給第一個節(jié)點的包括Partition O Partition 9,分配給第二個節(jié)點的包括 Partition 10 Partition 18,分配給第三個節(jié)點的包括 Partition 19 Partition
      27,依次類推,分配給第十個節(jié)點的包括Partition82 Partition 90,分配給第^--個
      節(jié)點的包括Partition 91 Partition 99。也就是說,系統(tǒng)通過hash計算可以得到需要遷移的partition,例如,partition 19需要從第二個節(jié)點遷移到第三個節(jié)點上,partition
      28、partition29需要從第三個節(jié)點遷移到第四個節(jié)點上,依次類推,partition91 Partition 99需要從第十個節(jié)點遷移到第^^一個節(jié)點上。當然,如果按照取模(模11)的方式,需要遷移的partition會有所不同。本發(fā)明實施例提供的數(shù)據(jù)處理方法可以由key-value存儲系統(tǒng)中任一接收到數(shù)據(jù)處理任務(wù)的存儲節(jié)點的控制器來執(zhí)行,也可以由于存儲節(jié)點的第三方處理器來執(zhí)行。圖I是本實施例提供的數(shù)據(jù)處理方法流程圖,如圖I所示,本發(fā)明實施例的數(shù)據(jù)處理方法包括步驟S101、獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識。待存儲數(shù)據(jù)通常采用鍵(Key)-值(value)的形式表示,Key是數(shù)據(jù)存取時在整個集群中唯一的標識,value是存取的數(shù)據(jù)本身。以存儲某一條微博數(shù)據(jù)為例,系統(tǒng)生成的待存儲數(shù)據(jù)的key采用字符串表示,可能包括時間、用戶信息以及序列號碼,表示某用戶在幾點幾分發(fā)了某一條微博,value則為具體的微博內(nèi)容,例如“今天在***吃飯”。對于采用key-value形式表示的待存儲數(shù)據(jù),本步驟則是獲取該待存儲數(shù)據(jù)本身(即value)和數(shù)據(jù)標識key。步驟S102、根據(jù)所述數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點。獲取所述key的特征值,所述特征值用于唯一表示所述key,獲取key的特征值的方法可以是對所述key進行哈希計算,得到所述key的哈希值,將得到的哈希值作為所述Key的特征值,根據(jù)key特征值得到所述待存儲數(shù)據(jù)所在的Partition。具體地,對所述key的值進行取模運算,確定所在的partition。
      繼而,再對待存儲數(shù)據(jù)所在的Partition標識進行一致性哈希計算,以根據(jù)partition確定對應(yīng)的節(jié)點。如果計算得到的待存儲數(shù)據(jù)所在的Partition標識為70,分布式集群中有10個節(jié)點,進行取模(模10)運算后,可以確定該待存儲數(shù)據(jù)應(yīng)在第一個節(jié)點上。當然,在獲得partition所屬的節(jié)點時,也可以通過系統(tǒng)集群配置的partition分段信息表來查詢得到partition對應(yīng)的節(jié)點。所述partition分段信息表可以是預(yù)先配置的,也可以根據(jù)實際的集群的存儲情況進行實時更新的。其中,在獲得partition所屬的節(jié)點之后,還包括判斷所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息的步驟,當所述索引區(qū)中不存在所述數(shù)據(jù)標識key相同的索引信息時,執(zhí)行步驟S103進行存儲;當所述索引區(qū)中存在所述key相同的索引信息時,則不進行存儲,說明該存儲節(jié)點上已存儲了所述待存儲數(shù)據(jù)。步驟S103、將所述待存儲數(shù)據(jù)的所述數(shù)據(jù)標識和所述待儲存數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址。將待存儲數(shù)據(jù)的key和value分別存放于步驟S102獲得的所述第一節(jié)點的存儲介質(zhì)上。數(shù)據(jù)存儲地址為所述待存儲數(shù)據(jù)在所述節(jié)點的存儲介質(zhì)(如硬盤)上的地址偏移量,即為value地址,表示value在該節(jié)點的硬盤上的地址偏移量,如以LBA地址表示。步驟S104、將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中。 存儲節(jié)點的索引區(qū)中的索引信息包括在該存儲節(jié)點上已存儲的各個存儲數(shù)據(jù)的索引信息,每一條索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識,已存儲數(shù)據(jù)所在的第一分區(qū)標識 和已存儲數(shù)據(jù)的數(shù)據(jù)存儲地址,即包括已存儲數(shù)據(jù)的key、所在的partition以及value地址信息。索引區(qū)可以包括多個子索引區(qū),將所述生成的索引信息存放于所述子索引區(qū)中。圖2是本發(fā)明實施例提供的索引區(qū)的數(shù)據(jù)存儲內(nèi)容示意圖,如圖2所示,該索引區(qū)包括m個BucketID,在Bucketl中包括N條索引信息,keyll表示Bucketl中第一條索引信息的 key, partition_Kll 表不 keyll 所在的 partition, value_LBA_kll 表不 value 地址,即keyll對應(yīng)的value在硬盤上的地址偏移量。在查詢數(shù)據(jù)時,只需要在索引區(qū)中匹配key即可找到對應(yīng)的存儲數(shù)據(jù),在遷移數(shù)據(jù)時,根據(jù)key可以計算出該key所在的partition,在索引區(qū)中匹配對應(yīng)的partition,即可以找到與待遷移partition上的對應(yīng)的存儲數(shù)據(jù)。將所述生成的索引信息存放于所述子索引區(qū)中包括根據(jù)對所述生成的索引信息中的數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū)的標識,將所述生成的索引信息存放于所述確定的所述子索引區(qū)中。當有新生成的索引信息時,將所述生成的索引信息中的key與所述第一節(jié)點的索引區(qū)中已有索引信息的key進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的所述索引信息中的key在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置?;蛘?,當有新生成的索引信息時,也可以對所述生成的索引信息中的key進行哈希計算,以確定所述生成的所述索引信息將要存放的bucket ID,例如,可以對key進行取模(模m)計算,得到bucket ID的值,將該生成的所述索引信息存放于所述bucket ID中。其中,本發(fā)明實施例的數(shù)據(jù)處理方法在完成待存儲數(shù)據(jù)的存儲步驟之后,還可以包括數(shù)據(jù)查詢的步驟,用以對已存儲數(shù)據(jù)進行查詢或讀取數(shù)據(jù),因而,在圖I所示的實施例基礎(chǔ)上執(zhí)行數(shù)據(jù)查詢的步驟。圖3是本實施例提供的數(shù)據(jù)查詢步驟的方法流程圖,如圖3所示,所述數(shù)據(jù)查詢的步驟包括步驟S201、獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識。對于采用key-value形式存儲的數(shù)據(jù),在讀取待查詢數(shù)據(jù)時,接收用戶輸入的 key,當然用戶也可以輸入查詢詞,系統(tǒng)將查詢詞轉(zhuǎn)換為對應(yīng)的key。步驟S202、根據(jù)所述待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點。采用與步驟S102相同的方法計算得到待查詢數(shù)據(jù)所在的Partition,根據(jù)計算得到的Partition,確定所述待查詢數(shù)據(jù)所在的第二節(jié)點。步驟S203、從所述第二節(jié)點的索引區(qū)中查詢與所述待查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息。所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址。從所述待查詢數(shù)據(jù)所在的所述第二節(jié)點的索引區(qū)中,將待查詢數(shù)據(jù)的數(shù)據(jù)標識key與該第二節(jié)點索引區(qū)中已存儲數(shù)據(jù)的數(shù)據(jù)標識相匹配,得到與該待查詢數(shù)據(jù)的key相匹配的索引信息,從而得到待查詢數(shù)據(jù)的數(shù)據(jù)存儲地址(即value地址)。如果有多個待查詢數(shù)據(jù)存儲在不同的多個第二節(jié)點上,則分別從多個第二節(jié)點的索引區(qū)中匹配待查詢數(shù)據(jù)的數(shù)據(jù)標識,分別得到多個第二節(jié)點上相匹配的索引信息,得到多個查詢數(shù)據(jù)的value地址。步驟S204、根據(jù)匹配到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。其中,如果有多個待查詢數(shù)據(jù),在步驟S203之后,還包括對多個所述待查詢數(shù)據(jù)的所述數(shù)據(jù)存儲地址進行排序,步驟S204則根據(jù)排序結(jié)果從所述待查詢數(shù)據(jù)對應(yīng)的所述第二節(jié)點的存儲介質(zhì)中順序讀取所述待查詢數(shù)據(jù)。當分布式存儲系統(tǒng)出現(xiàn)存儲節(jié)點增加或刪除時,需要進行rebalance的遷移操作,partition會在存儲節(jié)點上重新分布,因而,本發(fā)明實施例的數(shù)據(jù)處理方法還包括數(shù)據(jù)遷移的步驟,對待遷移partition進行遷移操作,在圖I所示的實施例基礎(chǔ)上執(zhí)行數(shù)據(jù)遷移的步驟。圖4是本實施例提供的數(shù)據(jù)遷移步驟的方法流程圖,如圖4所示,所述數(shù)據(jù)遷移步驟包括步驟S301、當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū)。預(yù)置的分區(qū)遷移條件可以包括出現(xiàn)節(jié)點增加或者節(jié)點刪除時。當節(jié)點增加或刪除時,系統(tǒng)確定需要遷移的partition,則獲取系統(tǒng)確定的待遷移 Partition。例如,需要遷移的 partition 為 partition 19、partition28,則獲取該些Partition。當然,如果在存在增刪的節(jié)點,系統(tǒng)確定的是需要遷移的各個待遷移數(shù)據(jù),則對待遷移數(shù)據(jù)的key進行哈希計算,得到待遷移數(shù)據(jù)所在的partition。
      步驟S302、獲得所述待遷移分區(qū)所屬的第三節(jié)點。采用與步驟S102相同的方法獲取待遷移Partition所屬的第三節(jié)點。步驟S303、從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)標識相同的所有索引信息。所述索引區(qū)中的索 引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址。
      從所述待遷移分區(qū)所在的所述第三節(jié)點的索引區(qū)中,將待遷移分區(qū)標識與該第三節(jié)點索引區(qū)中已存儲數(shù)據(jù)的所在分區(qū)標識相匹配,得到與該待遷移分區(qū)標識相匹配的索引信息。如果有多個待遷移分區(qū)存儲在不同的多個第三節(jié)點上,則分別從多個第三節(jié)點的索引區(qū)中匹配待遷移分區(qū)標識,分別得到多個第三節(jié)點上相匹配的待遷移分區(qū)的索引信息。從步驟S104形成的索引區(qū)中,匹配出partition的值與待遷移Partition的值相同的索引信息,包括鍵key、Part it ion和value地址。例如,匹配出索引區(qū)中所有partition為 partition 19、partition 28 的索引信息。當索引區(qū)中包括多個bucket ID時,還可以分批掃描索引區(qū),根據(jù)內(nèi)存配置的bucket ID個數(shù),將對應(yīng)bucket ID中對應(yīng)的索引信息讀取到內(nèi)存中。此時,本步驟從索引區(qū)中匹配得到與所述待遷移分區(qū)Partition的值相同的索引信息,包括分批讀取所述索引區(qū)中至少一個子索引區(qū)的索引信息,具體為分批讀取不同存儲桶bucket ID的索引信息。在每次分批讀取時,記錄本次讀取的所述Bucket ID,以便獲得下一次分批讀取的起始 Bucket ID0從本次讀取到的所述索引信息中,匹配得到與所述待遷移分區(qū)標識相同的索引信
      肩、O步驟S304、對匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。對步驟S303匹配出的多個索引信息,根據(jù)索引信息中的value地址的大小進行排序。例如,匹配到的索引信息包括〈keyll, partition_Kll=19, value_LBA_Kll=10>,<keyl2, partition_K12=19, value_LBA_K12=40>, <key22, partition_K22=19, value_LBA_K22=60>, <key34, partition_K34=19, value_LBA_K 34=30〉,<key41, partition_K41=19,value_LBA_K41=20>。根據(jù)value地址進行排序得到的結(jié)果為K11、K41、K 34、K12、K22。將排序結(jié)果發(fā)給硬盤,硬盤則可以按照順序讀取,避免了按照現(xiàn)有的方法讀取時需要全盤掃描而且無序隨機讀取的狀況,提升整體性能。所述排序結(jié)果可以但不限于按照樹形結(jié)構(gòu)進行組織,例如采用B+樹索引或位圖索引等進行組織。圖5是本實施例提供的索引區(qū)的數(shù)據(jù)存儲形式示意圖,如圖5所示,包括多級的非葉子結(jié)點,在非葉子結(jié)點上存儲value_LBA的值,在葉子結(jié)點上存儲具體的存儲數(shù)據(jù)的key和value。當有新增的索引信息時,將新組成的索引信息中的value地址與所述索引區(qū)中已有索引信息的value地址進行比較,以確定新組成的所述索引信息在B+樹上的具體位置。如果新增的value地址的值與B+樹中當前結(jié)點進行比較,如果新增的較大,則放在當前結(jié)點上邊的結(jié)點上;如果新增的較小,則放在當前結(jié)點下邊的結(jié)點上;以此類推,將新增的索引分配在B+樹上。本發(fā)明實施例提供的數(shù)據(jù)處理方法適用于key-value分布式存儲系統(tǒng),在存儲數(shù)據(jù)時,將key和value分開存放,節(jié)點的索引區(qū)中記錄已存儲數(shù)據(jù)在節(jié)點硬盤上的地址偏移,在遷移數(shù)據(jù)時,只需要掃描索引區(qū),便能發(fā)現(xiàn)需要遷移的key以及value地址,減少硬盤I/O的次數(shù),對批量獲取的待遷移數(shù)據(jù)排序,優(yōu)化硬盤讀寫順序,提升整體性能。以上是對本發(fā)明實施例所提供的數(shù)據(jù)處理方法進行的詳細描述,下面對本發(fā)明實施例提供的數(shù)據(jù)處理裝置進行詳細描述。本發(fā)明實施例提供的數(shù)據(jù)處理裝置應(yīng)用于key-value存儲系統(tǒng)中。圖6是本實施例提供的數(shù)據(jù)處理裝置的示意圖,如圖6所示,本發(fā)明實施例的數(shù)據(jù)處理裝置包括獲取單元701、計算單元702、存儲單元703、索引單元704、匹配單元705、讀取單元706和排序單元707。 該數(shù)據(jù)處理裝置主要包括數(shù)據(jù)存儲、數(shù)據(jù)查詢和數(shù)據(jù)遷移三個工作狀態(tài),下面分別進行說明。在進行數(shù)據(jù)存儲時,主要工作的部件包括獲取單元701、計算單元702、存儲單元703和索引單元704。獲取單元701用于獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識。待存儲數(shù)據(jù)通常采用鍵(Key)-值(value)的形式表示,Key是數(shù)據(jù)存取時在整個集群中唯一的標識,value是存取的數(shù)據(jù)本身。以存儲某一條微博數(shù)據(jù)為例,獲取單元701獲取的待存儲數(shù)據(jù)的key采用字符串表示,可能包括時間、用戶信息以及序列號碼,表示某用戶在幾點幾分發(fā)了某一條微博,value則為具體的微博內(nèi)容,例如“今天在***吃飯”。對于采用key-value形式表示的待存儲數(shù)據(jù),獲取單元701則是獲取該待存儲數(shù)據(jù)本身(即value)和數(shù)據(jù)標識key。計算單元702用于根據(jù)獲取單元701獲取的數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)所在的第一分區(qū),并獲得第一分區(qū)所屬的第一節(jié)點。計算單元702獲取所述key的特征值,所述特征值用于唯一表示所述key,獲取key的特征值的方法可以是對所述key進行哈希計算,得到所述key的哈希值,將得到的哈希值作為所述Key的特征值,根據(jù)key特征值得到所述待存儲數(shù)據(jù)所在的Partition。繼而,計算單元702可以對待存儲數(shù)據(jù)所在的標識進行一致性哈希計算,以根據(jù)partition確定對應(yīng)的節(jié)點。如果計算單元702計算得到的待存儲數(shù)據(jù)所在的Partition標識為70,分布式集群中有10個節(jié)點,再進行取模(模10)運算后,可以確定該待存儲數(shù)據(jù)應(yīng)在第一個節(jié)點上。其中,本發(fā)明實施例的數(shù)據(jù)處理系統(tǒng)還可以包括去重單元(圖未示),去重單元用于在計算單元702獲得所述分區(qū)所屬的節(jié)點時,判斷所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,觸發(fā)存儲單元703。當所述索引區(qū)中存在所述key相同的索引信息時,去重單元則不觸發(fā)存儲單元703進行存儲,說明該存儲節(jié)點上已存儲了所述待存儲數(shù)據(jù)。存儲單元703用于將所述待存儲數(shù)據(jù)的所述數(shù)據(jù)標識和所述待儲存數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址。存儲單元703將待存儲數(shù)據(jù)的key和value分別存儲于所述第一節(jié)點,并記錄value地址。數(shù)據(jù)存儲地址為所述待存儲數(shù)據(jù)在所述節(jié)點的硬盤上的地址偏移量,即為value地址,表示value在該節(jié)點的硬盤上的地址偏移量,如以LBA地址表示。為了便于后續(xù)查詢和遷移等操作,其中,本發(fā)明實施例的數(shù)據(jù)存儲系統(tǒng)還包括索引單元704,索引單元704用于將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中。存儲節(jié)點的索引區(qū)中的索引信息包括在該存儲節(jié)點上已存儲的各個存儲數(shù)據(jù)的 索引信息,每一條索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識,已存儲數(shù)據(jù)所在的第一分區(qū)標識和已存儲數(shù)據(jù)的數(shù)據(jù)存儲地址,即包括存儲數(shù)據(jù)的key、所在的partition以及value地址信息。索引區(qū)可以包括多個子索引區(qū),將所述生成的索引信息存放于所述子索引區(qū)中。索引單元704根據(jù)對所述生成的索引信息中的數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū)的標識,將所述生成的索引信息存放于所述子索引區(qū)標識對應(yīng)的子索引區(qū)中。當有新生成的索引信息時,索引單元704將所述生成的索引信息中的key與所述第一節(jié)點的索引區(qū)中已有索引信息的key進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的所述索引信息中的key在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置?;蛘?,當有新生成的索引信息時,索引單元704也可以對所述生成的索引信息中的key進行哈希計算,以確定所述生成的所述索引信息將要存放的bucket ID,例如,可以對key進行取模(模m)計算,得到bucket ID的值,將該生成的所述索引信息存放于所述bucket ID 中。在進行數(shù)據(jù)查詢時,主要工作的部件包括獲取單元701、計算單元702、匹配單元705和讀取單元706。獲取單元701用于獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識。計算單元702用于根據(jù)獲取單元701獲取的待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點。匹配單元705用于從所述第二節(jié)點的索引區(qū)中,查詢與所述查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述第二節(jié)點的索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)標識和數(shù)據(jù)存儲地址。讀取單元706用于根據(jù)所述匹配單元得到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。匹配單元705從所述待查詢數(shù)據(jù)所在的所述第二節(jié)點的索引區(qū)中,將待查詢數(shù)據(jù)的數(shù)據(jù)標識key與該第二節(jié)點索引區(qū)中已存儲數(shù)據(jù)的數(shù)據(jù)標識相匹配,得到與該待查詢數(shù)據(jù)的key相匹配的索引信息,從而得到待查詢數(shù)據(jù)的數(shù)據(jù)存儲地址(即value地址)。如果有多個待查詢數(shù)據(jù)存儲在不同的多個第二節(jié)點上,則分別從多個第二節(jié)點的索引區(qū)中匹配待查詢數(shù)據(jù)的數(shù)據(jù)標識,分別得到多個第二節(jié)點上相匹配的索引信息,得到多個查詢數(shù)據(jù)的value地址。
      其中,當查詢多個待查詢數(shù)據(jù)時,還可以包括排序單元707,排序單元707用于對匹配單元705針對多個所述待查詢數(shù)據(jù)匹配到的所述數(shù)據(jù)存儲地址進行排序。讀取單元706根據(jù)排序單元707的排序結(jié)果從對應(yīng)節(jié)點的硬盤中順序讀取所述待查詢數(shù)據(jù)。在進行數(shù)據(jù)遷移時,主要工作的部件包括獲取單元701、計算單元702、匹配單元705和排序單元707。獲取單元701用于當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū)。計算單元702用于獲得所述待遷移分區(qū)所屬的第三節(jié)點。預(yù)置的分區(qū)遷移條件可以包括出現(xiàn)節(jié)點增加或者節(jié)點刪除時。當存在增刪的節(jié)點時,系統(tǒng)確定需要遷移的partition,則獲取單元701獲取系統(tǒng)確定的待遷移Partition。例如,需要遷移的partition為partitionl9、partition 28,獲取單元701則獲取該些Partition。 如果在存在增刪的節(jié)點,當獲取單元701獲取到的是需要遷移的各個待遷移數(shù)據(jù),則利用計算單元702對待遷移數(shù)據(jù)的key進行哈希計算,得到待遷移數(shù)據(jù)所在的partition,并獲取所述partition所屬的第三節(jié)點。匹配單元705用于從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)Partition的值相同的索引信息。索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址,具體包括key、分區(qū)標識和value地址。匹配單元705匹配出partition的值與待遷移分區(qū)標識相同的索引信息。匹配單元705從所述待遷移分區(qū)所在的所述第三節(jié)點的索引區(qū)中,將待遷移分區(qū)標識與該第三節(jié)點索引區(qū)中已存儲數(shù)據(jù)的所在分區(qū)標識相匹配,得到與該待遷移分區(qū)標識相匹配的索引信息。如果有多個待遷移分區(qū)存儲在不同的多個第三節(jié)點上,則分別從多個第三節(jié)點的索引區(qū)中匹配待遷移分區(qū)標識,分別得到多個第三節(jié)點上相匹配的待遷移分區(qū)的索引信息。當索引區(qū)中包括多個bucket ID時,匹配單元705還可以分批掃描索引區(qū),根據(jù)內(nèi)存配置的bucket ID個數(shù),將對應(yīng)bucket ID對應(yīng)的索引信息讀取到內(nèi)存中。此時,匹配單元705具體包括分批子單元和匹配子單元(圖未示)。分批子單元用于分批讀取所述索引區(qū)中至少一個子索引區(qū)的索引信息,具體為分批讀取不同存儲桶bucket ID的索引信息。分批子單元在每次分批讀取時,并記錄本次讀取的所述Bucket ID,以便獲得下一次分批讀取的起始Bucket ID。匹配子單元用于從所述分批子單元本次讀取到的所述索引信息中,匹配得到與所述待遷移分區(qū)標識相同的索引信息。排序單元707用于對匹配單元705匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。例如,當獲取單元701獲取到需要遷移的partition為partition 19。匹配單元705匹配出索引區(qū)中所有partition為partition 19的索引信息。例如,匹配單元 705 匹配到的索引信息包括〈keyll, partition_Kl 1=19, value_LBA_Kll=10>,<keyl2, partition_K12=19, value_LBA_K12=40>, <key22, partition_K22=19, value_LBA_K22=60>, <key34, partition_K34=19, value_LBA_K34=30>, <key41, partition_K41=19,value_LBA_K41=20>。排序單元707根據(jù)value地址進行排序得到的結(jié)果為K11、K41、K34、Κ12、Κ22。將排序結(jié)果發(fā)給硬盤,硬盤則可以按照順序讀取,避免了按照現(xiàn)有的方法讀取時需要全盤掃描而且無序隨機讀取的狀況,提升整體性能。圖7是本發(fā)明實施例提供的一種數(shù)據(jù)存儲系統(tǒng)的示意圖,該存儲系統(tǒng)是采用鍵-值key-value形式的分布式存儲系統(tǒng),如圖7所示,該數(shù)據(jù)存儲系統(tǒng)包括一個存儲管理節(jié)點10和多個數(shù)據(jù)存儲節(jié)點20。存儲管理節(jié)點10以及數(shù)據(jù)存儲節(jié)點20之間通過總線完成相互間的通信。存儲管理節(jié)點10是安裝有分布式協(xié)調(diào)系統(tǒng)軟件的數(shù)據(jù)存儲節(jié)點,用以協(xié)調(diào)和管理整個分布式存儲系統(tǒng)。圖8是本發(fā)明實施例提供的一種存儲管理節(jié)點10的示意圖,存儲管理節(jié)點10可能是包含計算能力的主機服務(wù)器,或者是個人計算機PC,或者是可攜帶的便攜式計算機或終端等等,本發(fā)明具體實施例并不對存儲管理節(jié)點的具體實現(xiàn)做限定。如圖8所示,存儲管理節(jié)點10包括處理器101,通信接口 102,存儲器103和總線104。 存儲管理節(jié)點10的處理器101,通信接口 102,存儲器103通過總線104完成相互間的通信。通信接口 102用于與網(wǎng)元通信,比如與數(shù)據(jù)存儲節(jié)點20等,用于接收或發(fā)送數(shù)據(jù)存儲、數(shù)據(jù)查詢或數(shù)據(jù)遷移任務(wù)指令。處理器101用于執(zhí)行程序1031,處理器101可能是一個中央處理器CPU,或者是特定集成電路ASIC (Application Specific IntegratedCircuit),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。存儲器103用于存放程序1031。存儲器103可能包含高速RAM存儲器,也可能還包括非易失性存儲器(non-volatile memory),例如至少一個磁盤存儲器。其中,程序1031可以包括程序代碼,所述程序代碼包括計算機操作指令。如圖9所示,程序1031可以包括計算單元301。在進行數(shù)據(jù)存儲時,通信接口 102用于存儲管理節(jié)點10接收待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識。計算單元301用于根據(jù)通信接口 102獲取的數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點。該第一節(jié)點是數(shù)據(jù)存儲節(jié)點20中的一個節(jié)點。根據(jù)計算單元301的計算結(jié)果,通過通信接口 102將獲取的待存儲數(shù)據(jù)、所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和確定的所述待存儲數(shù)據(jù)將要存儲的第一分區(qū)標識發(fā)送給對應(yīng)的數(shù)據(jù)存儲節(jié)點20。在進行數(shù)據(jù)查詢時,存儲管理節(jié)點10的通信接口 102接收輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識。計算單元301用于根據(jù)通信接口 102獲取的待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點,該第二節(jié)點是數(shù)據(jù)存儲節(jié)點20中的一個節(jié)點。根據(jù)計算單元301的計算結(jié)果,通過通信接口 102將獲取的待存儲數(shù)據(jù)的數(shù)據(jù)標識和確定的所述待查詢數(shù)據(jù)所在的第二分區(qū)標識發(fā)送給對應(yīng)的數(shù)據(jù)存儲節(jié)點20。在進行數(shù)據(jù)遷移時,存儲管理節(jié)點10的通信接口 102接收待遷移分區(qū)。計算單元301用于根據(jù)通信接口 102獲取的待遷移分區(qū)的標識計算得到待遷移分區(qū)所屬的第三節(jié)點。如果通信接口 102接收的為待遷移數(shù)據(jù)的數(shù)據(jù)標識,則計算單元301根據(jù)所述數(shù)據(jù)標識計算得到所述待遷移數(shù)據(jù)所在的第三分區(qū),并獲得所述第三分區(qū)所屬的第三節(jié)點。所述第三節(jié)點是數(shù)據(jù)存儲節(jié)點20中的一個節(jié)點。根據(jù)計算單元301的計算結(jié)果,通過通信接口102將獲取的待遷移分區(qū)標識,或待遷移數(shù)據(jù)的數(shù)據(jù)標識和確定的所述待遷移數(shù)據(jù)所在的第三分區(qū)標識發(fā)送給對應(yīng)的數(shù)據(jù)存儲節(jié)點20。
      圖10是本發(fā)明實施例提供的一種數(shù)據(jù)存儲節(jié)點的示意圖,數(shù)據(jù)存儲節(jié)點20可能是包含計算能力的主機服務(wù)器,或者是個人計算機PC,或者是可攜帶的便攜式計算機或終端等等,本發(fā)明具體實施例并不對數(shù)據(jù)存儲節(jié)點的具體實現(xiàn)做限定。如圖10所示,數(shù)據(jù)存儲節(jié)點20包括處理器201,通信接口 202,存儲器203和總線204。數(shù)據(jù)存儲節(jié)點20的處理器201,通信接口 202,存儲器203通過總線204完成相互間的通信。通信接口 202用于與網(wǎng)元通信,比如與存儲管理節(jié)點10等,用于接收存儲管理節(jié)點10的通信接口 102發(fā)送的通信信息。處理器201用于執(zhí)行程序2031,處理器201可能是一個中央處理器CPU,或者是特定集成電路ASIC (Application Specific IntegratedCircuit),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。存儲器203用于存放程序2031。存儲器203可能包含高速RAM存儲器,也可能還包括非易失性存儲器(non-volatile memory),例如至少一個磁盤存儲器。其中,如圖11所示,程序2031可以包括存儲單元401、索引單元402、去重單元403、匹配單元404、讀取單元405和排序單元 406。在進行數(shù)據(jù)存儲時,通信接口 202用于接收存儲管理節(jié)點10的通信接口 102發(fā)送的所述待存儲數(shù)據(jù)、所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和確定的所述待存儲數(shù)據(jù)將要存儲的第一分區(qū)標識。存儲單元401用于將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于存儲器203,并記錄數(shù)據(jù)存儲地址。索引單元402用于將通信接口 202獲取的待存儲數(shù)據(jù)的數(shù)據(jù)標識、計算單元301確定的所在的第一分區(qū)標識和存儲單元401記錄的數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到該存儲節(jié)點20的索引區(qū)中,記錄于存儲器203上。其中,在存儲單元401之前還包括去重單元403,去重單元403用于判斷該存儲節(jié)點20的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,觸發(fā)存儲單元401進行存儲;當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,則不觸發(fā)存儲單元401進行存儲。在進行數(shù)據(jù)查詢時,通信接口 202用于接收存儲管理節(jié)點10的通信接口 102發(fā)送的所述待存儲數(shù)據(jù)標識和確定的所述待查詢數(shù)據(jù)所在的第二分區(qū)標識。匹配單元404用于從本數(shù)據(jù)存儲節(jié)點的索引區(qū)中查詢與所述查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址。讀取單元405用于根據(jù)匹配單元404得到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從存儲器203對應(yīng)的數(shù)據(jù)存儲地址中讀取所述待查詢數(shù)據(jù)。其中,在對多個待查詢數(shù)據(jù)進行處理時,還包括排序單元406,排序單元406用于對匹配單元404針對多個所述待查詢數(shù)據(jù)匹配到的所述數(shù)據(jù)存儲地址進行排序,將排序結(jié)果發(fā)送給讀取單元405。讀取單元405根據(jù)排序單元406的排序結(jié)果,順序從所述待查詢數(shù)據(jù)對應(yīng)的數(shù)據(jù)存儲地址中讀取所述待查詢數(shù)據(jù)。在進行數(shù)據(jù)遷移時,通信接口 202用于接收存儲管理節(jié)點10的通信接口 102發(fā)送的待遷移分區(qū)標識,或待遷移數(shù)據(jù)的數(shù)據(jù)標識和確定的所述待遷移數(shù)據(jù)所在的第三分區(qū)標識。匹配單元404用于從本數(shù)據(jù)存儲節(jié)點的索引區(qū)中,將待遷移分區(qū)標識與索引區(qū)中已存儲數(shù)據(jù)的所在分區(qū)標識相匹配,得到與該待遷移分區(qū)標識相匹配的索引信息。排序單元406用于對匹配單元404匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給存儲器203,用以順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。如果有多個待遷移分區(qū)存儲在不同的多個第三節(jié)點上,則分別從多個第三節(jié)點的索引區(qū)中匹配待遷移分區(qū)標識,分別得到多個第三節(jié)點上相匹配的待遷移分區(qū)的索引信息。本發(fā)明實施例提供的數(shù)據(jù)處理方法及裝置,在數(shù)據(jù)的索引區(qū)中增加至少〈key, partition, value_LBA> 信息,將 key 和 value 分開存放,通過對 value 地址(value_LBA)進行排序,將原來隨機訪問硬盤改成可順序訪問硬盤,無需進行全盤掃描,提升整體性能,另外,可通過批量掃描索引區(qū),快速找到需要遷移的partition對應(yīng)的所有〈key,value_LBA>,便于并發(fā)、批量操作,支持斷點續(xù)傳,提高節(jié)點間帶寬的利用率,提高數(shù)據(jù)讀取性能。專業(yè)人員應(yīng)該還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬 件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。以上所述的具體實施方式
      ,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施方式
      而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
      權(quán)利要求
      1.一種數(shù)據(jù)處理方法,其特征在于,應(yīng)用于鍵-值key-value存儲系統(tǒng),所述方法包括 獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識; 根據(jù)所述數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點; 將所述待存儲數(shù)據(jù)的所述數(shù)據(jù)標識和所述待儲存數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址; 將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中。
      2.根據(jù)權(quán)利要求I所述的數(shù)據(jù)處理方法,其特征在于,所述索引區(qū)包括至少一個子索引區(qū),根據(jù)對所述生成的索引信息中的所述數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū),將所述生成的索引信息存放于所述確定的所述子索弓I區(qū)中。
      3.根據(jù)權(quán)利要求I或2所述的數(shù)據(jù)處理方法,其特征在于,將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中,包括 將所述生成的索引信息中的數(shù)據(jù)標識與所述第一節(jié)點的索引區(qū)中已有索引信息的數(shù)據(jù)標識進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的索引信息中的數(shù)據(jù)標識在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置。
      4.根據(jù)權(quán)利要求I或2所述的數(shù)據(jù)處理方法,其特征在于,在獲得所述第一分區(qū)所屬的第一節(jié)點之后,還包括 判斷所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,則執(zhí)行將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述第一節(jié)點的步驟;當所述索引區(qū)中存在所述數(shù)據(jù)標識相同的索引信息時,則不執(zhí)行將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述第一節(jié)點的步驟。
      5.根據(jù)權(quán)利要求I或2所述的數(shù)據(jù)處理方法,其特征在于,還包括 獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識; 根據(jù)所述待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點; 從所述第二節(jié)點的索引區(qū)中查詢與所述待查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址; 根據(jù)匹配到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。
      6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)處理方法,其特征在于,在從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)之前,還包括 對多個所述待查詢數(shù)據(jù)的所述數(shù)據(jù)存儲地址進行排序,根據(jù)排序結(jié)果從所述待查詢數(shù)據(jù)對應(yīng)的所述第二節(jié)點中順序讀取所述待查詢數(shù)據(jù)。
      7.根據(jù)權(quán)利要求I或2所述的數(shù)據(jù)處理方法,其特征在于,所述方法還包括當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū); 獲得所述待遷移分區(qū)所屬的第三節(jié)點; 從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)標識相同的所有索引信息,所述第三節(jié)點的索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址; 對匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。
      8.一種數(shù)據(jù)處理裝置,其特征在于,應(yīng)用于鍵-值key-value存儲系統(tǒng),所述裝置包括 獲取單元,用于獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識; 計算單元,用于根據(jù)所述獲取單元獲取的數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點; 存儲單元,用于將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識和所述待存儲數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址; 索引單元,用于將所述獲取單元獲取的待存儲數(shù)據(jù)的數(shù)據(jù)標識、所述計算單元確定的所在的第一分區(qū)標識和所述存儲單元記錄的數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述計算單元確定的所述第一節(jié)點的索引區(qū)中。
      9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理裝置,其特征在于,所述索引區(qū)包括至少一個子索引區(qū),根據(jù)對所述生成的索引信息中的所述數(shù)據(jù)標識進行哈希計算的結(jié)果或者根據(jù)數(shù)據(jù)標識的大小順序確定所述生成的索引信息將要存放的子索引區(qū),將所述生成的索引信息存放于所述確定的所述子索弓I區(qū)中。
      10.根據(jù)權(quán)利要求8或9所述的數(shù)據(jù)處理裝置,其特征在于,所述索引單元將所述生成的索引信息中的數(shù)據(jù)標識與所述第一節(jié)點的索引區(qū)中已有索引信息的數(shù)據(jù)標識進行比較,按照預(yù)先設(shè)定的排列順序,確定所述生成的索引信息中的數(shù)據(jù)標識的在所述已有索引信息中的存儲位置,將所述生成的索引信息添加到所述存儲位置。
      11.根據(jù)權(quán)利要求8或9所述的數(shù)據(jù)處理裝置,其特征在于,所述裝置還包括 去重單元,用于判斷所述計算單元獲得的所述第一節(jié)點的索引區(qū)中是否存在與所述待存儲數(shù)據(jù)的數(shù)據(jù)標識相同的索引信息,當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,觸發(fā)所述存儲單元;當所述索引區(qū)中不存在所述數(shù)據(jù)標識相同的索引信息時,則不觸發(fā)所述存儲單元。
      12.根據(jù)權(quán)利要求8或9所述的數(shù)據(jù)處理裝置,其特征在于,所述獲取單元還用于獲取輸入的待查詢數(shù)據(jù)的數(shù)據(jù)標識; 所述計算單元還用于根據(jù)所述獲取單元獲取的待查詢數(shù)據(jù)的數(shù)據(jù)標識計算得到所述待查詢數(shù)據(jù)所在的第二分區(qū),并獲得所述第二分區(qū)所屬的第二節(jié)點; 所述裝置還包括 匹配單元,用于從所述第二節(jié)點的索引區(qū)中查詢與所述查詢數(shù)據(jù)的數(shù)據(jù)標識相匹配的索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址; 讀取單元,用于根據(jù)所述匹配單元得到的所述待查詢數(shù)據(jù)的索引信息中的數(shù)據(jù)存儲地址,從所述第二節(jié)點中讀取所述待查詢數(shù)據(jù)。
      13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理裝置,其特征在于,所述裝置還包括 排序單元,用于對所述匹配單元針對多個所述待查詢數(shù)據(jù)匹配到的所述數(shù)據(jù)存儲地址進行排序;所述讀取單元根據(jù)所述排序單元的排序結(jié)果從所述待查詢數(shù)據(jù)對應(yīng)的所述第二節(jié)點中順序讀取所述待查詢數(shù)據(jù)。
      14.根據(jù)權(quán)利要求8或9所述的數(shù)據(jù)處理裝置,其特征在于,所述獲取單元還用于當滿足預(yù)置的分區(qū)遷移條件時,獲取待遷移分區(qū); 所述計算單元還用于獲得所述待遷移分區(qū)所屬的第三節(jié)點; 所述裝置還包括 匹配單元,用于從所述第三節(jié)點的索引區(qū)中匹配得到與所述待遷移分區(qū)標識相同的所 有索引信息,所述索引區(qū)中的索引信息包括已存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的分區(qū)和數(shù)據(jù)存儲地址; 排序單元,用于對所述匹配單元匹配得到的所述索引信息的數(shù)據(jù)存儲地址進行排序,并將排序結(jié)果發(fā)送給所述第三節(jié)點,用以所述第三節(jié)點順序讀取所述待遷移數(shù)據(jù)并遷移至目標節(jié)點。
      全文摘要
      本發(fā)明實施例涉及一種數(shù)據(jù)處理方法及裝置,所述方法包括獲取待存儲數(shù)據(jù)和所述待存儲數(shù)據(jù)的數(shù)據(jù)標識;根據(jù)所述數(shù)據(jù)標識計算得到所述待存儲數(shù)據(jù)將要存儲的第一分區(qū),并獲得所述第一分區(qū)所屬的第一節(jié)點;將所述待存儲數(shù)據(jù)的所述數(shù)據(jù)標識和所述待儲存數(shù)據(jù)分別存儲于所述第一節(jié)點,并記錄數(shù)據(jù)存儲地址;將所述待存儲數(shù)據(jù)的數(shù)據(jù)標識、所在的第一分區(qū)標識和數(shù)據(jù)存儲地址生成索引信息,并將該索引信息添加到所述第一節(jié)點的索引區(qū)中。本發(fā)明實施例不需要對硬盤進行全盤掃面,減少Partition遷移時對硬盤讀操作的次數(shù),提高數(shù)據(jù)讀取效率。
      文檔編號H04L29/08GK102968498SQ20121051661
      公開日2013年3月13日 申請日期2012年12月5日 優(yōu)先權(quán)日2012年12月5日
      發(fā)明者張巍, 雷曉松 申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1