数据插入方法和装置制造方法

文档序号:6492491阅读:101来源:国知局
数据插入方法和装置制造方法
【专利摘要】本发明公开一种数据插入方法和装置,其中在数据插入方法中,根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码,将元组中每个属性的格雷码进行编码混洗以生成元组索引码,在名称节点上,利用元组索引码将元组定位到目标数据块,将元组插入到目标数据块所在数据节点上的待插入元组列表中。通过基于格雷码的多属性哈希,顺序相邻的格雷码仅有一位发生变化,能够使相似的数据元组存储在磁盘上更加相邻的位置,从而增加部分匹配查询和范围查询中顺序访问的概率。同时在名称节点上和数据节点上设置二级索引,能够节省开销,使系统能够处理更大规模的数据。
【专利说明】数据插入方法和装置
【技术领域】
[0001]本发明涉及数据存储领域,特别是涉及一种数据插入方法和装置。
【背景技术】
[0002]当前的海量数据分析通常部署在大规模集群上,数据存储在分布式文件系统(如GFS (Google File System,谷歌文件系统)、HDFS (Hadoop Distributed File System,Hadoop分布式文件系统))中。这些文件系统提供了对数据便捷的管理、高效的访问以及容错性和扩展性。
[0003]由于在无共享(shared-nothing)结构下节点之间的数据传输带来相当大的开销,分布式计算框架(如MapReduce)通常支持本地数据处理以减轻数据传输带来的负担,并具有简单、通用的特点,通常应用于大规模数据的处理和分析。
[0004]由于近几十年磁盘I/O (Input/Output,输入输出)速率的发展远落后于CPU(Central Processing Unit,中央处理单元)等其他计算机组件,且在无共享架构下网络传输带来开销,数据访问(包括本地1/0和网络传输)已经成为海量数据分析的瓶颈。

【发明内容】

[0005]本发明要解决的技术问题是提供一种数据插入方法和装置。通过基于格雷码的多属性哈希,顺序相邻的格雷码仅有一位发生变化,相比于二进制码的多属性哈希能够使相似的数据元组存储在磁盘上更加相邻的位置,从而增加部分匹配查询和范围查询中顺序访问的概率。同时在名称节点上和数据节点上设置二级索引,能够节省开销,使系统能够处理更大规模的数据。
[0006]根据本发明的一个方面,提供一种数据插入方法,包括:
[0007]根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码;
[0008]将元组中每个属性的格雷码进行编码混洗以生成元组索引码;
[0009]在名称节点上,利用元组索引码将元组定位到目标数据块;
[0010]将元组插入到目标数据块所在数据节点上的待插入元组列表中;
[0011]判断待插入元组列表中的元组个数是否达到归并阈值;
[0012]若待插入元组列表中的元组个数达到归并阈值,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。
[0013]根据本发明的另一方面,提供一种数据插入装置,包括:
[0014]属性索引产生单元,用于根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码;
[0015]元组索引产生单元,用于将元组中每个属性的格雷码进行编码混洗以生成元组索引码;
[0016]定位单元,用于在名称节点上,利用元组索引码将元组定位到目标数据块;
[0017]元组插入单元,用于将元组插入到目标数据块所在数据节点上的待插入元组列表中;
[0018]第一识别单元,用于判断待插入元组列表中的元组个数是否达到归并阈值;
[0019]归并处理单元,用于在第一识别单元判断待插入元组列表中的元组个数达到归并阈值时,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。
[0020]本发明通过根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码,将元组中每个属性的格雷码进行编码混洗以生成元组索引码,在名称节点上,利用元组索引码将元组定位到目标数据块,将元组插入到目标数据块所在数据节点上的待插入元组列表中,判断待插入元组列表中的元组个数是否达到归并阈值,若待插入元组列表中的元组个数达到归并阈值,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。通过基于格雷码的多属性哈希,顺序相邻的格雷码仅有一位发生变化,能够使相似的数据元组存储在磁盘上更加相邻的位置,从而增加部分匹配查询和范围查询中顺序访问的概率。同时在名称节点上和数据节点上设置二级索引,能够节省开销,使系统能够处理更大规模的数据。
【专利附图】

