英国爱丁堡大学的一篇论文,从传统系统到现代系统的变化一个重要点是:内存增大很多,以前的I/O瓶颈对于现在来说不那么重要了,反而是CPU和内存瓶颈;而之前的火山模型对于CPU利用率来说很不好,大量的虚函数调用,多层级的函数调用增加了cache miss,也会产生更多的指令,不利于并行化和cache局部性;这篇论文提出了一个代码模板,通过识别不同的查询计划算子,来对应的生成不同的代码(对应一个大函数),不同函数之间通过物化来连接,之后通过编译器GCC来编译这段C代码,还可以对代码最O2级别优化(但会增加运行期执行时间)来达到更好的效果,论文对比了join、sort、聚合,虽然使用的是NSM存储模型,但是执行效果来看跟MonetDB的DSM差不多了;代码生成的缺点是对于小查询会有额外的开销(编译、优化、link时间)
阅读全文