十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Thunderbolt数据迁移机制详解:data-migrations如何无痛升级本地SQLite

Thunderbolt数据迁移机制详解:data-migrations如何无痛升级本地SQLite Thunderbolt数据迁移机制详解data-migrations如何无痛升级本地SQLite【免费下载链接】thunderboltAI You Control: Choose your models. Own your data. Eliminate vendor lock-in.项目地址: https://gitcode.com/GitHub_Trending/thund/thunderboltThunderbolt 是一款主打「AI You Control」的开源 AI 助手你可以自由选择模型、完全拥有自己的数据摆脱厂商锁定。它把聊天、技能、自动化、设置等全部数据存在设备本地的 SQLite 数据库里并通过端到端加密与多设备同步保护隐私。但应用会持续迭代旧数据结构如何升级答案就是 src/lib/data-migrations/ 目录下的运行时数据迁移data-migrations机制——每次启动自动、幂等、安全地完成本地 SQLite 的无痛升级。为什么本地 SQLite 升级不能靠后端很多项目把迁移放在服务器端跑一段 SQL 就完事。Thunderbolt 做不到原因是它的核心数据列name/description/instruction/prompt/title等是端到端加密的——只有用户自己的设备持有密钥。因此迁移被清晰地分成两层层负责什么在哪里SQL 结构迁移建表、加列、改索引后端 / Drizzle数据迁移本文主角需要读懂用户内容才能做的转换设备端每次应用初始化时运行官方注释写得很直白任何需要理解内容的操作都必须在用户设备上、按用户粒度执行见 index.ts 的注释。一次启动四步走迁移何时执行数据迁移挂在应用初始化流水线的Step 4b时机刻意选在默认值调和reconcileDefaults之后、读取设置之前这样新种子数据例如内置技能已就位迁移做名称冲突检查时不会误判。调度入口runDataMigrations 调用点迁移注册表与执行器data-migrations/index.ts四条契约迁移为什么不会搞坏数据每个迁移都要满足DataMigration类型的四条契约契约说明幂等Idempotent每次启动都跑第二次运行必须是无操作no-op跨设备前向兼容两台设备对同一输入必须收敛到相同结果——用确定性 ID 派生冲突时靠 PowerSync 的onConflictDoNothing自然解决最小粒度原子性单行转换包在 Drizzle 事务里杜绝写一半的脏状态功成身退Self-deleting迁移服务完所有活跃用户后通过遥测确认代码会在后续 PR 中删除并留下DELETE ME备注。执行器还有一个关键设计单个迁移失败只记日志、不阻塞其余迁移执行循环失败项在下次启动自动重试——用户全程无感知。实战案例automations-to-skills 自动化批量转技能最典型的迁移是把旧的自动化Automations逐条转成新的技能Skills见 automations-to-skills.ts。它把教科书式细节做到了位内容判空标题和提示词都空的空壳行直接软删除只缺一个字段的行标记为stranded搁置并上报遥测绝不悄悄丢弃可恢复的内容默认值去重未被用户修改过的默认自动化等价技能已由种子流程创建只清理源行、不产生重复副本ID 幂等通过 derive-skill-id.ts 从自动化 ID 确定性派生技能 ID若该技能已存在可能是另一台设备先同步过来的直接跳过——多设备互不冲突名称冲突保守处理slug 重名时跳过并保留源行冲突分支宁可留到下次人工处理也不覆盖用户数据置顶连续性按创建顺序把迁移出的技能置顶到上限为止还原旧的置顶自动化体验。迁移完成后遥测驱动的自我清理每次运行迁移都会上报automations_migration_run遥测事件含migrated/stranded计数上报点。当全量用户的计数收敛到 0 且无搁置行团队才会删除旧表和相关代码对应内部工单 THU-560。这就是第 4 条契约功成身退的落地方式——迁移代码是临时的数据永远是永久的。快速定位相关源码导航迁移注册表与执行器src/lib/data-migrations/index.ts自动化转技能src/lib/data-migrations/automations-to-skills.ts技能默认哈希刷新src/lib/data-migrations/restamp-skill-default-hashes.ts挂件技能哈希刷新src/lib/data-migrations/restamp-widget-skill-default-hashes.ts初始化调度src/hooks/use-app-initialization.ts默认值调和迁移的前置步骤src/lib/reconcile-defaults.ts小结Thunderbolt 的 contenteditable="false">【免费下载链接】thunderboltAI You Control: Choose your models. Own your data. Eliminate vendor lock-in.项目地址: https://gitcode.com/GitHub_Trending/thund/thunderbolt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表