ReedenReeden
数据同步

同步原理与冲突处理

了解 Reeden 如何对比本地和云端数据,以及多设备同时修改时会怎么处理。

同步不是简单覆盖

Reeden 同步时会对比本地和云端的数据状态,再决定上传、下载、合并、删除或跳过。

大多数情况下,它不是简单地用云端覆盖本地,也不是简单地用本地覆盖云端。

但这也不表示每一个可见字段都能无损拼在一起。不同类型的数据,合并方式不一样。

可以把同步理解为三类处理

按记录取较新

有些内容会把一条记录作为整体处理。两边都改过时,通常以更新时间较新的那条记录为准。

常见例子:

  • 一本书的基础信息
  • 某个设置项
  • 某个阅读主题
  • 某个资源配置

这种方式能避免旧数据覆盖新数据,但不一定能把两台设备上对同一条记录的不同字段自动拼起来。

尽量合并

有些内容天然是一条一条追加的,Reeden 会尽量把两边都保留下来。

常见例子:

  • 设备 A 新增一条笔记,设备 B 新增另一条笔记:两条笔记通常都会保留
  • 设备 A 给书加标签“文学”,设备 B 给同一本书加标签“待读”:标签关系通常会合并
  • 设备 A 新建一个分类或书单,设备 B 新建另一个分类或书单:通常都会保留

特殊处理

有些内容 Reeden 会做额外处理,避免用户感知上“倒退”。

常见例子:

  • 阅读进度:会保留进度历史,方便你手动选择是否跳转
  • 阅读统计:会尽量保留更完整的统计结果,减少阅读时长或字数倒退,见下方说明
  • 书籍分类:会尽量按分类本身的变更时间判断
  • 书评、角色等书籍附加信息:会尽量合并本地和云端的内容

阅读统计为什么会特殊处理

阅读统计不像书名、作者、简介这类普通字段。普通字段通常可以按“哪边更新”来判断,但阅读统计更接近累计记录。用户更关心的是已经读过的时间、字数和日期记录不要被旧设备覆盖掉。

可以这样理解:

  • 设备 A 今天读了 30 分钟
  • 设备 B 昨天也读过 20 分钟
  • 两台设备之后同步时,Reeden 会尽量保留两边能合并的统计结果,而不是简单让其中一台设备覆盖另一台设备

这也是为什么有时你会看到统计结果没有“回到较小值”。例如设备 A 已经统计到 10 小时,设备 B 因为很久没同步只显示 8 小时,设备 B 同步后通常不应该把更完整的统计结果拉回 8 小时。

但这不代表阅读统计永远不会变化,也不代表所有展示数字都能完全一致。下面情况仍可能让统计看起来不同:

  • 某台设备还没有完成同步
  • 两台设备的阅读统计设置或字数统计口径不同
  • 同一本书在不同设备上不是同一条书籍记录
  • 某台设备手动重置、删除或补录过统计
  • 重新分章、编辑正文、替换图书文件或重新提取字数后,展示口径发生变化

如果你遇到统计不增加、换设备后不一致或字数不准,先看 统计记录与口径阅读统计常见问题

书籍信息冲突怎么理解

书籍信息最容易误会。它不是“每个字段都独立同步”,也不是“整本书所有关联信息都只能二选一”。

可以这样理解:

  • 书名、作者、简介、封面等基础信息,通常跟随较新的书籍信息记录
  • 标签、书单关系这类附加关系,会尽量按关系本身合并
  • 分类有单独的变更判断,会尽量保留更新的分类选择
  • 书评、角色等附加信息会尽量合并
  • 图书文件是否下载,取决于是否开启图书文件同步,不等于书籍信息是否存在

例子一:先同步再修改,通常能保留两边结果

  1. 设备 A 把书名改成《新的书名》
  2. 设备 A 完成同步
  3. 设备 B 同步后看到了《新的书名》
  4. 设备 B 又更换了封面
  5. 设备 B 再同步

这种情况下,设备 B 是在最新书籍信息基础上修改封面,同步后通常会同时保留新书名和新封面。

例子二:两台设备离线分别改同一本书,可能无法自动拼接

  1. 设备 A 离线把书名改成《新的书名》
  2. 设备 B 没有同步到这个书名,离线更换了封面
  3. 两台设备之后再同步

这种情况下,Reeden 会根据记录更新时间、删除记录和特殊合并规则处理。封面和书名不一定都能自动拼在一起,较新的书籍信息记录可能成为主版本。

如果你要在多台设备整理同一本书的信息,最稳的做法是:先同步,再换设备继续改。

例子三:标签和笔记更容易合并

  1. 设备 A 给书加标签“文学”
  2. 设备 B 给同一本书加标签“待读”
  3. 两台设备之后同步

这类关系数据通常会尽量合并,所以同步后更可能同时看到两个标签。新增笔记也是类似逻辑。

阅读进度冲突

阅读进度是多设备最常见的冲突来源。

建议做法:

  • 离开设备 A 前同步一次
  • 设备 B 打开书前同步一次
  • 开启「阅读进度单独同步」
  • 开启「打开书时同步」和「关闭书时同步」

如果 Reeden 提示云端有更新进度,请根据自己实际阅读位置选择是否跳转。

如果关闭了自动跳转,或者不想立刻跳转,云端进度会作为当前书的「云端历史」保存。查看路径是:打开这本书,唤出阅读菜单,点击顶部「历史」按钮;如果出现「阅读历史」页签,切到「云端历史」。

没有看到历史按钮时,通常表示当前书还没有可查看的跳转历史或云端历史。看到历史按钮但没有云端进度时,可能只是本机跳转历史,不代表已经拉取到另一台设备的阅读进度。

如果你经常切换设备,请优先开启 实时进度同步

删除冲突

删除不是“本机临时隐藏”。如果删除参与同步,其他设备也可能删除对应数据。

如果你只是想节省当前设备空间,优先使用「移除下载」一类操作。它通常会保留书籍信息和云端数据,只移除当前设备已经下载的图书文件,不等于删除整本书和所有数据。

删除前建议先同步或导出备份。

覆盖类操作要谨慎

如果你选择让云端覆盖本地,当前设备上的本地新数据可能丢失。

如果你选择让本地覆盖云端,其他设备依赖的云端数据可能被替换。

使用覆盖类操作前,请先确认:

  • 哪边数据更完整
  • 是否已经导出备份
  • 是否还有其他设备未同步的新数据
  • 是否真的需要覆盖,而不是普通合并同步

为什么有时同步后看起来没变化

可能原因:

  • 当前设备已经是最新数据
  • 相关文件没有开启同步
  • 图书文件还没有下载到本地
  • iCloud 或第三方云盘还没完成系统层上传
  • 另一台设备的自动同步还没触发
  • 同步失败项还没处理

先看同步历史和错误提示,再决定是否手动同步或重试。