分布式内存列式数据库的生成代码复用匹配管理方法技术

技术编号:21798535 阅读:14 留言:0更新日期:2019-08-07 10:22
本发明专利技术公开了分布式内存列式数据库的生成代码复用匹配管理方法,解决了现有的代码生成和复用方法无法适应表达式的各种复杂情况,对一复杂的等价表达式的匹配和复用,其无法满足情况;并且,未提出关于Pipeline代码的匹配方法的问题。本发明专利技术包括创建映射关系,包括:对数据库中每个生成的代码请求,在缓存复用管理器中创建KV映射关系,KV映射关系表示为

Generation Code Reuse Matching Management Method for Distributed Memory Column Database

【技术实现步骤摘要】
分布式内存列式数据库的生成代码复用匹配管理方法
本专利技术涉及分布式内存列式数据库的编译执行方式下匹配复用以及管理动态生成的代码的方法
,具体涉及分布式内存列式数据库的生成代码复用匹配管理方法。
技术介绍
在经典的数据库火山模型中,执行流程从语法树根节点开始,递归调用子节点处理函数进行处理,到达叶节点后取出相应表的一行数据进行处理并依次返回。在每次递归调用流程中只对一行数据进行处理导致了很差的代码局部性,包括过多的函数调用;还导致了很差的数据局部性,因为每次读取只需要一部分数据,进而使得CPUCache频繁换入换出。因而火山模型极度不适合海量数据的分析处理。在海量数据分析处理系统中(包括SparkSQL等),普遍使用的是向量化(Vectorization)模型,即一种批处理模型。在向量化模型中,每次取出一列或几列进行批处理运算,再对结果与其他列进行运算;其整个流程用有向无环图DAG表示,则一次批处理运算代表一个节点,完成该节点运算后将结果推送到其他节点。这种模型具有很好的代码局部性和数据局部性。但其需要多次大量地将中间结果写入内存(即物化)。于是,一些数据库,如Hyper,提出了Pipeline的执行模型,将多次批处理运算融合到一个Pipeline计算中。在能够融合的多次批处理运算形成的Pipeline中,在单个函数中,每次对单个元组进行计算并传递,最终能减少物化。但Pipeline执行方式的效率提升依赖于:1、需要能够根据执行计划动态生成合适的Pipeline代码,以合并对多个批处理的计算,因为难以在开发时即抽象出各种满足所有功能需求的算子;2、需要将处理代码以及其调用的函数尽可能上提或内联,减少函数调用,提升代码局部性;同时在运行时生成执行代码能利用运行时信息提升代码质量。目前,现有的代码生成和复用方法使用了LLVM对表达式,如聚合函数、排序函数、数据预取函数等进行生成、缓存,并在下次使用时进行查询,其将函数表示为一定的格式字符串以代表函数的功能,如int型的相加表示为类似“INT_PLUS_INT”这样的字符串。但现有的代码生成和复用方法存在如下的缺点:该表示和匹配方法十分粗略,无法适应表达式的各种复杂情况,如对一复杂的等价表达式的匹配和复用,其无法满足情况;并且,未提出关于Pipeline代码的匹配方法。
技术实现思路
本专利技术所要解决的技术问题是:现有的代码生成和复用方法十分粗略,无法适应表达式的各种复杂情况,对一复杂的等价表达式的匹配和复用,其无法满足情况;并且,未提出关于Pipeline代码的匹配方法。本专利技术提供了解决上述问题的分布式内存列式数据库的生成代码复用匹配管理方法,实现对生成代码的映射关系管理方法,包括创建多个属性、属性具体的内容,给出了对Pipeline生成代码的等价性比较方法和对表达式代码的等价性比较方法,以及对含常量表达式进行抽象再生成代码的方法。本专利技术通过下述技术方案实现:分布式内存列式数据库的生成代码复用匹配管理方法,包括:创建映射关系,包括:对数据库中每个生成的代码请求,在缓存复用管理器中创建KV映射关系,KV映射关系表示为<属性,代码标识>;匹配等价性,包括:从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,若匹配成功,则实现代码缓存复用;若匹配失败,则执行创建映射关系。本专利技术的工作原理是:基于现有的代码生成和复用方法十分粗略,无法适应表达式的各种复杂情况,对一复杂的等价表达式的匹配和复用,其无法满足情况;并且,未提出关于Pipeline代码的匹配方法。本专利技术通过上述方案提出一种复用LLVM生成的代码的匹配方法,以及对生成代码的管理方法,首先对每个生成的代码,在缓存复用管理器中创建KV(key-value)映射关系,以便于进行匹配和查找,KV映射关系表示为<属性,代码标识>;然后,从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,若匹配成功,检查新增等价映射,实现代码缓存复用;若匹配失败,则返回执行创建新的映射关系;这里的功能等价性匹配不同于相等匹配,进而能够识别从功能上兼容的代码。进一步地,KV映射关系表示为<属性,代码标识>,基于可能存在多个不同的KV对,其代码标识相同,即多个属性对应同样的代码,因此,属性与代码标识之间是多对一的对应关系。其中:针对生成的代码包括Pipeline代码和表达式代码如下两种:进一步地,针对生成的代码为Pipeline代码,Pipeline代码的<属性,代码标识>映射的属性值包括的内容有(Pipeline长度,各Pipeline节点的功能);匹配等价性,从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,其中,待生成计划代码的属性表示为(Pipeline长度1,各Pipeline节点功能1),已有的代码属性表示为(Pipeline长度2,各Pipeline节点功能2);(1)当Pipeline长度1<=Pipeline长度2,将Pipeline节点功能1组成的功能节点序列1中的每个节点放置到Pipeline节点功能2组成的功能节点序列2中,如果放置后,功能节点序列1仍然保持原有的相对序列则匹配等价性成功;因为对于Pipeline功能序列2中未匹配的点,可以置空并在运行时直接跳过。(2)如果放置结果中相对顺序不严格保持原有顺序,则判断该顺序是否仍能保持正确性,对于连续相同功能的代码节点进行顺序互换。比如,连续的filter节点可以进行顺序互换而不影响正确性。进一步地,针对生成的代码为表达式代码,表达式代码的<属性,代码标识>映射的属性为表达式树形式或者可格式化为字符串形式。(1)在表达式生成时,通过逻辑转换,创建对应代码的多个等价表达式值。比如,“(int+int)*long”等价于“int*long+int*long”。(2)对表达式含常量的,可继续创建生成带常量版和不带常量版,比如针对表达式“int+1024”生成代码后,可检测并另外生成”int+int”的版本并另外创建<属性,代码标识>映射关系。匹配等价性,(1)针对待生成表达式不带常量的,进行相等匹配,这是由于在加入映射关系时已经添加了各种等价性的属性,因而此处的匹配数据相等匹配;(2)针对待生成表达式带常量的,则该常量位置既可以用相应类型的变量匹配也可以用相等的常量进行匹配。其中:LLVM是一个编译器后端框架,提供了便捷地生成LLVMIR语言代码的方法以及将LLVMIR语言代码编译成可执行的工具。从LLVM衍生出的C++编译器clang将C++代码编译成IR代码,进而通过LLVM工具编译成可执行文件。LLVM提供C/C++库以方便地生成LLVMIR语言组成的代码,如函数等。LLVMIR是易读的,类似于汇编但其抽象性隐藏了底层具体硬件特性;LLVMIR也是跨平台的,即同一份LLVMIR可在不同CPU的机器甚至GPU上执行。LLVM提供工具将IR编译成适应特定机器上的可执行代码,也可在按照解释执行方式执行。在测试中发现LLVMIR代码编译时间相对运算时间过长,甚至在部分数据集上计算时超过实际运算时间。本专利技术具有本文档来自技高网
...

