内容目录
背景
最近用obsidian + 小米云盘同步搭建自己的个人笔记,所以突然好奇云盘同步到底怎么检测到我的文件修改或者删除文件的。
分析过程
- 搜索 监听文件api
- 找到有关的api ReadDirectoryChangesW FindFirstChangeNotification SHChangeNotifyRegister
- 百度网盘与wps同步盘,发现他们用的api都是ReadDirectoryChangesW,验证很简单,直接屏蔽一下ReadDirectoryChangesW,再修改文件就无法检测到变化进行同步了。
- node js 搜索 api ,找到 api chokidar 可以分析他们实现,不过我懒得分析,因为上面2个成熟产品都用这个api,说明这个api就绝对够用了。
其他思考
这种云软件还有一个要考虑点采用什么方案上传变化的数据,肯定不直接同步直接全量上传,最起码增量同步,还有同步频率。
通过借鉴wps的方案进行得出结论。
补充:突然发现这个是本地备份设置,自己使用时候并不是修改就立即云同步,而是内容变化了一段时间后同步。
- 智能模式:可能根据每隔文件保存频率来同步到服务器,估计存放文件保存概率。目的减少同步次数,其实这种为了减少服务器流量而已
- 定时备份:用户设置时间,定期备份,这种应该记录每次变化文件,然后定时器到了就开始同步变化的文件。
- 增加备份:有变化就同步,我目前用小米云同步就是这种,由于obsidian自动保存,同步频率太高了,所以这种不一定好,因为写笔记时候内容肯定不停的写,那么一直在同步,一般的同步盘都会有版本限制,还好obsidian自己有本地快照。
百度网盘与小米云盘都没有这个设置,看来wps同步做的最好,后面有时间用一下,多同步几个空间,防止数据丢失。