【附图说明】
[0021]图1为本发明数据插入方法一个实施例的示意图。
[0022]图2为本发明数据插入方法另一实施例的示意图。
[0023]图3为本发明块分裂一个实施例的示意图。
[0024]图4为本发明索引码分裂一个实施例的示意图。
[0025]图5为本发明数据查询方法一个实施例的示意图。
[0026]图6为本发明数据插入装置一个实施例的示意图。
[0027]图7为本发明数据插入装置另一实施例的示意图。
[0028]图8为本发明数据插入装置又一实施例的示意图。
【具体实施方式】
[0029]下面参照附图对本发明进行更全面的描述,其中说明本发明的示例性实施例。
[0030]图1为本发明数据插入方法一个实施例的示意图。其中:
[0031]步骤101,根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码。
[0032]步骤102,将元组中每个属性的格雷码进行编码混洗以生成元组索引码。
[0033]步骤103,在名称节点上,利用元组索引码将元组定位到目标数据块。
[0034]步骤104,将元组插入到目标数据块所在数据节点上的待插入元组列表中。
[0035]步骤105,判断待插入元组列表中的元组个数是否达到归并阈值。
[0036]步骤106,若待插入元组列表中的元组个数达到归并阈值,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。
[0037]基于本发明上述实施例提供的数据插入方法,通过基于格雷码的多属性哈希,顺序相邻的格雷码仅有一位发生变化,相比于二进制码的多属性哈希能够使相似的数据元组存储在磁盘上更加相邻的位置,从而增加部分匹配查询和范围查询中顺序访问的概率。同时在名称节点上和数据节点上设置二级索引,能够节省开销,使系统能够处理更大规模的数据。
[0038]优选的,对于一个(连续或离散的)属性A,将其值域被划分为若干个区间。区间数为2的正整数次方,如2、4、8等。然后按格雷码的顺序为每个区间编码。对于属性A值域内的一个值V,它的索引码即是它所属区间的格雷码。
[0039]例如,属性A的值域[0,1]被划分为8个区间,每个区间按格雷码顺序编码,对于属性A值域内的两个值V1=0.2和V2=0.8分别属于第二和第七个区间,因此他们分别用格雷码001和101表示。
[0040]优选的,对于一个元组t,它的索引码由t的每个属性Ai的索引码经过编码混洗后生成。编码混洗是指按从左到右的顺序交替地从每个属性的索引码中取出一个比特位组成元组的索引码。
[0041]例如,元组t有3个属性ApA2和A3,分别有格雷码“011”、“010”和“101”,则元组t的格雷码索引为“001110101”,元组的格雷码索引按从左到右的顺序产生,先从A1的格雷码中取一位,然后从A2的格雷码中取一位,再从A2的格雷码中取一位,以此类推。
[0042]优选的,本发明所采用的索引分为两级:第一级为关系表级的索引,第二级为数据块级的索引。
[0043]例如,HDFS为一文件系统,如果直接将关系数据存储在HDFS上的文件里,则没有索引结构。
[0044]每一个关系表可以水平地划分为若干个数据块,每个数据块以文件的形式存储在HDFS中,每个数据块可能占用HDFS中的一个或多个连续的块(block)。基于HDFS分布式文件系统的存储架构,关系表级的索引可以和文件名结合在一起,作为元数据由主节点名称节点(Namenode )管理,而不需要占用额外的存储空间。
[0045]关系表和数据块内的元组按索引码的顺序存储。这样每个数据块都有一个对应的索引码范围。将同一个关系表的数据存储在同一个逻辑目录下,并以“起始索引码结束索引码”作为数据块的文件名,以反映数据块内存储的数据内容。
[0046]为减轻Namenode的负荷,第二级索引结构——数据块级的索引构建在所有的数据节点(Datanode)上。数据块级的索引指出了一个数据块内每个索引码的起始地址。每个数据块分为报头(head)和载荷(payload)两部分,head部分存储数据块级的索引,payload部分存储实际的数据元组。head中存储的内容包括索引码(在payload中有一个或多个数据元组与这个索引码对应),以及该索引码对应的第一个元组的块内地址。数据块的一个示例如表I所示:
【权利要求】
1.一种数据插入方法,其特征在于,包括: 根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码; 将元组中每个属性的格雷码进行编码混洗以生成元组索引码; 在名称节点上,利用元组索引码将元组定位到目标数据块; 将元组插入到目标数据块所在数据节点上的待插入元组列表中; 判断待插入元组列表中的元组个数是否达到归并阈值; 若待插入元组列表中的元组个数达到归并阈值,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。
2.根据权利要求1所述的方法,其特征在于: 在名称节点上,利用元组索引码将元组定位到目标数据块的步骤之后,还包括: 判断所述目标数据块的空间是否已被占满; 若所述目标数据块的空间未被占满,则执行将元组插入到目标数据块所在数据节点上的待插入元组列表中的步骤。
3.根据权利要求2所述的方法,其特征在于: 若所述目标数据块的空间已被占满,则进一步判断所述目标数据块的索引范围是否包括至少两个索引码;· 若所述目标数据块的索引范围包括至少两个索引码,则提取索引范围的中间值ik’,其中所述目标数据块的索引范围为[start, end]; 利用所述中间值创建第一新数据块和第二新数据块,其中第一新数据块的索引范围为[start, ik’ ],第二新数据块的索引范围为[ik’ +1, end]; 将所述目标数据块中的各元组按照索引码移动到相对应的第一新数据块或第二新数据块中; 将第一新数据块或第二新数据块作为目标数据块,然后执行将元组插入到目标数据块所在数据节点上的待插入元组列表中的步骤。
4.根据权利要求3所述的方法,其特征在于: 若所述目标数据块的索引范围仅包括单一索引码,则对单一索引码中编码长度最长的一个属性的值域重新进行划分,从而使划分区间变为原始划分区间的两倍; 产生与所述单一索引码中每个属性相关联的格雷码; 将所述单一索引码中每个属性的格雷码进行编码混洗以生成新索引码; 然后针对由单一索引码和新索引码构成的索引范围,执行提取索引范围的中间值的步骤。
5.根据权利要求1-4中任一项所述的方法,其特征在于: 在进行元组查询时,根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码; 将元组中每个属性的格雷码进行编码混洗以生成元组索引码; 利用元组索引码在名称节点上查询与元组索引码相关联的目标数据块; 在目标数据块的报头部分中获得与元组索引码相关联的块内偏移量; 根据块内偏移量在目标数据块的载荷部分获得与元组索引码相关联的目标数据元组。
6.一种数据插入装置,其特征在于,包括:属性索引产生单元,用于根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码; 元组索引产生单元,用于将元组中每个属性的格雷码进行编码混洗以生成元组索引码; 定位单元,用于在名称节点上,利用元组索引码将元组定位到目标数据块; 元组插入单元,用于将元组插入到目标数据块所在数据节点上的待插入元组列表中; 第一识别单元,用于判断待插入元组列表中的元组个数是否达到归并阈值; 归并处理单元,用于在第一识别单元判断待插入元组列表中的元组个数达到归并阈值时,将待插入元组列表中的全部元组与所述目标数据块中的元组进行归并处理。
7.根据权利要求6所述的装置,其特征在于:所述装置还包括第二识别单元,用于定位单元在名称节点上利用元组索引码将元组定位到目标数据块之后,判断所述目标数据块的空间是否已被占满;若所述目标数据块的空间未被占满,则指示元组插入单元执行将元组插入到目标数据块所在数据节点上的待插入元组列表中的操作。
8.根据权利要求7所述的装置,其特征在于:所述装置还包括第三识别单元和数据块分裂单兀,其中: 第三识别单元,用于在第二识别单元判断所述目标数据块的空间已被占满时,进一步判断所述目标数据块的索引范围是否包括至少两个索引码; 数据块分裂单元,用于在第三识别单元判断所述目标数据块的索引范围包括至少两个索引码时,提取索引范围的中间值ik’,其中所述目标数据块的索引范围为[start,end];利用所述中间值创建第一新数据块和第二新数据块,其中第一新数据块的索引范围为[start,ik’],第二新数据块的 索引范围为[ik’+l,end];将所述目标数据块中的各元组按照索引码移动到相对应的第一新数据块或第二新数据块中;将第一新数据块或第二新数据块作为目标数据块,然后指示元组插入单元执行将元组插入到目标数据块所在数据节点上的待插入元组列表中的操作。
9.根据权利要求8所述的装置,其特征在于:所述装置还包括索引码分裂单元,用于在第三识别单元判断所述目标数据块的索引范围仅包括单一索引码时,对单一索引码中编码长度最长的一个属性的值域重新进行划分,从而使划分区间变为原始划分区间的两倍,产生与所述单一索引码中每个属性相关联的格雷码,将所述单一索引码中每个属性的格雷码进行编码混洗以生成新索引码,然后针对由单一索引码和新索引码构成的索引范围,指示数据块分裂单元执行提取索引范围的中间值的操作。
10.根据权利要求6-9中任一项所述的装置,其特征在于:所述装置还包括检索单元,用于在进行元组查询时,根据元组中每个属性的值域划分,产生与所述每个属性相关联的格雷码;将元组中每个属性的格雷码进行编码混洗以生成元组索引码;利用元组索引码在名称节点上查询与元组索引码相关联的目标数据块;在目标数据块的报头部分中获得与元组索引码相关联的块内偏移量;根据块内偏移量在目标数据块的载荷部分获得与元组索引码相关联的目标数据元组。
【文档编号】G06F17/30GK103853796SQ201210523567
【公开日】2014年6月11日 申请日期:2012年12月7日 优先权日:2012年12月7日
【发明者】姜苗, 包盛 申请人:中国电信股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1