一种基于向量化执行的数据库排序方法及系统技术方案

技术编号:19778382 阅读:30 留言:0更新日期:2018-12-15 11:20
本发明专利技术涉及一种向量化执行的数据库排序方法,包括:将输入数据向量化为多个输入数据行组;在计算节点的内存中开辟大小为最适粒度的缓冲区;将该输入数据行组依次追加至该缓冲区的末尾空位;仅当该缓冲区满或所有该输入数据行组均已追加至该缓冲区时,将存入该缓冲区的输入数据行组调入该计算节点的处理器缓存进行排序以得到缓存输出数据行组,将该缓存输出数据行组输出至该内存并清空该缓冲区;当该内存满或所有该缓存输出数据行组均已输出至该内存时,将该内存中的该缓存输出行组排序以生成输出数据行组,将该输出数据行组保存至该计算结点的磁盘并释放内存;合并所有该输出数据行组以得到顺序排列的全序输出数据行组。

【技术实现步骤摘要】
一种基于向量化执行的数据库排序方法及系统
本专利技术涉及数据管理领域,具体涉及一种基于向量化执行的数据库排序方法及系统。
技术介绍
在数据库领域中,排序(Sort)是最为重要的操作之一,广泛被用于实现:分组(grouping)、聚合(aggregation)、连接(join)和shuffle等操作。为了处理任意大小的数据集(可能大于内存容量),数据库中的sort一般均指的是外部排序(externalsort)。外部排序算法可分为两个阶段,被称为两阶段多路归并排序(Two-phase,MultiwayMerge-sort,TPMMS),其过程如下:1)基于内存的排序,将需要排序的数据在内存中进行缓存,当无更多可用内存时,进行一次基于内存数据的局部排序,并将结果溢写(spill)到磁盘文件中。2)当所有需要排序的数据都进行完内存排序,形成多个局部序时,采用多路归并算法同时处理多个局部序,并生成最终的、全局的序。向量化执行(VectorizedExecution)是最早在分析型数据库MonetDB中提出的,提升分析类(analytical)查询执行性能的执行引擎优化技术。为了执行一条SQL查询,执行引擎会按照其语义将执行逻辑组织成一棵算子树,如图1A所示,传统执行引擎的算子树每次处理一条记录最终产生结果,而Vectorizedexecution将迭代粒度从一行变成了行组(RecordBatch),如图1B所示,在RecordBatch内逻辑数据行Record(如图2A所示)逐列组织在一起(如图2B所示),并逐列处理。通过将迭代粒度变为每次处理RecordBatch,RecordBatch内按列组织、逐列处理,Vectorizedexecution被证明可以有效提升分析类查询的执行效率。其优势具体在于减少解释执行开销:从每次处理一行变为每次处理行组(N行),函数调用数目减少为原来的1/N;更好的数据局部性和代码局部性,因而可以更好地利用到CPUCache;为编译器和CPU提供了进一步自动优化的可能性。为了在分析型数据库中实现向量执行,其关键问题之一就在于如何高效地实现向量化Sort。TimSort是结合了合并排序(mergesort)和插入排序(insertionsort)的混合排序算法,这种算法首先识别数据中已经存在的顺序,而后利用这些局部序的知识来更高效地排出全序。概括地说,TimSort分成了两个过程:1)识别(排列)大于最小个数序列(identifyruns),顺序扫描要sort的序列,识别其中的有序部分(或对无序数据进行插入排序),使得有序部分长度达到算法设定的最小值(minimumsize);2)将识别出的最小序两两合并(mergesort)最终拿到全序。针对Sort的优化当前有:1、Cache-conscioussort(Cache感知的sort):为了充分利用CPU访问数据时,访问CPUcache速度远快于访问内存速度这一特点,AlphaSort将TPMMS的第一阶段内存局部排序进一步划分成了两个部分:基于cache的排序(将到达的数据缓存在cache中,cache满时排局部序并进行记录)和内存中的归并排序(将基于cache的局部序合并成更大的基于内存的局部序)。缺点在于:AlphaSort是基于行,而非recordbatch的;内存中的归并排序在比较时无法避免对内存的随机访问。2、Vectorizedsort:ApacheDrill是一个基于大规模并行数据库(MPP)架构的数据分析系统,它采用了向量化执行技术来提升查询分析速度。它的内存排序也是两阶段的:对于到达的vectorizedrecordbatch,进行一次局部排序,并将序结果存储在一个数组(sortindexarray)中(数组的每行表示batch中的行在序中的出现位置),当内存满时,根据合并多个序数组,生成一个基于内存的局部序。缺点在于:recordbatch粒度不一定是cache最优;在进行内存排序时,按照序数组(sortindexarray)访问内存中的数据实际上仍是对内存的随机访问,性能很差。
技术实现思路
针对上述问题,本专利技术提出一种向量化执行的数据库排序方法,包括:步骤1,将输入数据向量化为多个输入数据行组;步骤2,在计算节点的内存中开辟大小为最适粒度的缓冲区;步骤3,将该输入数据行组依次追加至该缓冲区的末尾空位;仅当该缓冲区满或所有该输入数据行组均已追加至该缓冲区时,将存入该缓冲区的输入数据行组调入该计算节点的处理器缓存进行排序以得到缓存输出数据行组,将该缓存输出数据行组输出至该内存并清空该缓冲区;重复步骤3直到所有该输入数据行组均已完成排序;步骤4,当该内存满或所有该缓存输出数据行组均已输出至该内存时,将该内存中的该缓存输出行组排序以生成输出数据行组,将该输出数据行组保存至该计算结点的磁盘并释放该内存;重复步骤4直到所有该缓存输出数据行组均已完成排序;步骤5,合并所有该输出数据行组以得到顺序排列的全序输出数据行组。本专利技术所述的数据库排序方法,其中该最适粒度的大小为当前可用的该处理器缓存的大小除以最大排序/重排宽度所得的值;其中该最大排序/重排宽度为所有该输入数据行组的所有排序列宽度总和与最大单列宽度中的最大值。本专利技术所述的数据库排序方法,其中所述步骤3的排序过程具体包括:步骤31,以该缓冲区中的输入数据行组为第一行组,将该第一行组调入该处理器缓存,对该第一行组进行排序以获得对应该第一行组的每行的排序行号并生成第一行号数组;步骤32,根据该第一行号数组对该第一行组进行重新组织,以生成顺序排列的该缓存输出行组;步骤33,将该缓存输出行组输出至内存并清空该缓冲区。本专利技术所述的数据库排序方法,其中所述步骤4的排序过程具体包括:步骤41,以该内存中的缓存输出行组为第二行组,对该第二行组进行排序以获得对应该第二行组的每行的排序行号并生成第二行号数组;步骤42,根据该第二行号数组对该第二行组进行重新组织,以生成顺序排列的该输出数据行组;步骤43,将该输出数据行组保存至该磁盘并释放该内存。本专利技术所述的数据库排序方法,其中步骤3中采用逐列拷贝将该输入数据行组追加至该缓冲区。本专利技术还涉及一种向量化执行的数据库排序系统,其特征在于,包括:向量化模块,用于将输入数据向量化为多个输入数据行组;缓冲区模块,用于在处理器缓存中开辟大小为最适粒度的缓冲区;数据输入模块,用于将该输入数据行组拷贝并依次追加至该缓冲区的末尾空位;缓冲区数据排序模块,用于对缓冲区内的输入数据行组进行排序;其中仅当该缓冲区满时,对存入该缓冲区的输入数据行组进行排序以得到缓存输出数据行组,将该缓存输出数据行组输出至该内存并清空该缓冲区;缓冲区数据输出模块,用于将该缓冲区数据排序模块获得的多个该缓存输出数据行组输出至该内存;其中将该缓存输出数据行组依次追加至该内存的末尾空位;内存数据排序模块,用于对该内存中的缓存输出行组进行排序以生成输出数据行组;其中当该内存满或所有该缓存输出数据行组均已追加至该内存时,将该内存中的缓存输出行组排序以生成输出数据行组。本专利技术所述的数据库排序系统,其中该最适粒度的大小为当前可用的该处理器缓存的大小除以最大排序/重排宽度所得的值;其中该最大排本文档来自技高网
...

