原文:Reducing Impact of Data Fragmentation Caused by In-line Deduplication。

这篇文章发表在SYSTOR’12上,主题也是数据去重的碎片问题。不知道是我的英文问题,还是他写作问题,论文读起来很不顺畅。

文章发现了一个重要的矛盾:用户喜欢恢复最近的版本,但是最近的版本碎片最严重,恢复最慢。因此使用重写+垃圾回收的方式解决这个问题。事实上这个矛盾也是我所做工作的出发点,重复了啊,伤不起!

1.CBR算法

文章的idea并不复杂,但是作者绕来绕去,弄出一大堆名词,搞得很难看懂。文章没有考虑惯用的container存储,而是假设直接按块存储。他有几个名词:

  1. block context,指的是紧跟数据块后面的若干数据块,固定长度;
  2. stream context,就是写入数据流的数据块的上下文,紧跟数据块后将要被写入的数据块;
  3. disk context,是磁盘上数据块的上下文;
  4. rewrite limit,重写数据块的上限,因为重写有开销,这个上限限制了重写数据块的数量;
  5. decision block,当前需要决定是否进行重写的重复数据块;
  6. rewrite utility,做决定的依据,比较decision block的stream context和disk context,等于未出现在stream context中的disk context数据块,除以disk context的大小,值越大说明碎片越严重,decision block越应该重写;
  7. minimal rewrite utility,这是一个常数(=70%),当decision block的rewrite utility低于该数据,就不应该重写;
  8. best-5%,到目前为止,遇到的rewrite utility最大的前5%数据块集合,大于minimal rewrite utility的decision block可能很多,超过了rewrite limit,所以应该尽量选取其中rewrite utility最大的block;
  9. current utility threshold,best-5%集合中最小的rewrite utility,会不断变化,rewrite utility大于max< min rewrite utility, current utility threshold>的decision block将会被重写。

算法需要一个缓冲区来容纳stream context,写请求首先会充满缓冲区,对于每个请求都要决定它的重复状态,新数据块照常写入磁盘,对于重复数据块,将根据rewrite utility决定是否重写。当数据块被判为重复时,索引会返回其在磁盘的位置,接下来需要分析其stream context的情况,对于stream context中的每一个请求都查询索引,根据其位置判断是否处于disk context中,由于disk context是定长的,因此就可以计算出decision block的rewrite utility。如果rewrite utility大于max< min rewrite utility, current rewrite utility>,decision block将要被重写,移动到下一个重复数据块继续循环;反之,decision block和stream context中的所有重复数据块都不需要重写,因为他们的碎片情况并不严重。注意到这里的操作是不对称的。

对于旧数据块,在后台进行处理,可以放在删除等操作一起。文章并没有讨论这方面。

2.讨论

  1. 本文改善近期作业的恢复性能,牺牲旧作业的视角很好;
  2. 和MASCOTS’12的文章一样,没有深入研究内部碎片对性能的影响和解决方案;
  3. 我认为高估了rewrite的开销,因为去重是可以流水线的,rabin分块的吞吐率是磁盘顺序写的吞吐率的2倍左右,rewrite理论上对备份的吞吐率不会造成大影响。

转载于:https://www.cnblogs.com/opennaive/p/3312767.html

减少在线去重造成的数据碎片相关推荐

  1. 途牛+巨杉 诠释在线旅游与大数据结合

    本文讲的是"途牛+巨杉" 诠释在线旅游与大数据结合,如今,随着互联网不断的影响和改变人们的生活方式,曾经我们熟悉的生活中的方方面面都正在或多或少的"互联网化". ...

  2. 容器开启数据服务之旅系列(四):Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制...

    容器开启数据服务之旅系列(四) Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制 概述 本文是2018年大数据峰会上的一些分享,关于在线业务,离线业务在ACK(阿里云容器 ...

  3. mysql 碎片率_mysql数据碎片太多怎么办?

    mysql数据碎片太多的解决方法:1.进入phpMyAdmin页面,点击左侧栏要管理的MySQL数据库,在数据库最右侧有一列名为"多余":2.点击数据表列表下面的"仅选择 ...

  4. stream去重_重复数据如何处理?List集合去重的四种方式

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍.但是,有时候难免会遇到集合里的数据是重复的,需要进行去除. ...

  5. mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换

    MySQL 不停服务 在线进行100亿数据迁移切换 背景: 促销库压力巨大,单实例已经不足以提供写入性能,虽然有256个分表,但是经常io打满,总数据量已经达到100亿,单实例io已经支撑不住,所以方 ...

  6. 试试mysql数据碎片整理吧解决astgo经常死机变慢的问题

    使用SSH之类的工具或navicat连接数据库后(注意:是链接数据库后哦,不是直接SSH后就弄,这样提示命令错误的) 需要安装Astgo 7.0 7.3 8.0 V2015 V2016可以联系QQ或微 ...

  7. 在线教育投融数据(2015-2020年)

    一.数据介绍 数据名称:在线教育投融数据(2015-2020年) 数据年份:2015-2020年 样本数量:3182家在线教育公司 数据指标:时间.公司名称.公司名称链接.行业.轮次.金额.投资方.最 ...

  8. 数据碎片重组恢复之索尼摄像机MTS视频恢复混乱不全无法编辑的解决方法

    MTS视频文件,是用索尼2500C摄像机拍摄,视频存在于机身内存中,摄像师一时疏忽,视频还没导出误删除,删除后并没有继续录像,但是使用普通方法恢复出来的视频有的打不开,有的内容不对,有的画面混乱,主要 ...

  9. 在线解析xml,json数据的网址

    在线解析xml,json数据的网址 https://www.sojson.com/yasuoyihang.html

最新文章

  1. 闪存我自己来——HDS公布闪存路线图
  2. pc构件生产线及设备_PC构件成组立模生产线
  3. php 时分秒选择联动,微信小程序-年月日时分秒六级联动时间选择器
  4. html知识收集(一)
  5. 一个天才程序员的黑帮大佬人生
  6. 沈南鹏问了微软CEO四个问题
  7. C语言排序方法-----直接插入排序
  8. 中心对称又是轴对称的图形_【笔记-公务员amp;事业单位】行测:图形推理
  9. PictureBox滚动条、鼠标中轴滚动
  10. Java常见面试题总结(二)
  11. Word 中文编号标题与数字编号题注
  12. 基于AT89S52的俄罗斯方块游戏设计与实现
  13. 麒麟操作系统V10登录微信报错
  14. 差点被祭天!狂欢618,且看研发人如何绝地求生
  15. JAVA实现邮箱注册功能
  16. python中英文字母和中文汉字所占的字节
  17. Stimulsoft Dashboards.JS JavaScript 2203.1.0仪表板
  18. 微信小程序之自定义组件的使用、介绍、案例分享
  19. 其实,Face ID只是iPhone X TrueDepth相机的冰山一角
  20. php eod 调用方法,php中EOD及main发布

热门文章

  1. js 复制图片到微信
  2. 第一个OpenDayLight项目:HelloWorld
  3. 描写火车站场景_描写火车站的优秀句子
  4. 日常用语--征求意见
  5. 装在笔记本里的私有云环境:网络存储篇(中)
  6. bzoj4605: 崂山白花蛇草水(权值线段树套k-dtree)
  7. 用 bat 批处理命令启动 Android Studio 自带模拟器
  8. react简书项目学习笔记38如何拿到页面的输入值
  9. 解析机智云MCU源码
  10. CAS:385437-57-0,DSPE-PEG-Biotin,磷脂-聚乙二醇-生物素用于生物分子的检测