1. 引言
在前三篇中,我们完成了系统架构设计和JDBC驱动的实现,支持了SQL语句的接收和初步解析。本篇将聚焦执行引擎(execution-engine
模块)的实现,细化其设计与功能。执行引擎是数据库的核心组件,负责协调SQL操作的执行,桥接SQL解析器、查询优化器、存储引擎和事务管理器,确保高效完成DDL、DML和事务操作。
2. 执行引擎的目标与功能
2.1 目标
- 高效执行SQL语句,支持SQL ANSI 92标准。
- 协调各模块(如查询优化器、存储引擎),完成复杂查询。
- 支持事务上下文,确保操作一致性。
- 优化资源使用,提供并行执行能力。
2.2 功能
- DDL执行:处理
CREATE TABLE
、DROP TABLE
等语句。 - DML执行:执行
INSERT
、SELECT
、UPDATE
、DELETE
。 - 事务支持:管理事务开始、提交和回滚。
- 计划执行:运行查询优化器生成的执行计划。
3. 执行引擎的核心设计
3.1 数据结构
执行上下文(ExecutionContext):
- 包含事务ID和其他运行时信息。
1 2 3 4 5 6 7 8 9 10
public class ExecutionContext { private final long txId; private final TransactionManager txManager; public ExecutionContext(long txId, TransactionManager txManager) { this.txId = txId; this.txManager = txManager; } // getter }
执行计划(QueryPlan):
- 由查询优化器生成,执行引擎直接运行(参考第六篇)。
3.2 执行模型
- 操作符模型:将查询分解为操作符(如扫描、过滤、连接)。
- 流水线执行:支持操作符间的流式处理。
- 并行执行:使用线程池处理大查询。
3.3 与其他模块的交互
- SQL解析器:接收AST。
- 查询优化器:获取优化后的计划。
- 存储引擎:执行数据操作。
- 事务管理器:管理事务状态。
4. 执行引擎实现
以下是ExecutionEngine
类的核心实现:
|
|
5. 调整存储引擎以支持更新和删除
为支持UPDATE
和DELETE
,调整StorageEngine
:
|
|
6. 执行流程图
执行引擎的执行流程:
sequenceDiagram
participant J as JDBC驱动
participant E as 执行引擎
participant O as 查询优化器
participant S as 存储引擎
participant T as 事务管理器
participant L as 日志管理器
J->>E: execute(stmt, context)
alt DDL
E->>S: addTable()
S->>L: info("Table created")
else DML (SELECT)
E->>O: optimize(stmt, txId)
O-->>E: QueryPlan
E->>S: execute(plan, txId)
S-->>E: List<Map>
else DML (INSERT/UPDATE/DELETE)
E->>S: executeInsert/Update/Delete(stmt, txId)
S->>T: addToUndoLog()
S->>L: logWAL()
end
E-->>J: Result
- 流程说明:
- JDBC驱动调用执行引擎处理语句。
- DDL直接操作元数据,DML根据类型调用优化器或存储引擎。
- 写操作记录WAL日志和事务回滚信息。
7. 测试示例
|
|
8. 下一步展望
下一篇文章将实现“事务管理器”,设计MVCC机制,与执行引擎和存储引擎集成,确保并发一致性。
总结
新调整的第四篇细化了执行引擎的设计与实现,支持DDL和DML的执行,引入并行处理和操作符模型。Mermaid图展示了执行流程,与其他模块的协作增强了系统的完整性。后续篇章编号顺延,第五篇将变为事务管理器实现。