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
+44 -39
View File
@@ -152,9 +152,9 @@
<!-- Hero -->
<section class="hero">
<div class="container">
<div class="badge" style="margin-bottom:24px;"><span class="dot"></span> v0.1.14 已发布 — 生产加固:事务原子性 · 多标签页感知 · 幂等 init</div>
<h1>前端的 <span class="gradient-text">SQL 数据库</span></h1>
<p>TypeScript 原生构建,内存与磁盘双模式,支持完整 SQL 查询。<br>零运行时依赖,开箱即用。</p>
<div class="badge" style="margin-bottom:24px;"><span class="dot"></span> v0.2.0 已发布 — AriaEngine 自研存储引擎:LSM-Tree · WAL · MVCC · 页面格式</div>
<h1>前端的 <span class="gradient-text">SQL 数据库</span></h1>
<p>TypeScript 原生构建,5 种存储引擎,支持完整 SQL 查询。<br>零运行时依赖,开箱即用。AriaEngine 自研引擎:LSM-Tree + WAL + MVCC。</p>
<div class="actions">
<a href="demo.html" class="btn btn-primary" style="font-size:1.05rem;padding:14px 32px;">▶ 在线演示</a>
<a href="docs.html" class="btn btn-outline" style="font-size:1.05rem;padding:14px 32px;">📖 API 文档</a>
@@ -230,16 +230,21 @@ npm install @metona-team/metona-sqlark
<p>专为前端打造的数据库引擎</p>
</div>
<div class="feature-grid">
<div class="feature-card">
<div class="icon">🧠</div>
<h3>双模式存储</h3>
<p>Memory(内存)保证极致速度,DiskIndexedDB / OPFS)提供持久化。Hybrid 模式 write-through 策略,读写均在微秒级完成</p>
</div>
<div class="feature-card">
<div class="icon"></div>
<h3>完整 SQL 解析器</h3>
<p>手写递归下降 SQL 解析器。SELECT / INSERT / UPDATE / DELETE / JOIN / GROUP BY / HAVING / DISTINCT / 子查询。</p>
</div>
<div class="feature-card">
<div class="icon">🧠</div>
<h3>5 种存储引擎</h3>
<p>Memory / IndexedDB / OPFS / Hybrid / <strong>AriaEngine</strong> 🆕。Aria 是自研 LSM-Tree 页面式引擎,支持 WAL 崩溃恢复和 MVCC 事务隔离</p>
</div>
<div class="feature-card">
<div class="icon"></div>
<h3>完整 SQL 解析器</h3>
<p>手写递归下降 SQL 解析器。SELECT / INSERT / UPDATE / DELETE / JOIN / GROUP BY / HAVING / DISTINCT / 子查询。</p>
</div>
<div class="feature-card">
<div class="icon">🌲</div>
<h3>AriaEngine <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
<p>自研 LSM-Tree 页面式存储引擎。MemTable 红黑树 + 多级 SSTable、Bloom Filter 快速判存、WAL 崩溃恢复、MVCC 快照隔离。</p>
</div>
<div class="feature-card">
<div class="icon">🔒</div>
<h3>事务回滚 <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
@@ -303,32 +308,32 @@ npm install @metona-team/metona-sqlark
</div>
<div class="code-block" style="text-align:center;font-size:0.82rem;line-height:2;background:transparent;border:none;">
<pre style="color:var(--text2);">
┌─────────────────────────────────────────────────────┐
<span style="color:#f472b6;">MetonaSqlark / MeSqlark</span>
│ create() · query() · table() · tx() │
├──────────┬──────────┬──────────┬──────────┬─────────┤
<span style="color:#c084fc;">SQL Parser</span><span style="color:#c084fc;">QueryBuilder</span><span style="color:#c084fc;">Transaction</span><span style="color:#c084fc;">Plugin</span><span style="color:#c084fc;">Migration</span>
│ Lexer → │ .select() │ Manager │ Manager │ System │
│ Parser │ .where() │ │ 14 hooks │ │
├──────────┴──────────┴──────────┴──────────┴─────────┤
<span style="color:#60a5fa;">QueryExecutor</span> (AST → Results) │
│ JOIN · GROUP BY · HAVING · DISTINCT
├─────────────────────────────────────────────────────┤
<span style="color:#34d399;">IStorageEngine</span> Interface │
├──────────┬──────────┬──────────┬───────────────────┤
<span style="color:#fbbf24;">Memory </span><span style="color:#fbbf24;">IndexedDB </span><span style="color:#fbbf24;">OPFS </span><span style="color:#fbbf24;">Hybrid </span>
│ Engine │ Engine │ Engine │ Engine
│ (Map) │ (IDB) │ (File) │ (Write-through)
└──────────┴──────────┴──────────┴───────────────────┘
</pre>
┌──────────────────────────────────────────────────────────
<span style="color:#f472b6;">MetonaSqlark / MeSqlark</span>
│ create() · query() · table() · tx()
├──────────┬──────────┬──────────┬──────────┬──────────────
<span style="color:#c084fc;">SQL Parser</span><span style="color:#c084fc;">QueryBuilder</span><span style="color:#c084fc;">Transaction</span><span style="color:#c084fc;">Plugin</span><span style="color:#c084fc;">Migration</span>
│ Lexer → │ .select() │ Manager │ Manager │ System
│ Parser │ .where() │ │ 14 hooks │
├──────────┴──────────┴──────────┴──────────┴──────────────
<span style="color:#60a5fa;">QueryExecutor</span> (AST → Results)
│ JOIN · GROUP BY · HAVING · DISTINCT · Subquery
├──────────────────────────────────────────────────────────
<span style="color:#34d399;">IStorageEngine</span> Interface
├──────────┬──────────┬──────────┬──────────┬──────────────┤
<span style="color:#fbbf24;">Memory </span><span style="color:#fbbf24;">IndexedDB </span><span style="color:#fbbf24;">OPFS </span><span style="color:#fbbf24;">Hybrid </span><span style="color:#ec4899;font-weight:bold;">AriaEngine 🆕</span>
│ Engine │ Engine │ Engine │ Engine │ LSM-Tree
│ (Map) │ (IDB) │ (File) │ (W-Thru) │ WAL + MVCC
└──────────┴──────────┴──────────┴──────────┴──────────────┘
</pre>
</div>
</div>
</section>
<section style="background:var(--gradient2);">
<div class="container">
<div class="section-title">
<h2>5 行<span>代码</span>开始</h2>
<p>SQL + Query Builder 双 API — JOIN · 子查询 · 聚合 · 事务回滚 · 外键级联 · 连接池</p>
<h2>5 行<span>代码</span>开始</h2>
<p>SQL + Query Builder 双 API — JOIN · 子查询 · 聚合 · 事务回滚 · 外键级联 · 连接池 · AriaEngine</p>
</div>
<div class="code-block">
<pre><span class="comment">// 创建数据库 — MeSqlark 是别名,完全等价</span>
@@ -388,12 +393,12 @@ npm install @metona-team/metona-sqlark
<p>MetonaSqlark 的核心指标</p>
</div>
<div class="stats">
<div class="stat-card"><div class="num">318+</div><div class="label">测试用例</div></div>
<div class="stat-card"><div class="num">91.0%</div><div class="label">行覆盖率</div></div>
<div class="stat-card"><div class="num">~10KB</div><div class="label">gzip 体积</div></div>
<div class="stat-card"><div class="num">4</div><div class="label">存储引擎</div></div>
<div class="stat-card"><div class="num">33</div><div class="label">SQL 关键字</div></div>
<div class="stat-card"><div class="num">20</div><div class="label">测试套件</div></div>
<div class="stat-card"><div class="num">524+</div><div class="label">测试用例</div></div>
<div class="stat-card"><div class="num">91.0%</div><div class="label">行覆盖率</div></div>
<div class="stat-card"><div class="num">~10KB</div><div class="label">gzip 体积</div></div>
<div class="stat-card"><div class="num">5</div><div class="label">存储引擎</div></div>
<div class="stat-card"><div class="num">33</div><div class="label">SQL 关键字</div></div>
<div class="stat-card"><div class="num">27</div><div class="label">测试套件</div></div>
</div>
</div>
</section>