这是HyPer的一篇论文(HyPer是由德国莫尼黑大学主导的OLAP、OLTP混合型主内存数据库),介绍了code-gen的具体实现,最初HyPer的code-gen是生成了C++代码,然后使用gcc编译;但编译时间很长,再加上优化时间就更长了,甚至比查询执行时间还长;于是HyPer做了优化,改用LLVM,将code-gen的核心代码转为了LLVM的IR,这个IR是调用LLVM的API生成的,不是手写的所以相对容易一些,对于一些简单的操作是生成了LLVM,于是复杂的操作,如scan、join、sort需要将LLVM和C++混合执行,LLVM可以直接调用C++,所以不存在性能损失;通过最后执行来看,LLVM的code-gen从编译、优化时间,SQL执行时间,都比其他系统有很大提升

阅读全文