1. 项目目标
本项目旨在设计并实现一个基于Java的高性能、轻量级的关系型数据库,全面支持SQL ANSI 92标准,同时提供现代数据库特性(如JSON支持和MVCC事务)。通过纯Java实现,确保跨平台性和无外部依赖,适用于嵌入式应用场景。项目的核心目标包括:
- 性能最优:在嵌入式场景下,超越主流嵌入式数据库(如H2、SQLite)的性能表现。
- 功能完整:支持SQL ANSI 92标准的完整功能,包括DDL、DML、事务和复杂查询。
- 易用性:实现标准的JDBC驱动,兼容现有数据库工具和框架。
- 扩展性:支持JSON数据类型和现代并发控制机制,为未来功能扩展奠定基础。
2. 功能需求
2.1 SQL ANSI 92完整支持
- 数据定义语言(DDL):
CREATE TABLE
、DROP TABLE
、ALTER TABLE
。- 支持约束:
PRIMARY KEY
、FOREIGN KEY
、NOT NULL
等。 - 示例:
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
。
- 数据操纵语言(DML):
INSERT
、SELECT
、UPDATE
、DELETE
。- 支持复杂查询:
WHERE
、ORDER BY
、GROUP BY
、HAVING
、JOIN
(INNER、LEFT、RIGHT)、UNION
、子查询
。 - 示例:
SELECT name FROM users WHERE id > 10 ORDER BY name;
。
- 事务支持:
- 实现ACID属性,支持
BEGIN
、COMMIT
、ROLLBACK
。 - 使用MVCC(多版本并发控制)实现高效并发。
- 实现ACID属性,支持
2.2 JSON支持
- 支持JSON数据类型的存储和操作。
- 提供JSON查询函数,如
JSON_EXTRACT
、JSON_CONTAINS
。 - 示例:
SELECT JSON_EXTRACT(data, '$.name') FROM users WHERE JSON_EXTRACT(data, '$.age') > 18;
。
2.3 JDBC驱动
- 实现标准的JDBC接口(
java.sql.Driver
、Connection
、Statement
等)。 - 支持通过JDBC URL连接数据库,如
jdbc:lightweight:db
。 - 兼容SQL客户端工具(如DBeaver)和Java ORM框架(如Hibernate)。
3. 非功能需求
- 高性能:
- 插入、查询和事务处理的吞吐量和延迟优于H2和SQLite。
- 针对嵌入式场景优化(如内存占用少、启动时间短)。
- 轻量化:
- 无外部依赖,单Jar包部署。
- 内存占用可控,支持小规模设备。
- 可移植性:
- 纯Java实现,跨平台运行(Windows、Linux、macOS)。
- 可维护性:
- 模块化设计,便于调试和扩展。
4. 与主流嵌入式数据库的对比
为了明确本项目的定位和优势,我们将其与主流嵌入式数据库H2和SQLite进行对比:
特性 | 本项目 | H2 | SQLite |
---|---|---|---|
语言 | Java | Java | C |
SQL支持 | ANSI 92完整支持 | ANSI 92大部分支持 | ANSI 92部分支持 |
JDBC支持 | 是(原生实现) | 是 | 是(需桥接) |
事务支持 | MVCC | MVCC | WAL(日志) |
JSON支持 | 原生完整支持 | 部分支持(需扩展) | 有限支持 |
依赖性 | 无 | 无 | 无(但JDBC需额外库) |
性能 | 目标:最优 | 高(内存模式强) | 高(文件模式强) |
内存占用 | 低 | 中等 | 低 |
启动时间 | 快 | 中等 | 快 |
4.1 H2分析
- 优点:纯Java实现,支持JDBC和MVCC,适合Java生态。
- 缺点:内存占用较高,JSON支持需额外配置,嵌入式场景启动较慢。
- 本项目改进:优化内存使用,提供原生JSON支持,缩短启动时间。
4.2 SQLite分析
- 优点:极轻量,文件存储高效,广泛应用。
- 缺点:C语言实现,JDBC需桥接,JSON支持较弱,事务并发性能有限。
- 本项目改进:Java原生,增强JSON功能,MVCC提升并发性能。
4.3 本项目优势
- 性能目标:通过内存映射文件、B+树索引和并行执行,超越H2和SQLite。
- 功能完整性:全面支持ANSI 92和JSON,弥补SQLite短板。
- 生态兼容性:JDBC原生支持,无需桥接,优于SQLite。
5. 初步架构图
以下是本项目的初步架构图,展示了系统的主要组件及其交互流程:
graph TD
A[客户端<br>(JDBC/SQL工具)] -->|SQL语句| B[JDBC驱动]
B --> C[SQL解析器]
C -->|AST| D[查询优化器]
D --> E[执行引擎]
E -->|读/写| F[存储引擎<br>(MVCC支持)]
F --> G[内存/文件存储]
E --> H[事务管理器<br>(MVCC)]
H --> F
- JDBC驱动:接收用户SQL请求,桥接外部应用。
- SQL解析器:将SQL解析为抽象语法树(AST)。
- 查询优化器:优化执行计划。
- 执行引擎:执行SQL操作。
- 存储引擎:管理数据存储,支持MVCC。
- 事务管理器:确保事务一致性。
6. 项目意义
- 学术价值:探索SQL标准实现的完整性和现代数据库技术的结合。
- 实用价值:为嵌入式应用(如IoT设备、小型服务器)提供高性能数据库解决方案。
- 技术挑战:在轻量化和高性能之间找到平衡,实现MVCC和JSON的高效支持。
7. 下一步展望
本系列后续将深入探讨系统架构设计、JDBC驱动实现、MVCC事务机制、JSON支持的具体实现,以及性能优化的技术细节。通过逐步构建和测试,确保项目目标的实现。
总结
第一篇明确了项目的目标和需求,强调了SQL ANSI 92的完整支持、JDBC驱动、MVCC事务、JSON功能和高性能要求。通过与H2和SQLite的对比,凸显了本项目的独特定位,并通过Mermaid图初步展示了系统架构。下一篇文章将进入“系统架构设计”,详细规划模块和实现技术。