最近在思考和实践怎样应用重复数据删除技术到云存储服务中。找了些论文来读,其中《Avoiding the Disk Bottleneck in the Data Domain Deduplication File System》是鼎鼎大名的李凯教授出品,读来收益匪浅。

论文主要内容

Data Domain的去重存储系统是商业上大获成功的产品,从产品的角度来讲非常完善,其架构图如下:

去重存储系统在数据存储和重建的过程中,都需要频繁地访问数据块的索引,即图中的Segment Index。为了降低成本,一般系统都无法接受将index数据全部存储到内存中,而是基于硬盘来实现这个index的存储。这样一来,磁盘相对较低的性能就成了整个系统的性能瓶颈。本文介绍了Data Domain的去重存储系统中,针对这个问题所采用的三种优化技术。

  1. 总结向量。总结向量可以认为是Segment index在内存中的总结,本文使用Bloom filter来实现。当需要查询一个index值是否存在的时候,总结向量可以提供如下功能,如果总结向量指出该index不存在,那么该index就不存在,无需进一步查找;如果总结向量指出该index存在,那么该index有很大可能存在,但并不保证一定存在,需要进一步查找确认。总结向量要比原始的segment index小,从而放入内存,提升效率。当系统正常关闭时,将总结向量写入磁盘,并在启动时从磁盘读入内存。为了应对断电等非正常关闭,系统阶段性的创建checkpoint,将总结向量写入磁盘。在需要恢复的时候,只需读取最近的checkpoint,然后将checkpoint之后产生的新数据添加到总结向量中即可。
  2. 流感知的块排列技术。流感知的块排列技术 (stream-informed segment layout ,SISL)是基于这样一种假设,当一个文件的部分数据块存入系统后,再次使用时,这些数据块有很大的可能还会以想同的顺序出现。比如需要恢复这个文件时候,比如下次备份这个文件的新版本的时候。这种排列方式带来许多好处:a.当数据重建时,可以大幅减少磁盘IO;b.当备份相似数据流(数据新版本时),segment index的cache的局部性更高,更有效。c.在同一个container中,元数据段和数据段分开存储,使得可以快速读取一个container中涉及到的所有segment的index构建cache和Bloom filter。
  3. 局部性保持缓存。使用局部性保持缓存技术来加速重复segment的确认过程。由于segment使用内容的sha1来唯一标识,因此很难基于正在使用的segment来预测将要使用的segment是哪一个,从而预加载,提高缓存命中率。幸而应用了流感知的块排列技术(SISL),这使得实现局部性保持缓存有了可能性。

我的思考和疑问

  1. 要实现Bloom Filter的check point,需要container是全局有序的,给定某一个container的id,可以从这个container开始一直遍历到最近产生的数据;
  2. 流感知的块排列技术中,如果一个流的数据很少是怎么处理的?还有,当有多个流在备份数据的时候,如果两个流要写入同一个系统中不存在的segment时,怎么办,是不是就重复写入了。
  3. 传统的数据去重存储系统是面向备份应用的,关注的是吞吐量而不是响应时间。如果要用来做online的实时系统,会有新的问题要解决。

读Avoiding the Disk Bottleneck in the Data Domain Deduplication File System的更多相关文章

  1. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  2. HDFS relaxes a few POSIX requirements to enable streaming access to file system data

    https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction [ ...

  3. Unix:关于一个file在file system和disk中占用空间

    參考文献: Harley Hahns:Guide to Unix and Linux. Chap 24 -->首先要有的关键概念:the amount of "disk space&q ...

  4. Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration

    File System Function In computing, a file system or filesystem is used to control how data is stored ...

  5. NetSuite SuiteScript 2.0 export data to Excel file(xls)

    In NetSuite SuiteScript, We usually do/implement export data to CSV, that's straight forward: Collec ...

  6. EMC DATA DOMAIN 2200 filesys destroy(數據清空及重建)

    EMC 數據清空 1.數據清空 這裡會清空file system的所有東西包括tapes

  7. Invalid file system control data detected

    今天在做mkdir操作时报错:Invalid file system control data detected.检查用户和权限没问题,再检查磁盘空间也没问题.最后在网上找到如下信息: [proble ...

  8. ORA-01578 ORACLE data block corrupted (file # 29, block # 2889087)

    BW数据库后台报错如下:F:\oracle\SBP\saptrace\diag\rdbms\sbp\sbp\trace ORA-01578: ORACLE data block corrupted ( ...

  9. Import Data from *.xlsx file to DB Table through OAF page(转)

    Use  Poi.jar Import Data from *.xlsx file to DB Table through OAF page Use Jxl.jar Import Data from ...

随机推荐

  1. How to use “svn add” recursively in Linux shell?

    This command will add any un-versioned files listed in svn st command output to subversion. Note tha ...

  2. RFID 仿真/模拟/监控/拦截/检测/嗅探器

    Sound card based RFID sniffer/emulator (Too tired after recon.cx to do draw the schematics better th ...

  3. 【VerySky原创】RPR_ABAP_SOURCE_SCAN

    [VerySky原创]RPR_ABAP_SOURCE_SCAN 扫描 ABAP 报表源

  4. ssh sftp scp命令

    scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:r ...

  5. .net下BerkeleyDB操作封装C#版(附单元测试)

        using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...

  6. 分享一些无特征PHP一句话

    分享些不需要动态函数.不用eval.不含敏感函数.免杀免拦截的一句话.(少部分一句话需要php5.4.8+.或sqlite/pdo/yaml/memcached扩展等) 原理:https://www. ...

  7. Android 组件系列-----Activity保存状态

    本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的 ...

  8. spring(3) JDBC

    Step Description 1 Create a project with a name SpringExample and create a package com.tutorialspoin ...

  9. 将复杂form表单序列化serialize-object.js

    <form class="form-horizontal" role="form" id="myform" action=" ...

  10. spring整合activemq发送MQ消息[Topic模式]实例

    Topic模式消息发送实例 1.pom引入 <dependency> <groupId>junit</groupId> <artifactId>juni ...