跳转到内容

同步 (Sync)

Eidos 遵循 数据本地优先 (Local-First) 的原则。你的数据默认存储在本地设备上,同步被视为可选的备份和协作工具。

Eidos 的同步方案是渐进式的,你可以根据使用阶段选择合适的方式:

最直接的方式是直接复制 .eidos 目录并粘贴到其他设备的相同位置。由于 Eidos 所有的内容(数据库和文件)都完整存储在该目录下,手动拷贝可以实现最原始的“同步”。

将 Space 物理目录放在 Git 仓库或同步盘(如 iCloud, Dropbox)中是可接受的过渡方案,但它并非最优解:

  • 版本管理缺失:SQLite 是二进制文件而非文本文件,Git 等工具无法实现细粒度的版本对比或合并。
  • 仓库体积爆炸:随着使用,SQLite 文件的任何变动都会导致 Git 产生一份全量的历史记录,导致 Git 仓库体积迅速膨胀。
  • 同步效率低:每次同步都是全量传输大文件,随着数据库增大,同步速度会越来越慢。

为了克服上述局限,Eidos 采用了基于 Graft 的原生同步方案。它将单文件的 db.sqlite3 转化为对象化的存储格式,实现了更高效的增量同步。

Eidos 通过中心化的 S3 兼容存储桶作为中转,实现跨设备的数据同步。同步的核心是 Space 物理目录下的 .eidos 文件夹,它完整包含了数据库的版本历史(.graft)以及所有的静态资源文件(files)。

这种设计确保了你在任何设备上看到的目录结构都是一致的,远程存储桶即是本地物理目录的完整云端镜像。

┌────────────────────────┐
│ Remote S3 Bucket │
│ s3://bucket/my-space/ │
│ └── .eidos/ │
│ ├── .graft/ │
│ └── files/ │
└──────────┬─────────────┘
┌───────────────┴────────────────┐
│ Sync │
┌──────────┴─────────────┐ ┌───────────┴────────────┐
│ macOS │ │ Windows │
│ /Users/mayne/my-space/ │ │ D:\Eidos\my-space\ │
│ └── .eidos/ │ │ └── .eidos\ │
│ ├── .graft/ │ │ ├── .graft\ │
│ └── files/ │ │ └── files\ │
└────────────────────────┘ └────────────────────────┘

开启原生同步后,Eidos 会将单文件的 db.sqlite3 转化为对象化存储格式(存放在 .graft 目录),其目的是实现:

  • 流式传输:仅同步发生变化的增量数据块,无需每次都上传整个数据库大文件。
  • 版本管理:在本地保留历史快照,方便多设备间的合并、回滚及冲突检测。
  • 文件夹my-space/
    • 文件夹.eidos/
      • db.sqlite3 (数据库文件)
      • 文件夹files/ (静态资源)
  • 文件夹my-space/
    • 文件夹.eidos/
      • 文件夹.graft/ (VFS 存储目录)
      • 文件夹files/ (静态资源)

Eidos 的同步机制基于 Graft,其工作流与 Git 非常相似。同步方案主要为单人、多设备切换场景设计,不具备 CRDT 等实时协同系统的自动冲突解决能力。

为减少冲突,推荐在切换设备使用时遵循 Pull → Edit → Push 模式:

Device A Cloud Device B
(Work) (S3) (Idle)
│ │ │
[ Edit ] │ │
│ Push │ │
└──────────────────────▶│ │
│ Pull │
│ │──────────────────────▶│
│ │ [ Edit ]
│ │ Push │
│ │◀──────────────────────┘
  • Pull → Edit:开始工作前,先确保拉取了其他设备的最新改动。
  • Edit → Push:结束工作后,及时将改动推送至云端。
  • 手动冲突解决:如果多个设备同时修改了相同数据,Graft 会识别并提示你进行手动仲裁。

Eidos 支持自定义同步供应商,你可以根据需求选择:

  • eidos.space (官方托管):零配置,登录账号即可使用。数据存储在官方提供的加密 S3 存储桶中,适合追求便捷的用户。
  • 自定义 S3 兼容服务:你可以使用自己的 S3 存储(如 AWS S3, Cloudflare R2, MinIO 等)。这为你提供了完全的数据控制权,适合有自托管需求或已有云存储资源的用户。

了解如何配置自定义同步服务