System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术计算机数据存储领域,更具体地,涉及一种面向云数据分析服务场景的数据块索引结构及其构建方法。
技术介绍
1、当前云计算、云数据分析场景中广泛使用存算分离架构,即将计算资源(比如计算集群)从存储侧分离处理以实现多种资源的独立扩展。比如一个典型的在亚马逊云上部署分析服务的方式,是使用amazon ec2的虚拟机搭建计算集群(作为计算侧),而把数据存储在亚马逊对象存储s3(存储侧)上。同时,为了最大化数据吞吐同时最小化io操作数,数据块(包含来自一个数据集的数万到数百万条数据)通常作为访问远端存储侧的最小单元(最小的数据过滤单元)。
2、为了缓解计算与存储分离产生的高额数据传输时延,云厂商广泛使用数据过滤技术(data skipping),通过过滤当前分析任务无关的数据块来减少数据的读取量,从而减少数据传输时延。
3、目前的数据过滤技术主要有三种:第一种是小物化聚合(smallmaterialaggregate),其通过为每个数据块独立维护轻量的元数据信息来判断相应数据块是否被当前任务所需要,其代表就是zonemap索引,其最常见的形式是minmax(最大值最小值)索引,该类索引通过为每个数据块维护索引数据的最大值与最小值来判断数据块是否满足任务需要;第二种为(近似)成员过滤器,此类方法为每个数据块维护一个集合成员过滤器来过滤无关数据块,其代表技术为bloom过滤器;第三种为精确索引,此类索引通过维护所有的索引数据信息实现无假阳地过滤无关数据。
4、然而,上述三种数据过滤技术都存在一些不可忽
5、1、针对上述第一种方法而言,虽然具有很低的索引维护开销,但是其效果依赖数据在数据块中的分布情况,当数据在数据块中的分布比较混乱时,会导致误报率高、过滤效果差;
6、2、针对上述第二种方法而言,其难以有效同时支持点查询与范围查询;
7、3、针对上述第二种方法而言,维护此类过滤器对于具有海量数据的云计算场景而言往往是不可接受的,其容易造成较高的索引存储开销;
8、4、针对上述第三种方法而言,虽然位图索引在面对低基数(数据集中不同数据的个数,比如数据{1,1,2,3}的基数是3)数据可以同时取得低维护开销与无假阳的目标,但是对于云计算场景中广泛存在的中高基数数据,则容易产生不可接受的索引存储开销。
技术实现思路
1、针对现有技术的以上缺陷或改进需求,本专利技术提供了一种面向云数据分析服务场景的数据块索引结构及其构建方法,其目的在于,解决现有成员过滤器方法和精确索引方法过滤效果好但索引存储开销大的技术问题,以及现有小物化聚合方法索引存储开销小但过滤效果差的技术问题,以及现有成员过滤器方法难以有效同时支持点查询与范围查询的技术问题。
2、为实现上述目的,按照本专利技术的一个方面,提供了一种面向云数据分析服务场景的数据块索引结构,该数据块索引结构是由b+树结构实现,该b+树结构中的每个叶子节点包括一个分段和至少一个分区。
3、叶子节点对应的分段包括该分段的起始值startkey、终止值endkey和分区宽度width。
4、每个分段对应分区的数量为:
5、
6、每个分区的索引数据范围是通过以下公式表示:
7、[startkey+i*width,min(startkey+(i+1)*width,endkey+1))
8、其中i表示该分区在其所在分段中的序号,且有i∈[0,该分区所在分段中的分区数量);
9、每个分区只包括该分区所有索引数据的所有数据块组成的数据块集合ptlist,以位数组的形式表示,位数组的长度等于待创建索引的数据块总数。
10、按照本专利技术的另一方面,提供了一种上述面向云数据分析服务场景的数据块索引结构的构建方法,包括如下步骤:
11、(1)构建有序字典kbdict={k1:bitsk1,…,kp:bitskp}用于表示索引值-数据块映射关系,其中k1表示排序后的第一个索引值,bitsk1表示包括索引值k1的所有数据块组成的数据块集合,以位数组的形式表示,p表示有序字典kbdict中包括的索引值的总数;
12、(2)根据步骤(1)构建的有序字典kbdict将索引值范围[k1,kp]进行分段,得到的所有分段构成分段数组seglist。
13、(3)根据步骤(1)构建的有序字典kbdict对步骤(2)得到的分段数组seglist中的每个分段进行分区操作,以得到该分段及其对应的多个分区。
14、(4)根据步骤(3)得到的所有分段及其对应的所有分区作为叶子节点构建b+树结构,构建的b+树结构就是面向云数据分析服务场景的数据块索引结构。
15、优选地,步骤(1)包括以下子步骤:
16、(1-1)初始化空的有序字典kbdict={};
17、(1-2)初始化计数器cnt1=0,cnt2=0;
18、(1-3)判断cnt1是否等于待创建索引的数据块总数,如果是则过程结束,否则转入步骤(1-4);
19、(1-4)判断cnt2是否等于待创建索引的第cnt1个数据块的行数,如果是则转入步骤(1-9),否则转入步骤(1-5);
20、(1-5)获取待创建索引的第cnt1个数据块中第cnt2行中待创建索引的数据v,并判断该数据v是否存在于有序字典kbdict中,如果是则转入步骤(1-7),否则转入步骤(1-6);
21、(1-6)在有序字典kbdict中插入一个键值对,该键值对的键为v,值是全零的位数组,且该位数组的长度等于待创建索引的数据块总数,然后转入步骤(1-7);
22、(1-7)将有序字典kbdict内键为v的位数组的第cnt1位赋值为1,然后转入步骤(1-8);
23、(1-8)设置计数器cnt2=cnt2+1,并返回步骤(1-4);
24、(1-9)设置计数器cnt1=cnt1+1,cnt2=0,并返回步骤(1-3);
25、优选地,步骤(2)包括以下子步骤:
26、(2-1)初始化一个空的分段数组seglist;
27、(2-2)初始化计数器cnt3=1,cnt4=0,初始化分段s,其包括一个数组pl(其初始包含一个数据点(k1,cnt4),其中k1是有序字典kbdict中第一个键)、高斜率slhigh(其初始值为∞),低斜率sllow(其初始值为0),位数组blockbits(其初始是全零的位数组,且该位数组的长度等于待创建索引的数据块总数),其中数组pl用于保存属于当前分段的数据点;
28、(2-3)判断cnt3是否等于有序字典kbdict的长度,如果是则转入步骤(2-11),否则转入步骤(2-4);
29、(2-4)判断有序字典kbdict中第cnt3个键值对的键vcnt3与第cnt3-1个键值对的键v本文档来自技高网...
【技术保护点】
1.一种面向云数据分析服务场景的数据块索引结构,其特征在于,
2.一种根据权利要求1所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,包括如下步骤:
3.根据权利要求2所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(1)包括以下子步骤:
4.根据权利要求2或3所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(2)包括以下子步骤:
5.根据权利要求2至4中任意一项所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(3)包括以下子步骤:
6.根据权利要求5所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(3-2)是采用以下公式:
7.根据权利要求6所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(3-4)中获取分段数组SegList中第cnt5个分段的变化周期值是采用以下公式:
【技术特征摘要】
1.一种面向云数据分析服务场景的数据块索引结构,其特征在于,
2.一种根据权利要求1所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,包括如下步骤:
3.根据权利要求2所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(1)包括以下子步骤:
4.根据权利要求2或3所述的面向云数据分析服务场景的数据块索引结构的构建方法,其特征在于,步骤(2)包括以下子步骤:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。