摘要: 前言 在《数据库系统中的Code Generation技术介绍》中,咱们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提升计算效率。在MaxCompute数据库
前言 网络
在《数据库系统中的Code Generation技术介绍》中,咱们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提升计算效率。在MaxCompute2.0中,咱们又引入了基于LLVM的JIT(Just In Time) Code Generation技术。结合向量化的执行引擎,基于SIMD技术的执行效率优化等方式,较之MaxCompute 1.0,MaxCompute 2.0在性能方便有了较大的提高,具体能够参照《MaxCompute2.0性能评测:更强大、更高效之上的更快速》。分布式
MaxCompute 1.0中的Code Generation函数
如上图,MaxCompute 1.0采用了静态的Code Generation技术,工做主要在MaxCompute控制集群中名为“Executor”的角色上完成。其流程以下:性能
能够看到,利用Code Generation技术,对于每个SQL来讲执行时代码都是通过定制的,所以执行效率较传统的Volcano Model更好。可是,其中也有一些问题。优化
MaxCompute 2.0中的Code Generation翻译
MaxCompute 2.0采用了基于LLVM的JIT Code Generation技术。所谓JIT,就是程序在运行期间根据须要动态生成相应的机器指令。这样,整个Code Generation的工做由控制集群移交到了真正执行计算逻辑的计算集群各个Worker上。其流程以下:指针
与MaxCompute 1.0相比,MaxCompute 2.0中Code Generation速度有明显提高。在1.0中,一个SQL的平均Code Generation耗时大概在2-3s左右,这个时间在2.0中被缩短到100 - 200ms。由于在2.0中Code Generation都在计算集群的Worker上完成,所以相对来讲减轻了控制集群的压力,有助于MaxCompute控制集群的稳定性。此外,由于MaxCompute 2.0的执行引擎是复用的(不由于SQL不一样而不同),所以无需像1.0中同样,在控制集群与计算集群之间传输动态库,下降了控制集群与计算机群之间的网络负载。blog
后续工做内存
目前,MaxCompute 2.0 的执行引擎仍是以Volcano Model为基础。只是在Volcano Model中各个算子之间以Batch模式传递数据,而且以列式执行的方式提升执行速度。基于LLVM的JIT Code Generation如今主要用在表达式计算,Streamline等热点部分。以后,咱们准备尝试Full Stage的Code Generation, 相似http://www.hyper-db.com/。 有兴趣的同窗能够看看这个:http://www.vldb.org/pvldb/vol4/p539-neumann.pdf。 附件中的PDF结合了《数据库系统中的Code Generation技术介绍》和本文的部份内容,有兴趣的同窗能够做为参考。
阅读更多干货好文,请关注扫描如下二维码: