Huang Codes

Sumiyomi · SwiftData · Spaced Repetition

从查词到复习:Sumiyomi 3.2 为什么先把数据迁移做稳

Sumiyomi 复习与数据迁移

Sumiyomi 最早解决的是一个即时问题:遇到读不出来的日语汉字,粘贴或扫描后马上得到假名。到了 3.2,这个问题开始往后延伸:今天查过的词,过几天还记得吗?

于是我加入了「今日复习」。收藏词会进入间隔重复流程,用户翻开卡片后选择忘记、模糊或记住,系统再安排下一次复习。表面上这是一个学习页面,底层却改变了数据模型:单词不再只有“收藏或未收藏”,还拥有复习阶段、到期时间和学习进度。

真正危险的是旧数据

新安装从空数据库开始,通常很好测。更难的是已经使用了几个月的设备。历史记录、收藏词和查询统计都来自旧结构,升级后还要继续可读,并且不能因为某次迁移失败就清空本地存储。

这次我重做了迁移路径,并用不同历史版本的数据库做升级与重启测试。迁移成功只是第一层,第二层是读取异常时保留原数据、停止危险写入,并把情况明确告诉用户。对本地优先 App 来说,“不上传”不等于天然安全,升级策略同样决定数据是否值得信任。

提醒应该由待办决定

复习提醒没有设计成每天固定催促。只有当天确实有到期单词才通知,点击后直接进入复习;没有内容的日子保持安静。这样通知不是为了提高打开次数,而是缩短一次真实任务的路径。

反馈入口也属于产品闭环

3.2.3 又补上了应用内反馈。过去依赖 Mail App,会遇到用户没有配置邮箱或点击后没有反应的问题。现在可以直接从设置发送意见、bug 和想法,邮箱只在用户希望收到回复时选填。

这轮更新让我更确定:学习功能的价值不只在算法。迁移、提醒、反馈这些看起来不显眼的部分,决定了它能不能从“偶尔好用的工具”变成“可以长期留下的工具”。