同步与归档

基于自有对象存储的多端增量同步(对等协议),以及单向 Markdown 归档——两条独立的通道。

NoteFast 的数据流通围绕一个原则:你的数据存放在你自己的存储里。围绕这个原则有两条相互独立的通道,按需选用:

通道方向内容典型场景
多端同步双向增量完整数据(块状态 + 引用的图片)多台设备保持同一份知识库
Markdown 归档单向推送.md + frontmatter + media可读副本、迁移、便携阅读

两者共用「存储连接」(S3 / WebDAV / 本地目录)与独立前缀,互不干扰。

多端同步

工作方式

多端同步是对等模型:没有中心服务器,所有设备直接读写同一份对象存储(目前为 S3 兼容存储),每一端都是平等的写入者:

  • 发布(publish):本地变更自动导出为增量段(jsonl),按设备分桶——changes/<device_id>/,各端写各自的 namespace,互不覆盖
  • 消费(consume):按 per-device 高水位跳过已消费的段,拉取他端增量后按更新时间 LWW 合并进本地库;本端自己的段不消费
  • 快照(compaction):定期生成全量 snapshot.db,新设备首次拉取即从快照全量恢复,之后走增量合并
  • 媒体:引用的图片一并同步(上传缺失的、拉回远端新增的)

引用的图片经同步后指向同一份 media/,不产生重复存储。

配置

设置 → 备份与归档 → 多端同步

  1. 选择 S3 存储连接(复用备份的连接;同步使用独立前缀 {prefix}sync/
  2. 启用同步——本端变更自动发布;远端变更按周期合并,也可手动「立即同步」
  3. 拉取模式:全量恢复(首次 / 重建本地库)或增量合并(日常对账)

设备管理

已连接设备列表显示每台的注册信息与落后条数。「移除」仅删除注册记录——持有存储凭证的设备仍能直连,要真正拦截请更换存储凭证。

冲突

两端同时改同一条内容时按 LWW(last-write-wins,按更新时间) 裁决,不会出现半合并状态;被覆盖一侧的旧版本仍可通过历史版本找回(删除以 tombstone 形式同步,回收站语义保持一致)。

首次接入建议:先在其中一端配好 AI / 图床等设置并完成一轮备份,再让其他设备以「全量恢复」拉取,减少初始增量段的体积。

Markdown 归档

把文档以 .md 单向推送出去,定位是便捷迁移 / 自包含副本,不是备份:

  • 目标三选一:LocalFS / S3 / WebDAV
  • 路径:<首标签|untagged>/<标题 slug>--<docId前缀>.md(一层标签目录)
  • 图片:引用的 media 一并推送,asset:<sha256> 改写为相对路径 ../media/<sha><ext>,脱离 NoteFast 也能看
  • frontmatter:tags / 时间 / notefast_id
  • 清单 notefast-archive.manifest.json 负责清理已删除 / 改名文档的陈旧文件

仅手动触发(或配置周期任务),状态(lastRunAt / lastError / lastResult)可在设置页查看。

归档只含正文与 frontmatter,会丢失引用图、向量等关系数据。它是可读副本与内容主权的保障,完整灾备请使用数据库备份

文档分享

单篇文档可生成只读公开链接,支持 1 / 7 / 30 天过期(默认永久)。关闭分享后旧链接立即失效;重新开启会生成全新链接,旧链接不可恢复。分享页与阅读页使用同一套渲染器,排版一致。