`
javasalatu
  • 浏览: 726439 次
  • 性别: Icon_minigender_2
  • 来自: 北京
博客专栏
96df99eb-e89d-3228-9c8e-967fc745ec52
程序员的自我经营之道
浏览量:7715
文章分类
社区版块
存档分类
最新评论

dedup util数据块零碰撞算法

 
阅读更多

dedup util中使用md5算法计算数据块hashkey。md5是128位的hash值,理论上产生碰撞的概率非常小,据说比磁盘发生物理损坏的概率还要小几个数据级。然而,虽然说概率非常微小,但产生碰撞的可能性真实存在,王小云教授的团队已经找到快速发现碰撞的算法。在重复数据删除技术中,鉴于性能考虑,主流做法是使用碰撞概率更小的hash算法,如sha256,sha512,或者同时使用两种以上hash算法,或者使用非平凡的hash算法,从而减小碰撞概率,从而可以假设不会发生碰撞。数据碰撞的存在,使数据存在潜在的安全问题,这让很多用户不敢放心使用重复数据删除技术及相关产品。dedup util是一款轻量级数据打包归档工具,我认为它的数据安全性要高于性能,因此以牺牲部分性能为代价,对md5碰撞问题进行彻底解决,确保数据的安全性。

假设md5不会产生碰撞,那么hash_md5(block)产生的值是唯一的,也就是说一个数据块对应一个唯一的hash值,可以用1:1映射来表示。现在,这个假设被否定,可能存在两个数据块的md5哈稀值相同,即hash_md5(block1) = hash_md5(block2),多个数据块对应一个hash值,这时就需要使用1:n映射来表示。新的hashtable表项使用三元组表示:

<md5_hashkey, block_nr, block_IDs>

其中,md5_hashkey表示数据块md5值,block_nr表示md5哈稀值相同的数据块数量,block_IDs表示这些数据块逻辑块号。在程序设计中,将block_nr与block_IDs合并在一块,结构如下所示:

+----------------------------------------------------+
| block_nr | block_ID1 | block_ID2 | ... | block_IDn |
+----------------------------------------------------+ 

这实际上是使用链接法来解决hash碰撞问题,每个桶的长度不定。对于每个数据块,都要与桶中的数据块进行逐位的比较,以保证数据块的唯一性。算法描述如下:

1、计算数据块md5值,hkey = hash_md5(block);

2、查找hashtable,bindex = hash_value(hkey, htable);

3、如果未发现哈稀表项,即bindex == NULL,则直接将hkey插入hashtable, 并且block_nr = 1,block_ID1 = g_unique_block_nr;

4、如果发现哈稀表项,则作如下处理

 4.1 遍历哈稀桶,将逻辑号对应的物理数据块与当前数据块进行比较;

 4.2 如果找到相同数据块,则该数据块已经存在,无需处理;

4.3 如果未找到相同数据块,则将数据块插入桶尾,并将数据块写入文件,并且block_nr++, block_IDn = g_unique_block_nr;

不作碰撞处理的算法,未发现md5值哈稀表项则直接返回逻辑块号,没有如上算法的第4步。这里需要进行数据块的比较,性能损失主要发生在这里。算法细节请直接参考源码src/dedup.c中的dedup_regfile,部分代码摘录如下:

分享到:
评论

相关推荐

    重复数据删除 dedup

    重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除 重复数据删除

    IM-Dedup:DWSN中基于重复数据删除的图像管理系统

    通过在开放式堆栈中使用重复数据删除技术,设计并实现了一种图像管理系统IM-dedup,该系统使用静态分块(SC)将图像文件划分为数据块,并避免使用指纹预传输技术在网络上传输重复数据块,通过在映像存储服务器中...

    dedup:用于对文件或流中的条目进行重复数据删除的命令行工具

    一个用Rust编写的更好的重复数据删除器。 基本用法: dedup &lt;INPUT&gt; [-o ] 运行dedup --help来查看: USAGE: dedup.exe [FLAGS] [OPTIONS] [INPUT] FLAGS: -l, --count-lines If flag is set only print...

    基于压缩近邻的查重元数据去冗算法设计

    随着重复数据删除次数的增加,系统中用于存储指纹索引的清单文件等元数据信息会不断累积,导致不可忽视的存储资源开销。...针对查重元数据中存在大量冗余数据,提出了一种基于压缩近邻的查重元数据去冗算法Dedup

    text-dedup:多合一文本重复数据删除

    具有编辑距离,LSH或嵌入的文本重复数据删除。 (在制品) 用法 在重复项附近分组 import pandas as pd from text_dedup . dedupers import EditDistanceSimilarityDeduper from text_dedup import group_duplicates...

    data_dedup:旨在存储大量(可能是冗余的)数据以进行备份。 也恢复特定文件

    ##描述文件被切成 512 字节的块唯一的块存储在一个巨大的转储文件中,并组织在一个中央索引日志中去重文件由包含原始块索引的二进制文件表示##依赖GNU/Linux ##用法重复数据删除{主机,GPU} -i &lt;文件名&gt; ...

    基于确定/概率性文件拥有证明的机密数据安全去重方案

    MHT-Dedup方案通过数据块密文的标签生成的验证二叉树提供确定性的文件拥有证明,具有较低的计算和传输开销,而hMAC-Dedup方案则通过对抽样数据块密文和其标签进行同态MAC运算提供概率性的文件拥有证明,具有较低的...

    开源项目-jpillora-dedup.zip

    开源项目-jpillora-dedup.zip,A command-line tool to deduplicate files

    R-Dedup:基于SSD的RAID系统的内容感知冗余管理

    R-Dedup:基于SSD的RAID系统的内容感知冗余管理

    spotify-dedup, 从你的Spotify播放列表中删除重复项.zip

    spotify-dedup, 从你的Spotify播放列表中删除重复项 一个Spotify播放列表副本你是否想从你的Spotify播放列表中删除重复的音轨? 现在,你可以使用Spotify重复数据删除来检测并删除它们。这个项目使用 Spotify Web ...

    dedup-test-01:重复数据删除编码测试

    重复数据删除测试-01 这是使用 sqLite 数据库对文件进行重复数据删除的第一次测试。 去做...

    dedup-array:用键名过滤数组中的重复对象

    installnpm i dedup-arrayUsagelet filteredArr = dedup(array,["key1","key2"])Demolet dedup = require("dedup-array");let array = [ { id: 1, name: '1', prop: { url: "url1", description: "des1" } }, { id: ...

    revdedup:重复数据删除

    重复数据删除 欢迎 这是我们在 TOS 中介绍的论文中描述的 RevDedup 的源代码。 该系统在 Ubuntu 12.04 64 位上进行了测试。 - 2014 年 12 月 设置 该程序可以使用 Linux make 编译。 用户需要分别下载三个必需的库。...

    resque-dedup:Resque 插件,用于确保同一作业不会多次排队

    重复数据删除 插件。 在Resque 补丁版本合并之前,您将需要使用我们的datagraph分支 如果您只想在任何时候将特定作业的一个实例加入队列,请使用此模块对其进行扩展。 例如: require 'resque/plugins/dedup' ...

    spotify-dedup:从您的Spotify播放列表中删除重复项

    Spotify重复数据删除器 您是否曾经想从Spotify库中删除重复的歌曲? 现在,您可以使用Spotify Dedup查找和删除它们。 该项目使用来管理播放列表。 只需登录,它就会遍历您的播放列表,找到在给定播放列表中以相同...

    jdata_product.csv

    2019京东JDATA算法大赛(用户对品类下店铺的购买预测)商品表,比赛总结:https://drguo.blog.csdn.net/article/details/90514911。 其余数据下载:https://pan.baidu.com/s/1mQf-haFZP38er7FMDxpQWg 提取码:mxlo

    UMI-tools:用于处理NGS数据集中的唯一分子标识符的工具

    UMI-tools于17年1月18日发表在(开放获取) 有关完整的文档,请参见处理唯一分子标识符的... 也可以按质量或针对白名单过滤读取内容(请参见上文) 其余命令group , dedup和count / count_tab用于使用UMI识别PCR重复

    pcap-dedup-开源

    这是一个非常简单的实用程序,用于修复具有来自跨接端口等的重复流量的PCAP文件。 它使用IP ID字段根据该流的最后10个数据包中出现的源/目标来识别任何重复项。

    Dedup Tabs-crx插件

    语言:English (United States) 删除重复的标签。 自动关闭重复的标签页。

    VideoDedup:用于对视频文件进行重复数据删除的工具

    用于对视频文件进行重复数据删除的工具 分支 掌握 该工具包括服务器和客户端模块。 默认情况下,客户端在本地主机上查找服务器。 使用实现通信。 服务器搜索视频文件的副本。 重复项由以下可配置设置确定: 要...

Global site tag (gtag.js) - Google Analytics