本人程序猿一枚,最近想找一个趁手的笔记软件,尝试了 Obsidian、Joplin、logseq、为知笔记,但是最喜欢的还是思源笔记,感觉编辑器用起来特别顺手,UI 界面也很是清爽,很多细节都让我深深地感觉到了作者的深思熟虑和工匠精神。遂充值了早鸟,以表敬意。
因为我这边需要在多个客户端间进行数据同步,所以在 NAS 上搭建了 S3,主要是用 PC 为主,偶尔也会用手机写点东西。
单机与服务器同步时很稳定。**但是今天让我吓了一跳,我在 PC 上写了很多笔记,做了很多更改,晚点时间又手机选择“上传本地数据快照”同步后,发现今天在 PC 上写的东西全都不见了,不由得心中一惊,感觉要出事。后来凭着自己多年写代码的经验终于从数据快照中恢复了丢失的笔记。**也幸亏我是能折腾的,换普通人可能都懵了。
因为怕后面又出现丢数据的问题,今晚我专门重现了这个必现的文件丢失问题,现描述如下。
软件基本设定
- 一台 PC 和 一部手机,S3 服务器;
- PC 设置为自动同步,手机设置为完全手动同步;
- 保证当前 PC 和 手机 的内容都一致;
重现步骤
- 在 PC 端新建一个笔记;
- 点击 PC 上的同步按钮强制同步一次;
- 关闭 PC 上的思源笔记;
- 打开手机端的思源笔记;
- 点击手机上的“同步”按钮,在弹出菜单上选择“上传本地数据快照”;
- 退出手机端思源笔记;
- 重新打开 PC 上的思源笔记,并点击“同步”按钮;
- 发现 PC 端上刚才新建的笔记消失了;
问题猜测
对于此问题,我猜测原因是:手机端在执行“上传本地数据快照”时,用自己的快照强制覆盖了服务器端的快照版本。
问题的危害
经常有如下的工作场景:
在 PC 端写了很多的文档,然后正常同步给了服务器。后面手机端打开时,由于选择的是手动同步方式,可能版本已经落后于服务端了,但此时又在手机上写了另外一个文档,习惯性地就点击“上传本地数据快照”,结果手机的文档上传了,但 PC 之前上传的文档就全丢了。
如果当时能发现丢文件了,还可以通过快照恢复回来。但就怕当时没发现丢文件,过了很久才发现自己写的东西找不到了,到时再回去找快照恐怕连几月几日写的都记不清了。
另外,对于非程序员出身的普通用户,当发生数据丢失时,其实是很被动的,虽然可以找论坛、找教程去恢复数据,虽然 D 大也一直强调数据不会丢,但对用户的体验真的很不利,尤其是对不喜欢折腾的,只是想安安心心写笔记的用户。
请求改善的理由
我也在论坛上搜索过相关的问题,D 大也回复说,尽量避免两边版本不一致就进行同步的问题。但是以我多年程序开发的经验,我感觉这里还是有可以改进的地方。
比如,我们常用的版本管理软件 SVN,服务器允许 N 个客户端与同一个服务器进行代码同步,这 N 个客户端可能处于完全不同的 Revision,每个客户端都独立地在本机上,基于各自不同的 Revision 上进行 Add、Modifiy、Delete 的文件操作,随后每个客户端都可以在任意时间,自由的提交自己的改动到服务器,服务器并不会因为 A 客户端提交了代码,就把 B 客户端之前提交的代码给弄丢掉。当然此时我们假设 A、B 不是在操作同一个文件。
回到本问题,虽然我对思源笔记的同步原理还不太清楚,不过我认为每次同步,应该是同步客户端快照之间的 Delta Changes,而不该是直接拿客户端的快照去覆盖服务器端的快照。
如果我上面说的有错误,也望海涵,毕竟我也才刚开始接触思源笔记 😄。
最后再啰嗦两句
我想,选择思源笔记的用户大都视“数据安全、数据稳定”为第一位的。
真心希望思源能够在稳定性上再让用户吃颗定心丸,让更多用户“用爱发电”~~~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于