数据迁移与恢复
Data Migration & Recovery
存储架构升级时的安全迁移、幂等执行与数据恢复机制
子问题
1.单体→按项目目录迁移
2.幂等标志位防重复执行
3.遗留数据自动恢复
4.多 Store 协调 rehydrate 顺序
5.Flat Array 型数据按 projectId 字段分流与共享数据分离
6.persist 中间件异步写入与 rehydrate 的竞态防护
7.多存储后端(file/localStorage/IndexedDB)的数据择优合并
各项目的解法1 solutions
Signals
横向对比
| 维度 | moyin-creator |
|---|---|
| 迁移策略 | 三类 Store 差异化迁移:Record 按 key 分流、Flat Array 按 projectId 分流、Timeline 整体赋值 |
| 幂等机制 | _p/_migrated 标志位文件,失败不写标志位自动重试 |
| 数据恢复 | 丰富度对比函数(isRich)检测空数据覆盖,从遗留文件自动恢复 |
| 切换协调 | 5 步顺序 switchProject:等待 → 路由指针 → 7 Store rehydrate → 同步 ID → ensure |
| 存储路由 | 双适配器:ProjectScoped 路由到 _p/{pid}/,Split 分流到 _p/ + _shared/ |
| 多源兼容 | 三源择优适配器:file > localStorage > IndexedDB,自动迁移最丰富数据源 |
最佳实践
1.先写新文件再标记完成
2.旧文件保留作为回退
3.启动时自动检测并恢复被覆盖数据
4.从数据本身提取 projectId 而非全局 Store,防止竞态写错目录
5.等待 project-store hydration 完成后再读取 activeProjectId
6.迁移完成前用 loading 界面阻塞用户操作防止脏读