release: v0.6.0 — 完全移除 IndexedDB,自研 KVStore 事务存储引擎(多key原子写/快照日志恢复/CRC自愈)+ KVStoreEngine + 旧库迁移工具 + 10万级压力验证 + 崩溃注入e2e
This commit is contained in:
@@ -2,6 +2,59 @@
|
||||
|
||||
All notable changes to MetonaSqlark will be documented in this file.
|
||||
|
||||
## [0.6.0] - 2026-08-10
|
||||
|
||||
### 里程碑:完全移除 IndexedDB,自研 KV 事务存储引擎
|
||||
|
||||
> 达成"彻底删除 IndexedDB + 自研类似 IndexedDB 的存储后端"目标:
|
||||
> KVStore 引擎在 OPFS 之上实现多 key 原子事务(IndexedDB 的核心能力),
|
||||
> disk 模式全面切换,旧库一键迁移。
|
||||
|
||||
### Added
|
||||
|
||||
- **KVStore 自研 KV 事务引擎**(`src/engine/kvstore/`):
|
||||
- 多 key 原子写:putMany/deleteMany = 单条日志记录(单文件 COW 原子追加)→ 崩溃全有或全无
|
||||
- 持久化与崩溃恢复:快照(checkpoint)+ 追加日志,两阶段恢复(快照水位跳过)
|
||||
- 自愈:快照损坏回退全量日志重放;日志损坏截断至损坏处;`repair()` 清理
|
||||
- 容错时序:checkpoint = 写快照 → 写 meta → 清空日志(meta 先于截断,任何崩溃窗口不丢数据)
|
||||
- 写操作与 checkpoint 串行队列(无交错窗口);标准 CRC-32 全程校验
|
||||
- 介质层:OPFS(浏览器)/ SharedMemoryBackend(Node/测试,跨实例共享模拟持久化)
|
||||
- **KVStoreEngine**(disk 模式,替代 IndexedDBEngine + OPFSEngine):
|
||||
- 内存热路径 + KVStore 原子持久化;读 O(1),写增量/整表 diff 分级
|
||||
- 事务:内存快照 + commit 原子 flush(受影响表),事务内 DDL 支持(schema 一并持久化)
|
||||
- 外键级联(CASCADE/SET NULL/RESTRICT)持久化、主键变更、二级索引跨重启恢复
|
||||
- `reload()` 支持多标签页同步重载(Hybrid 场景)
|
||||
- **迁移工具** `migrateFromIndexedDB()`:一次性把旧 IndexedDB 库(schema/索引/行)导入新引擎;
|
||||
旧库不存在/aria 私有格式(SSTable/WAL)明确报错;目标库已有表跳过不覆盖
|
||||
- **可靠性强化**:
|
||||
- 10 万 key 写入+checkpoint+重开全量验证(928ms)
|
||||
- 5 万混合操作+崩溃模拟零丢失
|
||||
- e2e 新增写入中途崩溃 / checkpoint 前后崩溃注入(9 用例)
|
||||
- **`MetonaSqlark` 配置**:`diskEngine` 类型收敛为 `'opfs' | 'memory'`(默认 'opfs')
|
||||
|
||||
### Removed
|
||||
|
||||
- `src/engine/indexeddb.ts`(840 行 IndexedDBEngine)—— 版本冲突/blocked 重试/onversionchange/flushToIDB 全部消失
|
||||
- `src/engine/opfs.ts`(375 行 OPFSEngine)—— 能力被 KVStoreEngine 覆盖
|
||||
- `IndexedDBBackend`(aria 后端)—— aria storageBackend 收敛为 'opfs' | 'memory'
|
||||
- 26 个测试文件的 fake-indexeddb 依赖改造为 KVStore SharedMemory / OPFS mock
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Hybrid 多标签页重载失效**(KVStoreEngine 读内存 vs 磁盘引擎读穿透)—— 新增 `reload()` 从介质重载
|
||||
- **事务内 DDL schema 不持久化**—— commit 时统一 persistSchema(重启后表结构完整)
|
||||
- **repair 缓存掩盖损坏**—— 先清 BufferPool 再校验(缓存中"完好页面"不再掩盖磁盘损坏)
|
||||
- **dropInvalidSSTable 孤儿页面**—— 先删数据文件再删 meta(页面化删除依赖 pageIds 定位)
|
||||
|
||||
### Changed
|
||||
|
||||
- 测试 1009 → **1021**(64 套件;+58 新增 kvstore/kvstore-engine/压力/迁移测试,-46 删除/改造 IDB 测试)
|
||||
- 行覆盖率 87.25% → **89.13%**
|
||||
- 浏览器支持收敛到 OPFS 矩阵(Chrome/Edge 102+、Firefox 111+、Safari 15.2+);Node 用内存介质
|
||||
- fake-indexeddb 保留为 devDependency(仅迁移工具测试用)
|
||||
|
||||
---
|
||||
|
||||
## [0.5.1] - 2026-08-10
|
||||
|
||||
### 深度审查:消除假实现/半成品/死代码
|
||||
|
||||
Reference in New Issue
Block a user