【技术保护点】
1.一种向量化执行的数据库排序方法,其特征在于,包括:步骤1,将输入数据向量化为多个输入数据行组;步骤2,在计算节点的内存中开辟大小为最适粒度的缓冲区;步骤3,将该输入数据行组依次追加至该缓冲区的末尾空位;仅当该缓冲区满或所有该输入数据行组均已追加至该缓冲区时,将存入该缓冲区的输入数据行组调入该计算节点的处理器缓存进行排序以得到缓存输出数据行组,将该缓存输出数据行组输出至该内存并清空该缓冲区;重复步骤3直到所有该输入数据行组均已完成排序;步骤4,当该内存满或所有该缓存输出数据行组均已输出至该内存时,将该内存中的该缓存输出行组排序以生成输出数据行组,将该输出数据行组保存至该计算结点的磁盘并释放该内存;重复步骤4直到所有该缓存输出数据行组均已完成排序;步骤5,合并所有该输出数据行组以得到顺序排列的全序输出数据行组。

【技术特征摘要】
1.一种向量化执行的数据库排序方法,其特征在于,包括:步骤1,将输入数据向量化为多个输入数据行组;步骤2,在计算节点的内存中开辟大小为最适粒度的缓冲区;步骤3,将该输入数据行组依次追加至该缓冲区的末尾空位;仅当该缓冲区满或所有该输入数据行组均已追加至该缓冲区时,将存入该缓冲区的输入数据行组调入该计算节点的处理器缓存进行排序以得到缓存输出数据行组,将该缓存输出数据行组输出至该内存并清空该缓冲区;重复步骤3直到所有该输入数据行组均已完成排序;步骤4,当该内存满或所有该缓存输出数据行组均已输出至该内存时,将该内存中的该缓存输出行组排序以生成输出数据行组,将该输出数据行组保存至该计算结点的磁盘并释放该内存;重复步骤4直到所有该缓存输出数据行组均已完成排序;步骤5,合并所有该输出数据行组以得到顺序排列的全序输出数据行组。2.如权利要求1所述的数据库排序方法,其特征在于,该最适粒度的大小为当前可用的该处理器缓存的大小除以最大排序/重排宽度所得的值;其中该最大排序/重排宽度为所有该输入数据行组的所有排序列宽度总和与最大单列宽度中的最大值。3.如权利要求1所述的数据库排序方法,其特征在于,所述步骤3的排序过程具体包括:步骤31,以该缓冲区中的输入数据行组为第一行组,将该第一行组调入该处理器缓存,并对该第一行组进行排序获得对应该第一行组的每行的排序行号以生成第一行号数组;步骤32,根据该第一行号数组对该第一行组进行重新组织,以生成顺序排列的该缓存输出行组;步骤33,将该缓存输出行组输出至内存并清空该缓冲区。4.如权利要求1所述的数据库排序方法,其特征在于,所述步骤4的排序过程具体包括:步骤41,以该内存中的缓存输出行组为第二行组,对该第二行组进行排序以获得对应该第二行组的每行的排序行号并生成第二行号数组;步骤42,根据该第二行号数组对该第二行组进行重新组织,以生成顺序排列的该输出数据行组;步骤43,将该输出数据行组保存至该磁盘并释放该内存。5.如权利要求1所述的数据库排序方法,其特征在于,步骤3中采用逐列拷贝将该输入数据行组追加至该缓冲区。6.一种向量化执行的数据库排序系统,其特征在于,包括:向量化模块,用于将输入数据向量化为多个输入数据...

【专利技术属性】
技术研发人员:申毅杰熊劲
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1