DRUID VS ANTLR4
测试方法
环境:x86_64,eclipse kepler,jdk 6
测试对象:antlr v4,druid手写sql parser模块
测试过程:分别采用单线程、多线程并发测试。单线程时,比较antlr、druid各自解析1次同一条sql语句的性能;多线程(50线程)时,比较antlr、druid所有线程完成1次同一条sql解析的性能。
测试结果
类别 | 单线程(druid比antlr) | 多线程(druid比antlr) |
简单select | 7倍 | 6倍 |
复杂select | 约200倍 | 约1600倍 |
Insert | 6倍 | 11倍 |
Update | 15倍 | 13倍 |
Delete | 3倍 | 4倍 |
总结
1、性能:druid好于antlr。
2、语法支持:两者皆可实现各类语法,但antlr易于druid实现。目前发现druid没有完全实现pg语法,如int ‘123’类型转换。
3、可维护性:antlr好于druid 特别是体现在新增语法时,修改druid的工作量大于antlr。
4、可读性:antlr好于druid antlr采用独立的语法文件管理语法规则,druid语法规则与代码耦合。
5、关键字支持:两者皆支持。druid需要使用switch语句块穷举。
package com.laudandjolynn.test;
import java.text.NumberFormat;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apac