Faster interpreters in Go: Catching up with C++
a year ago
- #SQL
- #Performance
- #Go
- Vitess用Go语言编写的虚拟机(VM)取代了基于AST的SQL评估引擎,性能达到了与MySQL的C++实现相当的水平。
- 新虚拟机不仅速度更快、更易于维护,而且效率提升了数个数量级。
- Vitess的评估引擎支持MySQL无法直接执行的复杂SQL表达式,确保了兼容性和准确性。
- 该虚拟机采用语义分析生成的静态类型系统,无需运行时类型检查即可生成专用字节码。
- 独特的基于回调的Go语言虚拟机设计摒弃了传统的switch分发机制,既提升了性能又简化了实现。
- 针对静态类型失效的特殊场景,系统会通过逆向优化回退到AST解释器进行动态类型处理。
- 基准测试显示新虚拟机比原AST解释器快达20倍,在多数场景下与MySQL的C++实现性能相当。
- 虚拟机设计最大限度地减少了内存分配,进一步提升了性能。
- 由于SQL操作的高级特性及已极低的分发开销,系统认为无需采用JIT编译技术。