在上一篇中介绍了思源笔记的 data、history、repo 文件夹的关系,以及云端数据与本地数据的关系,本篇将介绍思源笔记的数据快照。
思源笔记的数据快照
思源笔记的数据管理采用的是数据快照方式,通过分块算法将 data 文件夹下的数据分割成 repo\objects 文件夹下的分块数据(同时实现了数据加密),每个分块中保存了一部分数据,同时在 repo\indexes 文件夹下生成一份分块数据的索引文件。
假设在使用过程中,总共有 3 个版本的数据,如上图和上表:
- 数据版本 1:data 文件夹中只有文档 1,repo\objects 中只有 8d,5e,1c 总共 3 个分块,repo\indexes 文件夹中只有快照 1
- 数据版本 2:data 文件夹中有文档 1 和文档 2,repo\objects 中只有 8d,5e,1c,0c,0d 总共 5 个分块,repo\indexes 文件夹中只有快照 1 和快照 2,思源中显示的是快照 2 对应的数据。
- 数据版本 3:data 文件夹中有文档 1 和文档 2,repo\objects 中只有 8d,5e,1c,0c,0d 以及 1c 总共 6 个分块,repo\indexes 文件夹中只有快照 1、快照 2 和快照 3,思源中显示的是快照 3 对应的数据。虽然快照 3 中不包含 1c 分块,但是由于快照 1 和 2 没有被删除,所以 1c 分块也没有被删除。当需要回退到快照 1 或快照 2 的时候,1c 分块的数据就能派上用场了。
通过上述过程可以知道,随着数据的变化,repo\objects 文件夹下的分块会越来越多(占用的云端空间也会越来越多),即使删除了某篇笔记,由于旧快照的存在,该笔记对应的分块不会被删除。若要删除不需要的分块,估计需要删除所有对应的快照(我猜的)。
数据快照与备份的区别
传统的备份方式是将原始数据完整地复制一份,复制过程时间长,占用的空间翻倍。但是有了两份完整的数据,即使 1 份损坏了,也能从另 1 份恢复,十分可靠。
数据快照的原始数据保存在分块中,生成快照的时候只记录了分块的编号,并没有生成原始数据的副本,原始数据始终只有 1 份,一旦分块数据损坏,有再多的快照也没法恢复这部分的数据。既然有这样的缺点,为何还要采用这种方式呢?那当然是因为快照有无与伦比的优势:
- 能够以较少的空间,保存非常多的数据版本。一个快照只是一份索引,并不是原始数据,占用空间极少。
- 同步新增分块就能实现增量同步,同步速度快、使用流量少。新增数据或修改数据后,会生成新的数据分块,旧的分块没有变化,只要同步了新的分块就完成数据同步了。
Q&A
Q:删除未引用的资源文件后为什么云端已使用空间没有变小?
A:删除未引用的资源文件只是删除了 data\assets 文件夹下的文件,repo\objects 文件夹下对应的分块并没有删除,所以云端空间没有被释放。
Q:快照和标记的快照有什么区别?
A:没有本质区别,标记快照的时候只是给快照起了个名字,方便查找和进行版本控制。
Q:本地快照和云端快照有什么区别?
A:本地快照是当前设备生成的、保存在 repo\indexes 文件夹下的快照,每隔几分钟就会自动生成一个快照。云端快照是同步的时候从本地上传到云端的快照,在云端快照界面可以看到、下载不同设备上传的快照。
Q:如何在云端备份分块数据(复制一份)?
A:我也不知道,来个大佬回答一下。
P.S. 为便于理解,对实际情况进行了一些简化,没有和思源的实际的文件结构完全一致。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于