feat: v0.2.0 AriaEngine 自研存储引擎
- 新增 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:
+44
-39
@@ -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(内存)保证极致速度,Disk(IndexedDB / 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>
|
||||
|
||||
Reference in New Issue
Block a user