JQuick-SQL 模块架构:从 SQL AST 到分布式执行
Meta 描述:梳理 jquick-sql 的 core、parser、plan、proto、query、runtime 六个模块,理解 Java SQL 查询引擎的真实处理边界。
标签:jquick-sql 架构、SQL AST、逻辑计划、物理计划、Coordinator Worker、Java SQL 查询引擎
官网示例:
- FORMULAS 示例页:https://www.jquick.org/jquick-sql
- github 地址:https://github.com/paohaijiao/jquick-sql
前言
理解模块边界,才能在数据中台中正确扩展 jquick-sql,而不把 SQL 语法、计划优化和执行调度混在一起。该项目通过六个 Maven 模块串起 SQL 的完整处理链。
六个模块的职责
jquick-sql-core:配置、枚举、数据源管理、统计与工具类。jquick-sql-parser:词法/语法分析、AST 节点、Visitor 与JQuickSQLExecutor。jquick-sql-plan:AST→逻辑计划、优化规则、逻辑→物理计划。jquick-sql-proto:执行层的 Protobuf 与 gRPC 定义。jquick-sql-query:Fragmenter、Coordinator、Worker、分区和表达式执行。jquick-sql-runtime:JQuickSQL门面、XML 动态代理、函数 SPI 与 DTD。
计划如何流转
text
SQL → Parser/AST → Logical Plan → Optimizer → Physical Plan
→ Fragmenter → Coordinator → Worker → JQuickDataSet
逻辑优化器包含谓词下推、投影下推、Join 重排序、常量折叠等规则;随后物理计划被切分为 Fragment,通过 Coordinator-Worker 模型执行。
代码入口示例
java
import com.github.paohaijiao.executor.JQuickSQLExecutor;
import com.github.paohaijiao.ast.JQuickQueryNode;
JQuickQueryNode ast = new JQuickSQLExecutor().execute(
"SELECT dept, COUNT(*) FROM emp GROUP BY dept"
);
System.out.println(ast);
只需要 SQL 审计或语句结构分析时,可停留在 Parser/AST 层;需要执行已注册数据集时,再使用 Runtime 门面。
设计边界
jquick-sql 是轻量级 SQL 引擎,不是 JDBC 数据访问框架。异构数据源联邦查询需要先经接入组件形成数据集,再由 Query/Runtime 层统一计划和执行。这样可避免把驱动、连接管理和 SQL 计划耦合到同一模块。
常见问题
**业务服务应该直接依赖所有模块吗?**一般引入 runtime 即可。
**SQL 优化发生在哪里?**主要在 jquick-sql-plan。
**Worker 负责解析字符串吗?**Worker 接收片段计划并执行,解析入口在 Parser/Runtime 侧。
总结与拓展
模块化架构让团队能按"语法---计划---执行"分层定位问题,也能更安全地扩展 Java 跨库查询的数据接入链路。
Core Advantage
Clear separation between syntax analysis, planning, transport, and execution.
Applicable Scenarios
Custom query engines, SQL governance, embedded analytics, and distributed execution experiments.