跳到主要内容

~/posts · 2026.10.25

每次打开目录都等 S3,我把本地库接了进来

文件列表先从本地 SQLite 读取,待同步操作放进 outbox,远端继续保存加密记录。

1 分钟 devshan

文件列表刚看过,再打开还得等一次远端元数据。网络稍微差一点,整个页面就空着等。我原先在界面里加缓存,后来发现任务和同步也需要持久状态,干脆把这部分收进了 Go 核心的 SQLite。

SQLite 保存当前设备的查询数据、任务和同步进度。S3 继续存加密元数据与操作记录,两台设备通过这些记录交换变化。新设备从远端基线建立本地视图,已有设备先显示本地内容,再拉后续更新。离线时也能查看已经缓存的目录,需要联网的操作则显示离线状态。

改完的数据先记在本地

修改文件后,待发布操作先进入 outbox。接收端拉取、应用,再记下处理位置。为了避免每次重扫历史,我补了持久游标和设备确认,回收旧操作时参考活跃设备的进度,并保留一段时间。

长期离线的设备回来后可能需要重建基线。当前冲突处理也依赖时间和设备状态,时钟严重漂移还需要单独处理。

本地库还有一处隐私问题:文件名、路径和待发布内容原先直接存在磁盘上。我用主密钥派生的密钥加密了这些字段,查询和镜像读取也相应调整。加密范围是这些业务字段,SQLite 的其他结构照旧。

现在页面关闭以后,待发布操作和同步进度仍然在,程序重启可以从上次的位置继续。