重复数据删除:固定和可变长度数据块

2024-06-14 04:08

本文主要是介绍重复数据删除:固定和可变长度数据块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.2 数据块级别相同

1.2.1 固定大小数据块

为了更细粒度的检测重复数据,可以将文件分割成固定大小的数据块,这就是基于固定大小数据块的重复数据检测。实现时,首先将存储系统中所有的文件按固定大小划分成数据块,计算每个数据块的hash函数值,将所有的hash函数值单独存储起来构成hash值库。当有新的数据需要存储时,同样按照这个固定的大小将其划分成数据块,用每块的hash函数值同hash值库中的逐一比较。如果发现新的数据块hash函数值已经存在于哈市值库中,说明这块数据已经在系统中存储过,无需再次存储,只要将指向这个hash函数值所代表的数据块的指针存入相应位置即可;如果新的数据块hash函数值不在hash值库中,则将其实际存储到系统中,并将新的hash函数值添加到库里。实现流程如下图所示。

图 固定大小数据块检测

经典文献

u Venti: A new approach to archival storage

Quinlan S, Dorward S. In: Proc. of the 1st Usenix Conf. on File and Storage Technologies (FAST 2002). Berkeley: USENIX Association, 2002. 89–102.

几乎所有涉及dedupe的文章都提到了Venti系统。它是贝尔实验室设想的一款用于归档数据的网络存储系统原型。它和Plan 9操作系统绑定,所以不能用于诸如Windows,Linux之类系统的后端存储设备。Venti以固定大小数据块作为存储单位,并且计算每个数据块的SHA-1值作为块标识,通过比较块的hash值检测重复数据。

比较值得一提的是Venti的write-once策略。每个数据块占用唯一一个地址,多次写入相同的数据块地址相同,所以同一个数据块只存储一次。数据块不能删除,这也是永久或者备份存储的理想选择。另外,Venti还实现了快照功能。Venti 实现了一个针对大磁盘索引的cache,用以加速fingerprint 查找。由于fingerprint 当中没有位置信息,它的索引cache 不是很有效。尽管用8 个磁盘并行查找fingerprint,它的吞吐率只是局限于7MB/sec 以内。

1.2.2 可变大小数据块(基于文件内容的查找)

可变大小数据块的检测是基于文件内容的将文件分成大小不等的数据块,通常是利用Rabin指纹的方法计算出数据内容的指纹值。Rabin指纹是一种高效的指纹计算函数,利用hash函数的随机性,它对任意数据的计算结果表现出均匀分布。基于内容的数据块划分方法如下:

预先设定一对整数D,r(D>r)和一个滑动窗口的固定宽度l(实际中常用r=D-1)。对于一个序列S=S1,S2,……,Sn,当且仅当 窗口的边缘停在某一个k位置,也就是子序列W=S(k-l+1),S(k-l+2),……,Sk的指纹函数计算结果为h(W) mod D = r,则k位置有一个D-match。k位置也就是某个数据块的边界位置。

实际操作时,从文件头部开始,将固定大小(相互重叠)的滑动窗口中的数据作为Rabin 指纹的子序列,计算每个窗口位置的指纹。当满足指纹条件时,就将此时窗口所在位置的边界作为块的边界。重复这样一个过程,直到整个文件数据都被划分成数据块。接下来再用hash 函数(MD5 或者SHA) 计算出每个划分的数据块hash 值,并将它们管理起来存放在hash 函数值库中。有新来的文件时,首先按照上述方法划分成数据块,再将每个数据块的hash 值与已存储的数据块hash 值进行对比,如果检测到相同的hash 值,则不存储其代表的数据块,否则存储这个新数据块并更新hash 值库信息。如图所示:

利用基于文件内容的划分方法,无论是插入还是删除一小部分字节,都只会影响到一到两个块,其余的块保持不变,所以对于只相差几个字节的数据块可以检测出更多的冗余。

经典文献

u A Framework for Analyzing and Improving Content-Based Chunking Algorithms

K.Eshghi and H. K. Tang. Technical Report HPL-2005-30(R.l), Hewlett Packard Laboraties, Palo Alto, 2005.

上面描述的数据块划分方法容易产生一些问题。由于hash函数的随机性,极端情况就是某文件始终找不到D-match,造成数据块过大(可能是一个 文件只有一个数据块);另一个极端情况就是每个字节都是D-match,这样数据块过小(只有1字节的长度)。针对这些可能出现的问题,本文提出了一些改 进算法,并且给出了如何评估这些算法好坏的数学公式。主要的改进算法如下:

1) 消除过小块

先按照原始算法标识块边界,再反复合并小于或等于某个限定值L的块,直到所有的块都大于L。实际应用中,一般是在chunk size到达限定值L之前忽略掉指纹。

2) 避免过大块

先用原始算法标识块边界,再将大于限定值T的块划分成n个等于T的块,最后那块可能小于等于T。缺点是对于大块,重复了固定分块的缺点:在块头部某个位置插入字节会造成整个块hash值的改变,其实块中大部分内容是保持不变的。

3) 双划分因子

用两个D的值:每次计算D和D'(例如D'=D/2)两套指针,若找到了D'-match,不马上划分为块边界,先记录下来。如果D- match在设定的Tmax之前有了,就用D-match,若到了Tmax还没有,就看之前有D'-match否,有就用D'-match划分,没有就用 Tmax。

4) 双边界,双划分因子

结合以上三种方法。

u A low-bandwidth network file system

Muthitacharoen A, Chen B, Maziéres D. In: Proc. of the 18th ACM Symp. on Operating System Principles (SOSP 2001). New York: ACM Press, 2001. 174−187.

LBFS是由MIT开发的一款网络文件系统,目标在于减少传输带宽,传输之前判断数据块是否已经在目标机器上存在,如果存在则不用发送数据块。另 外,LBFS用SHA-1值的前64为作块索引,有冲突的可能性。更新采用非同步方式,服务器端先应答客户端,在更新数据库。所以LBFS使用数据库管理 块的hash值,但并不依赖于数据库。服务器端与客户端共享相同的数据库索引号。LBFS的dedupe主要工作原理如下图所示:

LBFS的显著优点是一次只需要考虑两个文件,方便快速;缺点是一个文件的重复数据可能分布在多个文件中,这样的方法能检测到的重复数据非常有限。 LBFS也同上面一样,为防止分块中的极端现象,设置了块大小的最大、最小值。在LBFS的测试数据中,滑动窗口大小事48bytes,平均块大小为 8KB,最小的块为2KB,最大块为64KB

这篇关于重复数据删除:固定和可变长度数据块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059330

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.