siyuan-note/dejavu

增加删除快照的功能

zxhd863943427 opened this issue · 28 comments

我希望能增加一个删除快照的功能,是否能提交这个pr?

有清理快照的功能了

目前的清理快照是清理到只剩被引用的快照,但更常见来说,快照的删除功能是只清理指定的快照。

我的下一步目标是实现对快照的保留策略,即按照要求在一定的时间间隔内保存快照,如一个月以外的快照,每天只保留一个。

参照restic,我打算这样实现:一个是删除快照索引,另一个是根据现存的快照索引,删除未引用的对象。这应该在ui上是两个按钮。

删除指定快照也要计算引用关系的,不如直接考虑自动清理快照

对于这个,我认为这不是代码实现上的问题,而是用户体验的问题。用户在清理快照时,他需要的是一个精简的快照列表,而不是想要一个空白的快照列表。

这个实现是递进的,需要先完成删除快照的前置功能,才能完成保存策略的自动清理。

有清理快照的功能了

清理和删除不能完全等同吧。

就比如我现在有大几百个快照,我既想要清理一下,不要占用那么多空间,又想要保留需要的快照防止需要恢复的情况。

目前我只看到了一个「清理快照」的按钮,这个操作粒度确实 有点大了。

就清理快照这个事情本身我觉得应该分为几个层次

  1. 最粗放的就是直接全部清理
  2. 细粒度一些的,可以选定某个时间点之前(甚至时间范围内)的进行清理
  3. 最细致的,可以精细到某个具体快照,进行删除

更加细粒度的快照清理,可以为更加细粒度的快照管理做铺垫。比如如果有了这种细致的清理技术作为支撑,我们还可以给出更加细致的快照保存策略:例如一个星期内的快照全部保存,一个月外的快照每星期保留四个,一个年外的快照每月保留一个 etc.

这个需求目前不明显,但是后面用户数据量涨起来之后,应该会越来越明显的。

我刚刚试了一下,原本 380 多个快照 ,清理之后全没了。这个着实有些太粗放了😂

image

c47fb15ffa8c00e7cea010eecccc91d4

我建议有空的话研究支持调整保存策略的自动清理

如果能删除指定范围内的快照,还是挺有用的。比如我只想保留最近半年的快照,目前的思源就没法实现。

话说删除单个快照好像没啥使用场景?

建议直接考虑快照清理策略

我记得以前讨论过,但我找不到那个 issue 了

不对吧,单一快照清理依然需要遍历全部快照索引计算引用关系的,如果批量删除依赖这个,那效率很低。

我是考虑两步走的,分成两个功能

  1. 删除索引。这时只执行了删除索引的功能,没有实际删除objects内的内容
  2. 删除未引用块。这时遍历全部索引,确定未引用的块进行删除

在删除界面只执行删除索引操作,在主界面才执行删除未引用块,因此综合来说效率时可以的。

这也是为什么我说是保留策略的前置步骤,因为保留策略只是把删除索引这一步自动化了。

这个如果不是原子操作的话不可行,删除索引和未引用对象不应该分两步。

会导致什么问题?

删除了索引但是未引用对象没删除

这个是预期的效果,因为要允许删除多个快照后再统一清理未引用的对象。

只要最后进行清理就不会有未引用对象没删除。

因为中间可以打断。

举个例子?

我觉得打断了也无所谓,下次重新执行也能清掉。

等等,不是根据被删除索引进行清理的,是遍历未被删除的索引和遍历对象,找到不在未删除索引中的对象进行删除。

低是低吧,能满足需求就行。

后期还能继续优化,先把功能整出来再说。

关于使用场景,这属于刁钻的场景,比如手贱把一个大文件塞了进去,需要删除这个快照……大部分人使用下一步的保留策略就行。

但是既然能提供这个功能,我想不到理由为啥不提供它。

这一步新加入的函数都是下一步能够使用到的。

但是既然能提供这个功能,我想不到理由为啥不提供它。

确实绝大部分人是不会用这个功能的,不过让需要的人能用上就行了。