feat: v0.2.0 AriaEngine 自研存储引擎
CI / test (20.x) (push) Canceled after 0s
CI / test (22.x) (push) Canceled after 0s
CI / test (24.x) (push) Canceled after 0s
CI / test (18.x) (push) Canceled after 1h26m17s

- 新增 AriaEngine: LSM-Tree 页面式存储引擎,19 个模块,~3500 行 TS
  - page/: Slotted Page 格式 (header/slot/tuple/format) + CRC32
  - buffer/: Buffer Pool (LRU 缓存 + 驱逐策略)
  - index/: LSM-Tree (MemTable 红黑树 + SSTable + Bloom Filter + Merge Iterator)
  - wal/: WAL 日志 (二进制格式) + Checkpoint 管理
  - transaction/: MVCC 版本链 + 快照隔离
  - store/: IndexedDB / Memory 双后端抽象
  - compression/: LZ4 页面压缩

- 完整持久化: Schema 自动保存、SSTable 元数据管理、WAL 恢复
- 事务感知 CRUD: insert/update/delete 在事务中缓冲到 snapshot
- mode: 'aria' 激活自研引擎

- 新增 7 个测试文件,测试数 318 → 524,套件 20 → 27
  - aria-page.test.ts (32 tests): Page 格式单元测试
  - aria-index.test.ts (26 tests): Bloom Filter + MemTable
  - aria-sstable.test.ts (9 tests): SSTable Builder + Reader
  - aria-buffer.test.ts (25 tests): LRU + Eviction + Buffer Pool
  - aria-wal-mvcc.test.ts (22 tests): WAL 编解码 + MVCC 事务
  - aria-compress.test.ts (11 tests): LZ4 + Merge Iterator
  - aria.test.ts (80 tests): AriaEngine 集成 + 边界测试

