ReedenReeden
数据同步

同步规则

同步时本地和云端怎么合并、几台设备改了同一样东西会怎样、阅读统计和进度为什么特殊处理、删除怎么传播,以及普通同步和「云端覆盖本地」「本地覆盖云端」的区别。

同步不是简单覆盖

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. 两台设备之后同步

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

阅读进度冲突

阅读进度是多设备最常见的冲突来源。Reeden 不会让旧进度直接盖掉新进度:拉到另一台设备的进度时,按「自动跳转当前书云端进度」的设置直接跳过去,或者存进这本书的「云端历史」由你来选。离开一台设备前同步一次、到另一台设备打开书前同步一次最稳,详见 阅读进度同步。

删除会同步到其他设备

删除不是「只在这台设备隐藏」。书籍、笔记、标签、分类、主题、图集图片这些删掉后,删除记录会跟着同步传到云端和其他设备,其他设备同步后也会删掉。

  • 关着「自动同步」也一样:删书时云端的图书文件会马上删掉,书架上的删除记录在下一次同步时带过去
  • 主题属于元数据,在一台设备删了,其他设备也会删。只是这台设备不想用某个主题,换用别的主题就行,别删
  • 只想腾出这台设备的空间,用「移除下载」:只删本机已下载的图书文件,书籍信息、笔记和云端文件都保留

删除前先同步一次,大量删除前先 导出备份。删错了怎么救,见 误删了书、主题或图片。

普通同步和覆盖的区别

  • 普通同步:书架、「数据同步」页上的「立即同步」,以及自动同步。把本机和云端合并成一份,笔记、书签也会合并;有冲突时不会弹窗让你选,按上面的规则处理
  • 覆盖:手动放弃其中一边。入口在「数据同步」页「立即同步」按钮右侧的下拉箭头里:
    • 「云端覆盖本地」:用云端元数据替换本机,本机多出来的笔记、书籍、标签、分类等记录会被删除。覆盖前会在本机自动建一份元数据备份
    • 「本地覆盖云端」:用本机元数据替换云端,其他设备下次同步会拿到这一份。云端多出来的书籍、字体等文件不会被删除。它不会在本机建备份

想让一台设备拿到另一台的数据:先在数据对的那台设备「本地覆盖云端」,完成后等十几秒,再到另一台设备「云端覆盖本地」。两台设备在身边时,也可以用 从其他设备恢复 直接传过去。

覆盖之前先确认:哪边数据更完整、是否已经导出备份、是否还有其他设备没同步的新数据、是不是普通同步就够了。点错了怎么救,见 同步方向弄反了怎么救。

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

可能原因:

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

先看「历史」里的报错,再决定手动同步还是重试。