同步与归档
基于自有对象存储的多端增量同步(对等协议),以及单向 Markdown 归档——两条独立的通道。
NoteFast 的数据流通围绕一个原则:你的数据存放在你自己的存储里。围绕这个原则有两条相互独立的通道,按需选用:
| 通道 | 方向 | 内容 | 典型场景 |
|---|---|---|---|
| 多端同步 | 双向增量 | 完整数据(块状态 + 引用的图片) | 多台设备保持同一份知识库 |
| Markdown 归档 | 单向推送 | .md + frontmatter + media | 可读副本、迁移、便携阅读 |
两者共用「存储连接」(S3 / WebDAV / 本地目录)与独立前缀,互不干扰。
多端同步
工作方式
多端同步是对等模型:没有中心服务器,所有设备直接读写同一份对象存储(目前为 S3 兼容存储),每一端都是平等的写入者:
- 发布(publish):本地变更自动导出为增量段(jsonl),按设备分桶——
changes/<device_id>/,各端写各自的 namespace,互不覆盖 - 消费(consume):按 per-device 高水位跳过已消费的段,拉取他端增量后按更新时间 LWW 合并进本地库;本端自己的段不消费
- 快照(compaction):定期生成全量
snapshot.db,新设备首次拉取即从快照全量恢复,之后走增量合并 - 媒体:引用的图片一并同步(上传缺失的、拉回远端新增的)
引用的图片经同步后指向同一份 media/,不产生重复存储。
配置
设置 → 备份与归档 → 多端同步:
- 选择 S3 存储连接(复用备份的连接;同步使用独立前缀
{prefix}sync/) - 启用同步——本端变更自动发布;远端变更按周期合并,也可手动「立即同步」
- 拉取模式:全量恢复(首次 / 重建本地库)或增量合并(日常对账)
设备管理
已连接设备列表显示每台的注册信息与落后条数。「移除」仅删除注册记录——持有存储凭证的设备仍能直连,要真正拦截请更换存储凭证。
冲突
两端同时改同一条内容时按 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 天过期(默认永久)。关闭分享后旧链接立即失效;重新开启会生成全新链接,旧链接不可恢复。分享页与阅读页使用同一套渲染器,排版一致。