重复数据删除这水太深了,又几篇关于重删的文章闪现于Fast13. 一篇关于恢复的,一篇关于元数据压缩(recipe compression) , 一篇关于并行删除的(不太懂,还没细看), 有一篇关于删除的(Sanitization),还有一篇关于提高恢复速度的。
Memory Efficient Sanitization of a Deduplicated Storage System:此文章首先introduce 数据的重要性,堂而皇之的冠以“敏感数据”(the sensitive data),说要达到“删除敏感数据,就想从没存储过似的”,然后是长篇介绍thread mode 及删除的必要性,重要性。好庄重的文章,不看到最后,我以为这是搞安全的呢?!
然后煞有介事的给我们将条例(如下)。(ps:好像在说,你看,我们都定出规则来了,别人没有吧?)
P1: All deleted data are erased.
P2: All live data are available.
P3: Sanitization is efficient.
P4: The storage system is usable while sanitization runs.
如果你愿意一层一层,一层的剥开我的心,你会发现你会讶异。paper,高质量的paper,就得耐心的看,因为人家也是花了很长
很长的时间才写下了这么successful paper. 写着有耐心,读者更需耐心。
如图所以,终于要进入主题啦!四种删除机制所用内存比较。
Reference counts 保证不了可靠性,如果服务中断,或者宕机等事故发生,大量的事务回滚操作烦烦烦!而亲也占用空间。
Bloom Filter 真是一大进化,以牺牲时间(多次hashing)和 一定的正确率(很多paper 说 发生的概率像磁盘发生错误一样的低)
来节省空间。但是,错误率虽然低,可毕竟还是存在风险与缺陷。(你人是好,可是不够帅)
Bit Vector 可又是一大突破,减,减,减!以1bit 代表一个数据块,利用率已经到极致。可惜,需要多次读disk(多次读containers),如此性能怎能不是瓶颈,怎能不是个毛病?
Perfect Hash, 呵呵,优势大了去了!虽然比bit vector 占用多点的空间,可是少了大量的磁盘IOs。你说是进步吗?既然,我们不能从再缩小空间找到突破口,我么只能从其他地方下手。于是,优化bit vector 的disk io 是也。
可以看出,没有绝对的两全其美。时间换空间,正确率换空间,空间换时间等等,有无相生,此消彼长。
啊!扯远了。
下面就介绍到了how to use perfect hash。何为perfect hash ,其定义如下:
具体可参考论文:Hash, displace, and compress.
回归原文,文章主要也最核心的贡献就是:如何利用此方法应用到重删的删除中。wou ! 这真是了不起。这就是思维所致,并不一定你要有多么伟大的idea才能成就丰功伟业。
具体过程就是:
严谨的表述,论文提到静态的删除机制,当然也提到了动态的删除机制。所谓考虑全面,才能体现大家风范。作为一个学者,不得不如此。上图是一个静态删除过程,也就是没有作业备份恢复的前提下。
不知道为什么,如果copy 了container,全局索引的映射表需要更改啊!copy 多少,就要改多少。其实也是个麻烦。论文有意避之,不可不察。他的数据也表明,大量的时间花在read and copy container 阶段,此处需要更进一步的优化。对于动态的删除机制,论文并不详细。
更多文章见: http://www.zhihuluntan.com/forum.php?mod=viewthread&tid=493&page=1&extra=#pid684