电子科技吧 关注:34,415贴子:11,488
  • 0回复贴,共1

怎么通过代码生成提升内存数据库查询性能

只看楼主收藏回复

根据软件基本方法:程序 = 数据结构 + 算法,无疑数据库是可以依托代码生成来提升查询性能的,并且也有数据库在这样实践。
相对于使用传统解释器的数据库执行模型,比如分布式内存数据库RapidsDB嵌入了编译器来生成高效机器代码,从而实现更底层的优化,这个过程不是常规的语法解释器可以实现的。在默认情况下,查询语句会首先被解释,再经过后台异步编译以便在以后的执行中使用。这种方法加速了长时间的复杂查询的执行时间,同时为以后的使用提供了高效的查询计划。
如上所述,RapidsDB在首次处理某个查询语句时,会异步优化并编译查询以备后用。这带来了最小的开销,这与需要处理的数据量大小无关,而是与查询的复杂程度相关。
代码生成过程包括从查询中提取参数,然后将规范化的查询转换为系统定制的数据库中间表示方式。具有相同语法结构的后续请求就可以重用该计划,以便达到优化的效果。
代码生成适用于所有数据操作语言(DML)查询。例如,RapidsDB在CREATE TABLE和ALTER TABLE语句期间生产代码。这些数据定义语言(DDL)产生的编译代码,就可减少类似DML查询的执行时间。
代码生成的架构:代码生成使用专门的编程语言,选用这门语言的原因是使用简单、管理严密。SQL操作符树将会被直接转化为抽象语法树,以化解在查询编译时对昂贵的解析和语义解析的需求。除了语言的简单性以外,其还受益于将许多关系操作作为原语公开,如“索引查找”和标量操作,如“BIGINT加法”。这些操作符是与服务器一起静态编译的,可以很容易地组合成查询。这样,许多编译工作就可以提前完成。


1楼2022-07-28 20:45回复