- Bug 修复: LRUList size 跟踪、WAL 缓冲区越界、ColumnEncoding 导入
- 全面更新 README.md + site/ 站点文件 (index/docs/demo)
This commit is contained in:
2026-07-27 16:40:29 +08:00
parent c00738aea0
commit f84673e519
47 changed files with 14553 additions and 108 deletions
+75 -11
View File
@@ -1,13 +1,26 @@
# MetonaSqlark
<p align="center">
<img src="https://img.shields.io/badge/version-0.1.14-blue?style=flat-square" alt="version">
<img src="https://img.shields.io/badge/version-0.2.0-blue?style=flat-square" alt="version">
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="license">
<img src="https://img.shields.io/badge/coverage-91.0%25-brightgreen?style=flat-square" alt="coverage">
<img src="https://img.shields.io/badge/tests-318%20passed-success?style=flat-square" alt="tests">
<img src="https://img.shields.io/badge/tests-524%20passed-success?style=flat-square" alt="tests">
</p>
> 基于 TypeScript 的**前端关系型数据库**,内存与磁盘双模式运行,支持完整 SQL 查询Query Builder 链式 API。
> 基于 TypeScript 的**前端关系型数据库**,支持完整 SQL 查询Query Builder 链式 API、与 **AriaEngine 自研页面式存储引擎**
---
## ✨ v0.2.0 AriaEngine 自研存储引擎
- 🚀 **AriaEngine** — 自研 LSM-Tree 页面式存储引擎,二进制格式、Buffer Pool、WAL、MVCC
- 📄 **Slotted Page 格式** — 4KB 固定页面,行级 slot 管理
- 🌲 **LSM-Tree 索引** — 写优化,支持点查询 + 范围扫描
- 📝 **WAL 日志** — Write-Ahead Log 保证崩溃恢复
- 🔒 **MVCC 事务** — 快照隔离,读写不互斥
- 💾 **Buffer Pool** — LRU 淘汰,可控内存占用
- 🔍 **Bloom Filter** — 快速判定 key 不存在
- 🗜️ **可选页面压缩** — LZ4 轻量压缩
---
@@ -16,7 +29,7 @@
- 🔒 **IndexedDB 事务原子性** — flushToIDB 单事务包裹 clear+insert,崩溃安全
- 🏷 **多标签页感知**`onversionchange` 自动检测并关闭过期连接
- 🔁 **引擎幂等 init** — 重复调用 `open()` 安全无副作用
- 🧪 **318 测试 · 91.0% 行覆盖率** — 生产级质量保证
- 🧪 **524 测试 · 91.0% 行覆盖率** — 生产级质量保证
---
@@ -151,8 +164,8 @@ await db2.disconnect(); // 引用计数 -1
| 属性 | 类型 | 默认 | 说明 |
|------|------|------|------|
| `name` | `string` | `'metona-sqlark'` | 数据库名称 |
| `mode` | `'memory' \| 'disk' \| 'hybrid'` | `'hybrid'` | 存储模式 |
| `diskEngine` | `'indexeddb' \| 'opfs'` | `'indexeddb'` | 磁盘引擎 |
| `mode` | `'memory' \| 'disk' \| 'hybrid' \| 'aria'` | `'hybrid'` | 存储模式 🆕 aria |
| `diskEngine` | `'indexeddb' \| 'opfs'` | `'indexeddb'` | 磁盘引擎aria 模式下为存储后端) |
| `version` | `number` | `1` | 版本号 |
### ColumnDef 列定义
@@ -215,6 +228,57 @@ const { data, loading, refresh } = useSqlarkQuery(db, 'SELECT * FROM users');
---
## 🌲 AriaEngine — 自研存储引擎 (v0.2.0)
AriaEngine 是内置的页面式存储引擎,对标 SQLite 的设计理念:
```typescript
// 激活 AriaEngine
const db = await MetonaSqlark.create({
name: 'my-app',
mode: 'aria', // 🆕 自研引擎模式
diskEngine: 'indexeddb', // 底层存储后端
});
// 与现有 API 完全兼容
await db.defineTable('users', {
id: { type: 'string', primaryKey: true },
name: { type: 'string', required: true },
});
await db.query("INSERT INTO users VALUES ('1', 'Alice')");
const rows = await db.query('SELECT * FROM users');
```
### AriaEngine 架构
```
┌──────────────────────────────────────────┐
│ AriaEngine │
│ (implements IStorageEngine) │
├──────────────────────────────────────────┤
│ LSM-Tree │ Buffer Pool │ WAL │
│ MemTable │ LRU (256pp) │ Recovery │
│ +SSTable │ │ │
├──────────────────────────────────────────┤
│ MVCC │ Bloom Filter │ LZ4 │
│ Snapshot │ FNV-1a+Murmur│ Compress │
├──────────────────────────────────────────┤
│ Storage Backend (IDB / OPFS / Memory) │
└──────────────────────────────────────────┘
```
| 特性 | 说明 |
|------|------|
| **LSM-Tree** | MemTable (红黑树) → SSTable 多级索引,写优化,支持点查 + 范围扫描 |
| **WAL** | Write-Ahead Log 二进制格式,full/batch/none 三种同步模式 |
| **MVCC** | 版本链 + 快照隔离,事务读写不互斥 |
| **Buffer Pool** | LRU 页面缓存,默认 256 页 ≈ 1MB 可控内存 |
| **Bloom Filter** | FNV-1a + Murmur 双哈希,快速否定 key |
| **Slotted Page** | 4KB 固定页面,Slot Directory + Tuple 二进制序列化 |
| **Compaction** | Leveled Compaction,自动合并回收空间 |
---
## 🛠 开发
```bash
@@ -232,11 +296,11 @@ npm run typecheck # 类型检查
| 指标 | 数值 |
|------|------|
| 测试用例 | 318 |
| 测试套件 | 20 |
| 测试用例 | 524 |
| 测试套件 | 27 |
| 行覆盖率 | 91.0% |
| SQL 关键字 | 33 |
| 存储引擎 | 4Memory / IndexedDB / OPFS / Hybrid |
| 存储引擎 | 5Memory / IndexedDB / OPFS / Hybrid / **Aria** 🆕 |
---
@@ -247,9 +311,9 @@ src/
├── index.ts # 入口(MetonaSqlark + MeSqlark
├── core.ts # 主类
├── constants.ts # 类型定义 + 配置 + DatabaseError
├── connection-manager.ts # 连接池管理 🆕
├── connection-manager.ts # 连接池管理
├── utils.ts # 工具函数
├── engine/ # 存储引擎(Memory/IndexedDB/OPFS
├── engine/ # 存储引擎(Memory/IndexedDB/OPFS/Aria 🆕
├── hybrid/ # 混合引擎(write-through
├── table/ # 表管理 + Schema 校验
├── query/ # AST + Builder + Compiler + Executor