數(shù)據(jù)插入方法和裝置制造方法
【專利摘要】本發(fā)明公開一種數(shù)據(jù)插入方法和裝置,其中在數(shù)據(jù)插入方法中,根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼,將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼,在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊,將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中。通過基于格雷碼的多屬性哈希,順序相鄰的格雷碼僅有一位發(fā)生變化,能夠使相似的數(shù)據(jù)元組存儲在磁盤上更加相鄰的位置,從而增加部分匹配查詢和范圍查詢中順序訪問的概率。同時在名稱節(jié)點上和數(shù)據(jù)節(jié)點上設置二級索引,能夠節(jié)省開銷,使系統(tǒng)能夠處理更大規(guī)模的數(shù)據(jù)。
【專利說明】數(shù)據(jù)插入方法和裝置
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲領域,特別是涉及一種數(shù)據(jù)插入方法和裝置。
【背景技術】
[0002]當前的海量數(shù)據(jù)分析通常部署在大規(guī)模集群上,數(shù)據(jù)存儲在分布式文件系統(tǒng)(如GFS (Google File System,谷歌文件系統(tǒng))、HDFS (Hadoop Distributed File System,Hadoop分布式文件系統(tǒng)))中。這些文件系統(tǒng)提供了對數(shù)據(jù)便捷的管理、高效的訪問以及容錯性和擴展性。
[0003]由于在無共享(shared-nothing)結構下節(jié)點之間的數(shù)據(jù)傳輸帶來相當大的開銷,分布式計算框架(如MapReduce)通常支持本地數(shù)據(jù)處理以減輕數(shù)據(jù)傳輸帶來的負擔,并具有簡單、通用的特點,通常應用于大規(guī)模數(shù)據(jù)的處理和分析。
[0004]由于近幾十年磁盤I/O (Input/Output,輸入輸出)速率的發(fā)展遠落后于CPU(Central Processing Unit,中央處理單元)等其他計算機組件,且在無共享架構下網(wǎng)絡傳輸帶來開銷,數(shù)據(jù)訪問(包括本地1/0和網(wǎng)絡傳輸)已經(jīng)成為海量數(shù)據(jù)分析的瓶頸。
【發(fā)明內容】
[0005]本發(fā)明要解決的技術問題是提供一種數(shù)據(jù)插入方法和裝置。通過基于格雷碼的多屬性哈希,順序相鄰的格雷碼僅有一位發(fā)生變化,相比于二進制碼的多屬性哈希能夠使相似的數(shù)據(jù)元組存儲在磁盤上更加相鄰的位置,從而增加部分匹配查詢和范圍查詢中順序訪問的概率。同時在名稱節(jié)點上和數(shù)據(jù)節(jié)點上設置二級索引,能夠節(jié)省開銷,使系統(tǒng)能夠處理更大規(guī)模的數(shù)據(jù)。
[0006]根據(jù)本發(fā)明的一個方面,提供一種數(shù)據(jù)插入方法,包括:
[0007]根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼;
[0008]將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼;
[0009]在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊;
[0010]將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中;
[0011]判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值;
[0012]若待插入元組列表中的元組個數(shù)達到歸并閾值,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。
[0013]根據(jù)本發(fā)明的另一方面,提供一種數(shù)據(jù)插入裝置,包括:
[0014]屬性索引產(chǎn)生單元,用于根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼;
[0015]元組索引產(chǎn)生單元,用于將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼;
[0016]定位單元,用于在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊;
[0017]元組插入單元,用于將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中;
[0018]第一識別單元,用于判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值;
[0019]歸并處理單元,用于在第一識別單元判斷待插入元組列表中的元組個數(shù)達到歸并閾值時,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。
[0020]本發(fā)明通過根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼,將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼,在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊,將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中,判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值,若待插入元組列表中的元組個數(shù)達到歸并閾值,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。通過基于格雷碼的多屬性哈希,順序相鄰的格雷碼僅有一位發(fā)生變化,能夠使相似的數(shù)據(jù)元組存儲在磁盤上更加相鄰的位置,從而增加部分匹配查詢和范圍查詢中順序訪問的概率。同時在名稱節(jié)點上和數(shù)據(jù)節(jié)點上設置二級索引,能夠節(jié)省開銷,使系統(tǒng)能夠處理更大規(guī)模的數(shù)據(jù)。
【專利附圖】
【附圖說明】
[0021]圖1為本發(fā)明數(shù)據(jù)插入方法一個實施例的示意圖。
[0022]圖2為本發(fā)明數(shù)據(jù)插入方法另一實施例的示意圖。
[0023]圖3為本發(fā)明塊分裂一個實施例的示意圖。
[0024]圖4為本發(fā)明索引碼分裂一個實施例的示意圖。
[0025]圖5為本發(fā)明數(shù)據(jù)查詢方法一個實施例的示意圖。
[0026]圖6為本發(fā)明數(shù)據(jù)插入裝置一個實施例的示意圖。
[0027]圖7為本發(fā)明數(shù)據(jù)插入裝置另一實施例的示意圖。
[0028]圖8為本發(fā)明數(shù)據(jù)插入裝置又一實施例的示意圖。
【具體實施方式】
[0029]下面參照附圖對本發(fā)明進行更全面的描述,其中說明本發(fā)明的示例性實施例。
[0030]圖1為本發(fā)明數(shù)據(jù)插入方法一個實施例的示意圖。其中:
[0031]步驟101,根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼。
[0032]步驟102,將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼。
[0033]步驟103,在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊。
[0034]步驟104,將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中。
[0035]步驟105,判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值。
[0036]步驟106,若待插入元組列表中的元組個數(shù)達到歸并閾值,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。
[0037]基于本發(fā)明上述實施例提供的數(shù)據(jù)插入方法,通過基于格雷碼的多屬性哈希,順序相鄰的格雷碼僅有一位發(fā)生變化,相比于二進制碼的多屬性哈希能夠使相似的數(shù)據(jù)元組存儲在磁盤上更加相鄰的位置,從而增加部分匹配查詢和范圍查詢中順序訪問的概率。同時在名稱節(jié)點上和數(shù)據(jù)節(jié)點上設置二級索引,能夠節(jié)省開銷,使系統(tǒng)能夠處理更大規(guī)模的數(shù)據(jù)。
[0038]優(yōu)選的,對于一個(連續(xù)或離散的)屬性A,將其值域被劃分為若干個區(qū)間。區(qū)間數(shù)為2的正整數(shù)次方,如2、4、8等。然后按格雷碼的順序為每個區(qū)間編碼。對于屬性A值域內的一個值V,它的索引碼即是它所屬區(qū)間的格雷碼。
[0039]例如,屬性A的值域[0,1]被劃分為8個區(qū)間,每個區(qū)間按格雷碼順序編碼,對于屬性A值域內的兩個值V1=0.2和V2=0.8分別屬于第二和第七個區(qū)間,因此他們分別用格雷碼001和101表示。
[0040]優(yōu)選的,對于一個元組t,它的索引碼由t的每個屬性Ai的索引碼經(jīng)過編碼混洗后生成。編碼混洗是指按從左到右的順序交替地從每個屬性的索引碼中取出一個比特位組成元組的索引碼。
[0041]例如,元組t有3個屬性ApA2和A3,分別有格雷碼“011”、“010”和“101”,則元組t的格雷碼索引為“001110101”,元組的格雷碼索引按從左到右的順序產(chǎn)生,先從A1的格雷碼中取一位,然后從A2的格雷碼中取一位,再從A2的格雷碼中取一位,以此類推。
[0042]優(yōu)選的,本發(fā)明所采用的索引分為兩級:第一級為關系表級的索引,第二級為數(shù)據(jù)塊級的索引。
[0043]例如,HDFS為一文件系統(tǒng),如果直接將關系數(shù)據(jù)存儲在HDFS上的文件里,則沒有索引結構。
[0044]每一個關系表可以水平地劃分為若干個數(shù)據(jù)塊,每個數(shù)據(jù)塊以文件的形式存儲在HDFS中,每個數(shù)據(jù)塊可能占用HDFS中的一個或多個連續(xù)的塊(block)?;贖DFS分布式文件系統(tǒng)的存儲架構,關系表級的索引可以和文件名結合在一起,作為元數(shù)據(jù)由主節(jié)點名稱節(jié)點(Namenode )管理,而不需要占用額外的存儲空間。
[0045]關系表和數(shù)據(jù)塊內的元組按索引碼的順序存儲。這樣每個數(shù)據(jù)塊都有一個對應的索引碼范圍。將同一個關系表的數(shù)據(jù)存儲在同一個邏輯目錄下,并以“起始索引碼結束索引碼”作為數(shù)據(jù)塊的文件名,以反映數(shù)據(jù)塊內存儲的數(shù)據(jù)內容。
[0046]為減輕Namenode的負荷,第二級索引結構——數(shù)據(jù)塊級的索引構建在所有的數(shù)據(jù)節(jié)點(Datanode)上。數(shù)據(jù)塊級的索引指出了一個數(shù)據(jù)塊內每個索引碼的起始地址。每個數(shù)據(jù)塊分為報頭(head)和載荷(payload)兩部分,head部分存儲數(shù)據(jù)塊級的索引,payload部分存儲實際的數(shù)據(jù)元組。head中存儲的內容包括索引碼(在payload中有一個或多個數(shù)據(jù)元組與這個索引碼對應),以及該索引碼對應的第一個元組的塊內地址。數(shù)據(jù)塊的一個示例如表I所示:
【權利要求】
1.一種數(shù)據(jù)插入方法,其特征在于,包括: 根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼; 將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼; 在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊; 將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中; 判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值; 若待插入元組列表中的元組個數(shù)達到歸并閾值,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。
2.根據(jù)權利要求1所述的方法,其特征在于: 在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊的步驟之后,還包括: 判斷所述目標數(shù)據(jù)塊的空間是否已被占滿; 若所述目標數(shù)據(jù)塊的空間未被占滿,則執(zhí)行將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中的步驟。
3.根據(jù)權利要求2所述的方法,其特征在于: 若所述目標數(shù)據(jù)塊的空間已被占滿,則進一步判斷所述目標數(shù)據(jù)塊的索引范圍是否包括至少兩個索引碼;· 若所述目標數(shù)據(jù)塊的索引范圍包括至少兩個索引碼,則提取索引范圍的中間值ik’,其中所述目標數(shù)據(jù)塊的索引范圍為[start, end]; 利用所述中間值創(chuàng)建第一新數(shù)據(jù)塊和第二新數(shù)據(jù)塊,其中第一新數(shù)據(jù)塊的索引范圍為[start, ik’ ],第二新數(shù)據(jù)塊的索引范圍為[ik’ +1, end]; 將所述目標數(shù)據(jù)塊中的各元組按照索引碼移動到相對應的第一新數(shù)據(jù)塊或第二新數(shù)據(jù)塊中; 將第一新數(shù)據(jù)塊或第二新數(shù)據(jù)塊作為目標數(shù)據(jù)塊,然后執(zhí)行將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中的步驟。
4.根據(jù)權利要求3所述的方法,其特征在于: 若所述目標數(shù)據(jù)塊的索引范圍僅包括單一索引碼,則對單一索引碼中編碼長度最長的一個屬性的值域重新進行劃分,從而使劃分區(qū)間變?yōu)樵紕澐謪^(qū)間的兩倍; 產(chǎn)生與所述單一索引碼中每個屬性相關聯(lián)的格雷碼; 將所述單一索引碼中每個屬性的格雷碼進行編碼混洗以生成新索引碼; 然后針對由單一索引碼和新索引碼構成的索引范圍,執(zhí)行提取索引范圍的中間值的步驟。
5.根據(jù)權利要求1-4中任一項所述的方法,其特征在于: 在進行元組查詢時,根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼; 將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼; 利用元組索引碼在名稱節(jié)點上查詢與元組索引碼相關聯(lián)的目標數(shù)據(jù)塊; 在目標數(shù)據(jù)塊的報頭部分中獲得與元組索引碼相關聯(lián)的塊內偏移量; 根據(jù)塊內偏移量在目標數(shù)據(jù)塊的載荷部分獲得與元組索引碼相關聯(lián)的目標數(shù)據(jù)元組。
6.一種數(shù)據(jù)插入裝置,其特征在于,包括:屬性索引產(chǎn)生單元,用于根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼; 元組索引產(chǎn)生單元,用于將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼; 定位單元,用于在名稱節(jié)點上,利用元組索引碼將元組定位到目標數(shù)據(jù)塊; 元組插入單元,用于將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中; 第一識別單元,用于判斷待插入元組列表中的元組個數(shù)是否達到歸并閾值; 歸并處理單元,用于在第一識別單元判斷待插入元組列表中的元組個數(shù)達到歸并閾值時,將待插入元組列表中的全部元組與所述目標數(shù)據(jù)塊中的元組進行歸并處理。
7.根據(jù)權利要求6所述的裝置,其特征在于:所述裝置還包括第二識別單元,用于定位單元在名稱節(jié)點上利用元組索引碼將元組定位到目標數(shù)據(jù)塊之后,判斷所述目標數(shù)據(jù)塊的空間是否已被占滿;若所述目標數(shù)據(jù)塊的空間未被占滿,則指示元組插入單元執(zhí)行將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中的操作。
8.根據(jù)權利要求7所述的裝置,其特征在于:所述裝置還包括第三識別單元和數(shù)據(jù)塊分裂單兀,其中: 第三識別單元,用于在第二識別單元判斷所述目標數(shù)據(jù)塊的空間已被占滿時,進一步判斷所述目標數(shù)據(jù)塊的索引范圍是否包括至少兩個索引碼; 數(shù)據(jù)塊分裂單元,用于在第三識別單元判斷所述目標數(shù)據(jù)塊的索引范圍包括至少兩個索引碼時,提取索引范圍的中間值ik’,其中所述目標數(shù)據(jù)塊的索引范圍為[start,end];利用所述中間值創(chuàng)建第一新數(shù)據(jù)塊和第二新數(shù)據(jù)塊,其中第一新數(shù)據(jù)塊的索引范圍為[start,ik’],第二新數(shù)據(jù)塊的 索引范圍為[ik’+l,end];將所述目標數(shù)據(jù)塊中的各元組按照索引碼移動到相對應的第一新數(shù)據(jù)塊或第二新數(shù)據(jù)塊中;將第一新數(shù)據(jù)塊或第二新數(shù)據(jù)塊作為目標數(shù)據(jù)塊,然后指示元組插入單元執(zhí)行將元組插入到目標數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點上的待插入元組列表中的操作。
9.根據(jù)權利要求8所述的裝置,其特征在于:所述裝置還包括索引碼分裂單元,用于在第三識別單元判斷所述目標數(shù)據(jù)塊的索引范圍僅包括單一索引碼時,對單一索引碼中編碼長度最長的一個屬性的值域重新進行劃分,從而使劃分區(qū)間變?yōu)樵紕澐謪^(qū)間的兩倍,產(chǎn)生與所述單一索引碼中每個屬性相關聯(lián)的格雷碼,將所述單一索引碼中每個屬性的格雷碼進行編碼混洗以生成新索引碼,然后針對由單一索引碼和新索引碼構成的索引范圍,指示數(shù)據(jù)塊分裂單元執(zhí)行提取索引范圍的中間值的操作。
10.根據(jù)權利要求6-9中任一項所述的裝置,其特征在于:所述裝置還包括檢索單元,用于在進行元組查詢時,根據(jù)元組中每個屬性的值域劃分,產(chǎn)生與所述每個屬性相關聯(lián)的格雷碼;將元組中每個屬性的格雷碼進行編碼混洗以生成元組索引碼;利用元組索引碼在名稱節(jié)點上查詢與元組索引碼相關聯(lián)的目標數(shù)據(jù)塊;在目標數(shù)據(jù)塊的報頭部分中獲得與元組索引碼相關聯(lián)的塊內偏移量;根據(jù)塊內偏移量在目標數(shù)據(jù)塊的載荷部分獲得與元組索引碼相關聯(lián)的目標數(shù)據(jù)元組。
【文檔編號】G06F17/30GK103853796SQ201210523567
【公開日】2014年6月11日 申請日期:2012年12月7日 優(yōu)先權日:2012年12月7日
【發(fā)明者】姜苗, 包盛 申請人:中國電信股份有限公司