一種數據多副本混合存儲方法及系統的制作方法
【專利摘要】本發明提供了一種數據多副本混合存儲方法及系統,在數據加載階段,將原始數據進行多次分區,每次分區采用不同的分區方式,將每次分區所得到的的分區數據存儲到多個服務器中。本發明還主要針對大規模數據聯機分析提供了一種數據處理方法。本發明在沒有增加數據存儲占用的磁盤空間、沒有降低數據可靠性的前提下,增加了數據分區的多樣性,使得更多場景的按分組進行的一類數據處理可以按照分區并行執行,降低了更多場景下的數據查詢處理的開銷,解決了現有技術中副本單一分區導致某些按分組進行數據處理的場景效率低的問題。
【專利說明】一種數據多副本混合存儲方法及系統
【技術領域】
[0001]本發明涉及計算機領域,尤其涉及一種數據多副本混合存儲方法、數據多副本混合存儲系統及數據處理方法。
【背景技術】
[0002]在大數據處理領域,數據通常是分片存儲的,數據分區的目的不僅僅是將數據分布式存儲。為了進一步保證可靠性,還會采用副本技術。目前,現有的大數據分區存儲技術,針對一份數據的多個副本都是采用相同的分區方式。減少加載階段的計算量的同時,如果數據的某個副本出錯或者丟失時,可直接拷貝其他存在的正確的副本即可恢復;數據有修改時,也可以直接對相應的多個副本同時修改即可。在某些操作中,合理的數據分區可以減少數據處理過程中節點之間的數據傳輸開銷,進而很大程度上提高數據分布式處理的效率。尤其是大表的連接操作,分區是很重要的技術方案。將連接操作按照相同的方式進行分區,對應的分區內部進行連接操作,可以對多個分區同時進行連接操作,這些連接操作可以在多個節點上并行執行,同時不必有數據遷移和重分布的操作。這也是如今在內存受限和網絡帶寬成為瓶頸的情況下,大表連接操作高效可行的方案。數據存儲和分區需要數據遷移,尤其是多節點之間的分布式存儲和分區需要消耗較高的網絡帶寬,查詢之前臨時進行分區顯然會導致查詢效率大大降低,加載的時候采用預分區存儲,可以一勞永逸地提高查詢效率。
[0003]例如:分布式文件系統HDFS,直接根據文件大小分塊存儲,沒有考慮特定分區方式。即使構建于之上的數據倉庫Hive和數據庫HBase提供了各自的分區功能,分布式文件系統HDFS的多個副本仍然是采用了相同的分區方式。還有,現有的NoSQL(也即Not onlySQL)數據庫HBase僅采用了范圍劃分,也即Range分區這一種分區方式。而非關系數據庫Cassandra采用一致性Hash在多節點之間分布數據。
[0004]從以上說明可以看出,目前在大數據處理系統中,在數據加載時只會采用一種分區方式。如果連接的列和連接條件與分區不一致,仍然會導致數據大范圍的重分布操作,還是會導致很高的網絡帶寬開銷。也就是,如果分區是根據一列進行的分區,而連接操作是根據另一列進行的,這種情況就是分區方式與連接操作的條件不一致,就需要大范圍的數據重分布操作。除此之外,很多業務可能需要針對同一批數據按照不同的分區進行操作,例如,有的操作是按第一列進行分組操作(datal join data2 on coll或者group bycoll),有的操作可能是按第二列進行分組操作(datal join data2 on col2或者group bycol2)。因此,單一的分區方式在分區與連接操作不一致或同一批數據需要按不同分區進行操作等場景就可能導致大范圍的數據重分布,在一定程度上限制了數據處理的效率。
【發明內容】
[0005]針對現有技術中存在的上述問題,本發明提出了一種數據多副本混合存儲方法及系統,增加了數據分區的多樣性,使得更多場景的按照分組進行的一類數據處理可以按照分區并行執行,以增加少量加載階段的計算量為代價,提高了更多場景的數據處理的計算效率。
[0006]為實現上述目的,本發明提供了一種數據多副本混合存儲方法,主要技術方案如下:
[0007]在數據加載階段,將原始數據進行多次分區,每次分區采用不同的分區方式;
[0008]將每次分區所得到的分區數據存儲到多個服務器上。
[0009]所述分區方式為范圍Range分區、散列Hash分區、列表分區或混合分區。
[0010]將每次分區所得到的分區數據按存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則存儲到各服務器上。
[0011]本發明還提供了一種數據多副本混合存儲系統,包括:
[0012]分區模塊,用于在數據加載階段,將原始數據進行多次分區,其中,每次分區采用不同的分區方式;
[0013]服務器,用于存儲每次分區所得到的分區數據。
[0014]所述分區模塊具體用于按照范圍Range分區、散列分區Hash分區、列表分區或混合分區方式將原始數據進行多次分區。
[0015]所述服務器具體用于根據存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則存儲每次分區所得到的分區數據。
[0016]本發明還提供了一種數據處理方法,包括以下步驟:
[0017]在數據加載階段,將多組數據進行多次分區,每次分區采用不同的分區方式,每次分區時各組數據的分區方式相同;
[0018]將各次分區所得到的的分區數據存儲到多個服務器中;
[0019]其中,所述多組數據在同一次分區中得到的具有相同屬性的分區數據存儲于同一服務器中。
[0020]所述具有相同屬性的分區數據為:各組數據每次分區后,不同組數據之間屬性值相同的分區數據。
[0021]所述分區方式為范圍Range分區、散列Hash分區、列表分區或混合分區。
[0022]所述數據處理方法具體用于聯機分析處理大數據分析應用場景。
[0023]本發明提供的一種數據多副本混合存儲方法、數據多副本混合存儲系統及數據處理方法,以在數據加載階段增加少量計算為代價,在沒有增加數據存儲占用的磁盤空間、沒有降低數據可靠性的前提下,降低了更多場景下的數據查詢處理的開銷,解決了現有技術中副本單一分區的數據處理效率低的問題。
【專利附圖】
【附圖說明】
[0024]圖1為本發明實施例的數據多副本混合存儲方法的示意圖;
[0025]圖2為現有技術中的數據多副本存儲方法的示意圖;
[0026]圖3為本發明實施例的數據多副本混合存儲系統的示意圖;
[0027]圖4為本發明實施例的數據處理方法的流程圖;
[0028]圖5為本發明實施例的兩組數據多副本混合存儲的示意圖;
[0029]圖6為本發明實施例一的示意圖;【具體實施方式】
[0030]為了使本發明的技術方案及優點更加清楚明白,以下結合附圖對本發明的示例性實施例進行進一步詳細的說明,顯然,所描述的實施例僅是本發明的一部分實施例,而不是所有實施例的窮舉。
[0031]本發明為了迎合海量數據處理的實際需求,提出了一種數據多副本混合存儲方法及系統,其中,副本的數量可以根據實際需要來確定。本發明的核心思想在于,以增加少量加載階段的計算量為代價,來提高更多場景的計算效率。本發明的數據多副本混合存儲方法很適合寫一次、讀多次、計算多次的聯機分析處理OLAP (On-Line AnalyticalProcessing)大數據分析應用場景。
[0032]所謂多副本是指一份數據存儲多個備份,而混合存儲指的是每個副本以不同的分區方式存儲。
[0033]下面結合附圖對本發明實施例進行詳細說明:
[0034]本發明實施例提供了一種數據多副本混合存儲方法,包括以下步驟:
[0035]在數據加載階段,將原始數據進行備份存儲的時候,也即進行多次分區,多次分區形成的分區數據作為原始數據的多個副本,每個副本采用不同的分區方式,也即每次分區采用不同的分區方式;其中,每次采用的分區方式可以是現有技術中的范圍Range分區、散列Hash分區、列表分區或混合分區。將每次分區所得到的分區數據存儲到多個服務器上。不同分區方式得到的分區數據作為原始數據的多個副本,存儲到多個服務器上。其中,存儲時可以根據存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則等將每次分區所得到的分區數據存儲到各服務器上。
[0036]如圖1所示,以兩次分區為例,對本發明實施例的數據多副本混合存儲方法具體說明如下:
[0037]將原始數據DATA按分區方式I進行分區,形成分區A、分區B、分區C ;再將原始數據DATA按分區方式2進行分區,形成分區2-1、分區2-2、分區2_3、分區2_4 ;將這兩種分區方式形成的分區作為雙副本存儲到服務器1、服務器2、服務器3上,存儲可以根據負載均衡原則進行存儲,在此就不再贅述。
[0038]采用本發明實施例所提供的數據多副本混合存儲方法,可以使得服務器上存儲的多副本為按不同分區方式形成的分區數據,既可以達到作為副本的目的,又可以為后續數據之間進行連接操作時提供便利,不需要數據遷移。不僅如此,本發明實施例所提供的數據多副本混合存儲方法還可以在所有需要針對分區進行操作的業務中提高數據處理效率。比如,數據I和數據2按第一列連接(dataljoin data2 on coll或者group by coll),有的操作可能是按第二列進行分組操作(datal join data2 on col2或者group by col2),這時采用本發明實施例提供的數據多副本混合存儲方法就可以根據多個分區進行并行操作,不需要數據重新分布了。
[0039]而傳統的數據副本存儲方法,在數據加載階段僅將數據按照一種分區方式進行一次分區,形成多個分區;然后將每個分區復制成多份,分發到相應的服務器節點上存儲。以雙副本為例,如圖2所示,首先將系統中每種數據在加載時按一種分區方式分成5個分區,分別為Datal_Data5,再將每個分區復制一份作為副本,存儲在各服務器上。當一種數據需要和另一種數據進行連接操作時,只能按照上述所說的那一種分區方式進行連接,如果連接操作是按另一種分區方式進行的,則需要大量的數據遷移,重新分布數據或者說是重劃分數據。
[0040]而采用本發明的數據多副本混合存儲方法,則可以避免上述存在的技術問題。與上述傳統的數據副本存儲方法相比,采用本發明實施例的技術方案,既起到了備份的作用,數據的存儲量沒有變化,且如果出現按照第二種分區進行連接操作的應用場景,也不必進行數據重劃分。
[0041]基于同一發明構思,本發明實施例還提供了一種數據多副本混合存儲系統,如圖3所示,該系統包括分區模塊201和服務器202:
[0042]分區模塊201,用于在數據加載階段,為了保證可靠性,需要將原始數據多副本備份存儲,也即將原始數據進行多次分區,其中,本發明實施例中將多副本采用不同的分區進行存儲,即每次分區采用不同的分區方式;其中,分區模塊具體用于按照范圍Range分區、散列分區Hash分區、列表分區或混合分區方式將原始數據進行多次分區。分區方式可以是現有技術中的范圍分區(Range分區)、散列分區(Hash分區)、列表分區、混合分區中的任意一個或幾個。
[0043]分區操作可以采用嵌套式的分區,也即,以一組數據為例,首先將該數據按一種分區方式進行分區,在所形成的分區內部將各分區數據按照另一種分區方式再進行一次分區。采用這樣層層嵌套的方式實現分區,可以將不同分區方式形成的分區之間互相作為副本,也即多副本。分區操作還可以采用直接將該組數據分別進行多次分區,每次分區采用不同的分區方式。也即,將該數據按一種分區方式進行分區,再將該數據按另一種分區方式進行分區,以此類推。
[0044]服務器202,用于存儲每次分區所得到的分區數據。服務器在存儲過程中,具體用于根據存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則存儲每次分區所得到的分區數據。本領域技術人員可以有各種存儲方式,本發明對此不做限制。對于不同組數據,應確保每個服務器上存有多組數據在同一次分區中得到的具有相同屬性的分區數據。
[0045]對于系統中的數據都可以采用本發明實施例所提供的數據多副本混合存儲方法,當數據之間需要進行連接操作時,可能涉及多組數據之間的交互。因此,基于同一發明構思,本發明實施例還提供了一種數據處理方法,主要針對大規模數據的聯機分析處理,如連接操作。如圖4所示,包括以下步驟:
[0046]步驟S101、假設系統中有多組數據,在數據加載過程中,將多組數據進行多次分區,每次分區采用不同的分區方式,每次分區時各組數據的分區方式相同。
[0047]也就是說,假設多組數據為A、B、0..Z,每個字母代表一組數據。將這多組數據首先分別按分區方式I進行第一次分區,得到:
[0048]A組數據第一次分區結果:An、A12、…、Au.、…、Alm,
[0049]B組數據第一次分區結果:Bn、B12、…、By、…、Blm,
[0050]C組數據第一次分區結果:Cn、C12、…、Qj、…、Clm, …
[0051]Z組數據第一次分區結果:Zn、Z12、...> Z1j…、Zlm。
[0052]其中,字母Α、Β、0..Ζ表示不同的數據組,而每個字母的下標第一位代表第幾次分區(本次為第一次分區則下標第一位為“I”),每個字母的下標第二位表示該組數據的第一次分區后的分區序號。“m”表示第一次分區數量為m個分區。
[0053]再將多組數據按分區方式2進行第二次分區,得到:
[0054]A21、A22、...、A2j.、...、A2n,
[0055]B21、B22、...、B2j、…、B2n,
[0056]C21、C22、...、C2j.、…、C2n,...[0057]Z21、Z22、...、Z2j.、…、Z2n。
[0058]每個字母的下標第一位“2”表示第二次分區,以C21為例說明,代表C組數據按分區方式2進行第二次分區得到的第I個分區。“η”表示第二次分區數量為η個分區,其中每次分區的數量可以相同,也可以不同,也就是說m可以等于η,也可以不等于η。
[0059]以此類推,以分區方式i進行第i次分區,得到:
[0060]An、Ai2、...> Aij …,
[0061]Bn、Bi2、...> Bij …,
[0062]Cn、Ci2、...> Cij …,...[
0063]Zn、Zi2、...> Zij...。
[0064]其中,下標相同的不同組數據的分區屬于具有相同屬性的數據分區。也即,An、Bn、Cn、…、Z11為具有相同屬性的數據分區,A23、B23、C23、…Z23也為具有相同屬性的數據分區,同理,Au、Bu、Cu、…、ZuS具有相同屬性的數據分區。這樣,不同分區方式形成的分區作為該組數據的多副本,也即,Αη-Α1ηι、A21-A2n,…、Ail-Aij均為A組數據的多副本。
[0065]S102、將各次分區所得到的的分區數據存儲到多個服務器中,多組數據在同一次分區中得到的具有相同屬性的數據分區存儲于同一服務器中。也就是說,將各組數據下標值相同的分區存儲于同一服務器中,以便于后續的連接操作。如,將分區a21、b21、c21、…、Z21放到同一服務器上進行存儲。對于同組數據的各分區,可以根據一定的存儲負載均衡原貝U、訪問負載均衡原則、數據可靠性原則等將同組數據分布存儲到多個服務器上,本發明對此不作限制。
[0066]其中,分區方式可以是范圍Range分區、散列Hash分區、列表分區或者是復合分區(也稱混合分區),也可以是其他的分區方式。本發明對多組數據進行分區的分區方式不作限制,本領域技術人員可以采用現有技術中其他的分區方式,但只要是采用本發明所提供的數據處理方法,均應該在本發明的保護范圍之內。
[0067]其中,將數據按照多種分區方式進行分區,可以得到多個副本,具體進行幾次分區可以根據實際需要進行設置,本發明對分區次數不作限制。一般情況下,考慮到系統性能的原因,進行2次分區(也即i = 2)即可達到混合存儲備份的目的。
[0068]另外,每次分區具體分成多少個分區,也即分區數量,在實際應用中可能根據需要或者根據分區方式都會有所不同,本發明對每次分區的分區數量也不作限制。
[0069]采用本發明實施例所提供的存儲方式,可以保證如果出現按照第i種分區方式進行連接操作時也不需要進行數據重劃分了,因為每個服務器中已經存在各組數據按照第i種分區方式形成的具有相同屬性的分區數據。這樣的話,當每種數據之間進行連接操作時,就可以按多種分區方式進行連接,不需要數據遷移。此處所說的連接操作,是指將數據庫中的兩種或兩種以上的數據,根據相同的字段的值相等的行合并為一行,形成一個新的大數據表。[0070]具體的連接操作如圖5所示,下面以兩組數據(數據I和數據2)進行具體連接操作時的過程為例,進行詳細說明如下:
[0071]假設數據I和數據2是需要進行連接操作的兩種數據,且二者的數據量都比較大,一臺機器內有限,多個服務器節點并行聯結,效率將會更高。首先將數據I按不同的分區方式進行分區,此處以兩次分區為例,按分區方式I分為分區An、A12、A13、A14,按分區方式2分為分區A21、A22、A23、A24、A25 ;同理,將數據2按照數據I的分區方式進行兩次分區,按分區方式I分為分區Bn、B12> B13、B14 ;,按分區方式2分為分區B21、B22、B23、B24> B25O
[0072]在數據存儲時,將各個分區按照負載均衡原則存儲到各服務器上,只需要確保數據I和數據2相同屬性的分區數據在同一服務器上即可,這樣就可以避免遷移。例如,將數據I的分區A11與數據2的分區B11存儲在同一服務器(服務器I)上,將數據I的分區A22與數據2的分區B22存儲在同一服務器(服務器3)上;當數據I與數據2需要按照分區方式I進行連接操作時,就不需要與其他節點進行數據交換,當數據I與數據2需要按照分區方式2進行連接操作時,也不需要與其他節點進行數據交換。
[0073]本發明中同組數據的不同分區在服務器上的分布只需要遵循負載均衡原則、數據可靠性原則等即可,而對于不同組數據,則需要確保不同組數據的相同分區在一個服務器上,這樣在連接操作時就可以避免數據遷移。
[0074]比如兩次分區的情況,采用這樣的數據處理方法,可以確保即使對數據進行連接操作時與第一次分區的方式不一致,也可以以第二次分區方式進行連接操作。當然,上述說明僅是本發明實施例的一個舉例,具體應用時可以進行多次分區,而不僅限于第一次分區和第二次分區。同時,對于分區形成的分區數也只是舉例而已,現實應用時可能根據分區方式的不同或其他需要,將數據分區成多個,本發明對分區的次數和每次分區形成的分區數量都不作限制。
[0075]實施例一、
[0076]如圖6所示,將北京人口數據作為數據1、天津人口數據作為數據2,。首先分別將北京人口數據(數據I)按姓氏(分區方式I)拆分成多個分區,拆分后的結果就是北京張氏為分區A11,北京王氏為分區A12…;再按年齡(分區方式2)拆分成多個分區,拆分結果為北京0-30歲為分區A21,北京31-60歲為分區A22…。同樣的,天津人口數據(數據2)也按姓氏(分區方式I)拆分,拆分結果為天津張氏為分區B11,天津王氏為分區B12…;再按年齡(分區方式2)拆分,拆分結果為天津0-30歲為分區B21,天津31-60歲為分區B22…。
[0077]在進行數據存儲時,考慮一定的負載均衡策略將北京人口數據(數據I)存儲到多個服務器上,只需確保北京人口數據(數據I)和天津人口數據(數據2)的相同分區在同一服務器上存儲即可。比如,將北京張氏(分區A11)與天津張氏(分區B11)存儲在同一服務器上,將北京0-30歲(分區A21)與天津0-30歲(分區B21)存儲在同一服務器上。
[0078]這樣,當北京人口數據(數據I)與天津人口數據(數據2)進行連接操作時,不管是以姓氏(分區方式I)進行連接,還是以年齡(分區方式2)進行連接,都不會涉及與其他服務器節點的數據遷移。
[0079]傳統數據副本存儲方法是將北京人口數據(數據I)按姓氏分區,將天津人口數據(數據2)也按姓氏分區,并將每個分區分別復制成多份,分發到相應的服務器節點上存儲。這樣的方式,如果連接操作采用的是以年齡進行連接,與按姓氏分區的方式不一致。由于每個服務器里只有按照姓氏得到的分區數據,沒有按年齡分區的數據,就需要將數據進行重分布或者說是重劃分之后才能進行并行計算,需要大量的數據遷移工作。
[0080]本發明提供的這種數據處理方法,雖然在加載時多了一步分區計算,但是數據還是只需要掃描一遍。因此,增加的開銷只有分區計算,這部分開銷也是為了后面重復多樣的數據處理做準備的。用戶可以權衡整體的性能,決定是否采用本發明所提供的數據處理方法。
[0081]采用本發明的技術方案,每個數據副本都至少是二維分區的,一種分區內部會嵌套另外一種分區。因此,在進行數據恢復時,需要涉及另外一種分區方式的全部副本,利用每個副本屬于丟失副本分區的數據進行重構恢復。由于加載時每個分區內部的多個二維分區已經是分開存儲的,因此這種恢復也省去了逐條數據掃描分區的開銷,仍然只需要跟傳統分區方式一樣的數據拷貝開銷,因為拷貝的數據量并沒有變化。
[0082]采用本發明所提供的技術方案,在沒有增加數據存儲占用的磁盤空間、沒有降低數據可靠性的前提下,增加了數據分區的多樣性,使得更多場景的按分組進行的一類數據處理可以按照分區并行執行,降低了更多場景下數據查詢處理的開銷,因為省去了開銷巨大的數據遷移操作,解決了現有技術中副本單一分區導致某些按分組進行數據處理的場景效率低的問題。
[0083]以上實施例僅用以說明本發明的技術方案而非對其進行限制,在不背離本發明精神及其實質的情況下,本領域技術人員可根據本發明作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發明所附的權利要求的保護范圍內。
【權利要求】
1.一種數據多副本混合存儲方法,其特征在于,包括以下步驟: 在數據加載階段,將原始數據進行多次分區,每次分區采用不同的分區方式; 將每次分區所得到的分區數據存儲到多個服務器上。
2.如權利要求1所述的數據多副本混合存儲方法,其特征在于,所述分區方式為范圍Range分區、散列Hash分區、列表分區或混合分區。
3.如權利要求1所述的數據多副本混合存儲方法,其特征在于,將每次分區所得到的分區數據按存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則存儲到各服務器上。
4.一種數據多副本混合存儲系統,其特征在于,包括: 分區模塊,用于在數據加載階段,將原始數據進行多次分區,其中,每次分區采用不同的分區方式; 服務器,用于存儲每次分區所得到的分區數據。
5.如權利要求4所述的數據多副本混合存儲系統,其特征在于,所述分區模塊具體用于按照范圍Range分區、散列分區Hash分區、列表分區或混合分區方式將原始數據進行多次分區。
6.如權利要求4所述的數據多副本混合存儲系統,其特征在于,所述服務器具體用于根據存儲負載均衡原則、訪問負載均衡原則或數據可靠性原則存儲每次分區所得到的分區數據。
7.一種數據處理方法,其特征在于,包括以下步驟: 在數據加載階段,將多組數據進行多次分區,每次分區采用不同的分區方式,每次分區時各組數據的分區方式相同; 將各次分區所得到的分區數據存儲到多個服務器中;其中,所述多組數據在同一次分區中得到的具有相同屬性的分區數據存儲于同一服務器中。
8.如權利要求7所述的數據處理方法,其特征在于,所述具有相同屬性的分區數據為:各組數據每次分區后,不同組數據之間屬性值相同的分區數據。
9.如權利要求7所述的數據處理方法,其特征在于,所述分區方式為范圍Range分區、散列Hash分區、列表分區或混合分區。
10.如權利要求7所述的數據處理方法,其特征在于,所述數據處理方法具體用于聯機分析處理大數據分析應用場景。
【文檔編號】G06F17/30GK103440301SQ201310368095
【公開日】2013年12月11日 申請日期:2013年8月21日 優先權日:2013年8月21日
【發明者】王穎, 狄靜舒, 宋懷明, 苗艷超, 劉新春, 邵宗有 申請人:曙光信息產業股份有限公司