【技术保护点】
1.分布式内存列式数据库的生成代码复用匹配管理方法,其特征在于,包括:创建映射关系,包括:对数据库中每个生成的代码请求,在缓存复用管理器中创建KV映射关系,KV映射关系表示为<属性,代码标识>;匹配等价性,包括:从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,若匹配成功,则实现代码缓存复用;若匹配失败,则执行创建映射关系。

【技术特征摘要】
1.分布式内存列式数据库的生成代码复用匹配管理方法,其特征在于,包括:创建映射关系,包括:对数据库中每个生成的代码请求,在缓存复用管理器中创建KV映射关系,KV映射关系表示为<属性,代码标识>;匹配等价性,包括:从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,若匹配成功,则实现代码缓存复用;若匹配失败,则执行创建映射关系。2.根据权利要求1所述的分布式内存列式数据库的生成代码复用匹配管理方法,其特征在于,创建映射关系,对数据库中每个生成的代码请求,在缓存复用管理器中创建KV映射关系,KV映射关系表示为<属性,代码标识>,其中,生成的代码为Pipeline代码,Pipeline代码的<属性,代码标识>映射的属性值包括的内容有(Pipeline长度,各Pipeline节点的功能);匹配等价性,从缓存复用管理器中的KV映射关系读取属性,对待生成计划代码进行功能等价性匹配,其中,待生成计划代码的属性表示为(Pipeline长度1,各Pipeline节点功能1),已有的代码属性表示为(Pipeline长度2,各Pipeline节点功能2);其中,功能等价性匹配,包括:当Pipeline长度1<=Pipeline长度2,将Pipeline节点功能1组成的功能节点序列1中的每个节点放置到Pipeline节点功能2组成的功能节点序列2中,对于Pipeline功能序列2中未匹配的点,进行置空操作,如果放置后,功能节点序列1仍然保持原有的相对序列则匹配等价性成功;如果放置结果中相对顺...

【专利技术属性】
技术研发人员:段翰聪刘长红冯杰闵革勇敖齐平
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

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

1