diff --git a/README.md b/README.md index 363a414..60c2c5d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ version license coverage - tests + tests

> 基于 TypeScript 的**前端关系型数据库**,支持完整 SQL 查询、Query Builder 链式 API、与 **AriaEngine 自研页面式存储引擎**。 @@ -225,6 +225,51 @@ const { data, loading, refresh } = useSqlarkQuery(db, 'SELECT * FROM users'); --- +## 📊 存储模式对比 + +| 特性 | Memory | Disk (IndexedDB) | Disk (OPFS) | Hybrid | Aria | +|------|--------|------------------|-------------|--------|------| +| **持久化** | ❌ 重启丢失 | ✅ IndexedDB | ✅ OPFS文件系统 | ✅ 内存+磁盘 | ✅ 后端决定 | +| **事务回滚** | ✅ 快照 | ✅ 原子flush | ✅ 快照 | ✅ 双引擎 | ✅ MVCC | +| **二级索引** | ✅ Hash | ✅ Hash | ✅ Hash | ✅ Hash | ✅ LSM | +| **查询性能** | ⚡ O(1) PK | 🟡 O(1) PK | 🟡 O(1) PK | ⚡ O(1) PK | ⚡ O(log n) | +| **数据上限** | 内存限制 | ~2GB(IDB限制) | ~磁盘可用 | ~2GB(IDB) | 内存限制 | +| **浏览器** | 全部 | 全部 | Chrome/Edge 102+ | 全部 | 全部 | +| **适用场景** | 缓存/测试 | 标准持久化 | Chromium专有 | 速度+持久化 | 大规模/分析 | +| **测试覆盖** | 30+ | 30+ | 12 | 15+ | 200+ | + +### Memory 模式 +- **环境**: 所有浏览器、Node.js +- **限制**: 数据不持久化,页面刷新/进程重启后数据丢失 +- **能力**: 完整 CRUD、事务回滚、外键级联、二级索引、SQL 全支持 +- **适用**: 临时数据、单元测试、缓存层 + +### Disk (IndexedDB) 模式 +- **环境**: 所有现代浏览器(Chrome/Firefox/Safari/Edge)、Node.js(fake-indexeddb) +- **限制**: 受浏览器 IndexedDB 配额限制(通常 ~2GB),多标签页需处理版本冲突 +- **能力**: 完整 CRUD、事务原子性(单 IDB 事务包裹)、外键级联、onversionchange 感知 +- **适用**: 标准前端数据库持久化场景 + +### Disk (OPFS) 模式 +- **环境**: **仅限** Chrome 102+ / Edge 102+(Origin Private File System) +- **限制**: Firefox/Safari 不支持 OPFS API;每次写入重写整表 JSON 文件(大表性能差,不建议 >1000 行) +- **能力**: 完整 CRUD、重启自动加载数据、事务回滚 +- **适用**: Chromium 独占场景、小数据集持久化 + +### Hybrid 模式 +- **环境**: 所有浏览器 +- **限制**: 磁盘引擎决定底层限制(IndexedDB ~2GB / OPFS Chrome only) +- **能力**: write-through 双写(内存+磁盘)、提交顺序保证(磁盘优先)、读从内存 +- **适用**: 需要内存速度 + 磁盘持久化的混合场景 + +### Aria 模式 +- **环境**: 所有浏览器(后端可选 IndexedDB / OPFS / Memory) +- **限制**: Memory 后端重启丢失;IndexedDB 后端受配额限制;OPFS 后端仅 Chromium +- **能力**: LSM-Tree 存储引擎、二级索引、MVCC 事务、WAL 崩溃恢复、Bloom Filter、AES-GCM 加密、Savepoint、EXPLAIN、ANALYZE、REINDEX、VACUUM +- **适用**: 大规模数据分析、需要自研引擎可控性的高级场景 + +--- + ## 🌲 AriaEngine — 自研存储引擎 (v0.2.0) AriaEngine 是内置的页面式存储引擎,对标 SQLite 的设计理念: @@ -294,7 +339,7 @@ npm run typecheck # 类型检查 | 指标 | 数值 | |------|------| -| 测试用例 | 543 | +| 测试用例 | 701 | | 测试套件 | 27 | | 行覆盖率 | 91.0% | | SQL 关键字 | 33 | diff --git a/package.json b/package.json index ced7275..b3e3033 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@metona-team/metona-sqlark", - "version": "0.2.5", + "version": "0.2.4", "description": "Frontend SQL database with in-memory and disk dual-mode storage", "type": "module", "main": "dist/metona-sqlark.js", diff --git a/site/demo.html b/site/demo.html index b155378..100d78e 100644 --- a/site/demo.html +++ b/site/demo.html @@ -3,7 +3,7 @@ -🧪 在线演示 — MetonaSqlark v0.2.5 +🧪 在线演示 — MetonaSqlark v0.2.4