重删压缩是什么?
(个人觉得更好的翻译应该是:删重和压缩)
重删和压缩时完全不同的两种技术,解决不同的问题。
重删:就是说有很多分相同的数据,我只存储其中一份,其他的重复数据块我保留一个地址引用到这个唯一存储的块即可。
压缩:将一个大字符串中的子串用一个很简短的数字来标记,然后检索该字符串出现的位置,用个简单的字符来替代。从而来减少数据表达所需要的空间,带来空间节省。
比如说用1代表“AB”,用2代表“CD”,然后用255 来代表“hanfute”。1到255只需要8个bit,而“AB”“CD”或者“hanfute”则需要很多的空间,这样多次扫描替代之后,就可以快速的将数据缩减。
用通俗的话说:重删就是讲相同的东西只存储一次,而压缩则是改造数据排布用一种算法来统计数据的排布模式,从而达到减少数据存储的模式。
https://blog.51cto.com/u_13559412/2057144
重删的实现
重删的实现技术比较简单,最简单的使用就比如我们的邮件服务器,我转发一份邮件给100个人,大家收到我的邮件后就会产生100个一样的文件,假设大家的数据盘使用的共享存储,存储只需要在每个人存入文件的时候查询一下这个文件本地有没有,有我就不再存储。这样在存储上就只存储了一个文件。这是一个最朴素的理解。
这里面涉及到几个问题:
1, 存储怎么知道这个文件自己已经存储了?
2, 如果不是存文件,而是块存储该怎么办?
存储怎么知道这个文件自己已经有了呢?
在计算机里面有个技术名字叫做”指纹”,非常的形象生动,就好像每个人的指纹肯定不一样,那么我们是不是可以用一个很小的数据来标记一个文件的唯一信息。
这里有很多的算法可以快速的得到一个唯一值,比如说MD5算法、Sha算法。
l Sha算法是一种不可逆的数据加密算法,只能算指纹出来,但是无法通过指纹反推出来内容。
l 他可以经一个小于2^64的数据转化成一个160位的不重复的指纹,最关键的是他的计算还很快。
l 所以比较两个数据是否相同,就可以通过计算他的指纹,然后去对比指纹,而不是进行数据的逐字节比对。效率要高得多。
这个指纹有没有可能重复,比如说两个人的指纹相同?
按照sha256算法,在4.8*10^29个数据中出现两个数据指纹重复的概率大概小于10^-18.10^-18就是我们所说的16个9的可靠性。