电子科技产品吧 关注:4贴子:92
  • 0回复贴,共1

一起探索内存数据库中代码生成的实现方法

只看楼主收藏回复

根据软件基本方法:程序 = 数据结构 + 算法,那么依托代码生成来提升内存数据库的查询性能十分可行,这篇内容想通过一个实例来为大家介绍如何依托代码生成来提升查询性能,我想举一个RapidsDB的例子。
首先看代码生成的架构。代码生成使用专门的编程语言,选用这门语言的原因是使用简单、管理严密。SQL操作符树将会被直接转化为抽象语法树,以化解在查询编译时对昂贵的解析和语义解析的需求。
除了语言的简单性以外,其还受益于将许多关系操作作为原语公开,如“索引查找”和标量操作,如“BIGINT加法”。这些操作符是与服务器一起静态编译的,可以很容易地组合成查询。这样,许多编译工作就可以提前完成。
接下来,再来看数据库字节编码。编译查询时,RapidsDB首先展开成紧凑的格式,也可以称为RapidsDB字节码。这种格式的执行计划可以轻易的进行序列化、解释或转换为LLVM位代码,以便编译成x86_64机器代码。这种直接解释字节码基本消除了第一次运行查询的成本,但会影响查询执行的性能:

在这个例子中,第一个请求没有额外的延迟产生,因为该查询被解释了。

上面例子的第一个请求的额外延迟是代码生成的结果。但是,后续的请求速度是上门解释执行的速度的两倍。
在RapidsDB的应用项目实例中,在国有大行普惠金融项目应用中,50%左右的查询是结构重复的查询,而RapidsDB依托代码生成的优化特性降低了50%-80%的查询时间,获得很好的使用体验。
好了,代码生成我们介绍到这。


1楼2022-07-28 21:27回复