缓解数据焦虑,思源笔记文件存储介绍 3(数据快照)

本贴最后更新于 467 天前,其中的信息可能已经时移世易

上一篇中介绍了思源笔记的 data、history、repo 文件夹的关系,以及云端数据与本地数据的关系,本篇将介绍思源笔记的数据快照。

思源笔记的数据快照

思源笔记的数据管理采用的是数据快照方式,通过分块算法将 data 文件夹下的数据分割成 repo\objects 文件夹下的分块数据(同时实现了数据加密),每个分块中保存了一部分数据,同时在 repo\indexes 文件夹下生成一份分块数据的索引文件。

image

image.png

假设在使用过程中,总共有 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. 为便于理解,对实际情况进行了一些简化,没有和思源的实际的文件结构完全一致。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22020 引用 • 87808 回帖 • 2 关注
2 操作
qiancang 在 2023-07-27 00:47:36 更新了该帖
qiancang 在 2023-07-27 00:27:52 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 删除未引用的资源文件后为什么云端已使用空间没有变小?

    会变小的,但是云端空间大小计算不是实时的,大约是每次同步后 10-30 分钟左右进行一次统计。

    1 回复
  • qiancang

    删除未引用的资源文件就会删除分块啦?所以回滚数据快照会有丢失的资源文件是吧?

    如何在云端备份分块数据(复制一份)?这个有啥办法不?标记快照并上传云端?从使用体验来说我感觉没有备份分块。

    1 回复
  • 本地数据仓库不会动的,除非手动清理未引用快照。

    云端快照标记以后就是引用状态,目前云端还不会自动清理未引用快照,后续会自动清理,对于未引用快照仅保留 15 天内的。