减少在线去重造成的数据碎片
这篇文章发表在SYSTOR’12上,主题也是数据去重的碎片问题。不知道是我的英文问题,还是他写作问题,论文读起来很不顺畅。
文章发现了一个重要的矛盾:用户喜欢恢复最近的版本,但是最近的版本碎片最严重,恢复最慢。因此使用重写+垃圾回收的方式解决这个问题。事实上这个矛盾也是我所做工作的出发点,重复了啊,伤不起!
1.CBR算法
文章的idea并不复杂,但是作者绕来绕去,弄出一大堆名词,搞得很难看懂。文章没有考虑惯用的container存储,而是假设直接按块存储。他有几个名词:
- block context,指的是紧跟数据块后面的若干数据块,固定长度;
- stream context,就是写入数据流的数据块的上下文,紧跟数据块后将要被写入的数据块;
- disk context,是磁盘上数据块的上下文;
- rewrite limit,重写数据块的上限,因为重写有开销,这个上限限制了重写数据块的数量;
- decision block,当前需要决定是否进行重写的重复数据块;
- rewrite utility,做决定的依据,比较decision block的stream context和disk context,等于未出现在stream context中的disk context数据块,除以disk context的大小,值越大说明碎片越严重,decision block越应该重写;
- minimal rewrite utility,这是一个常数(=70%),当decision block的rewrite utility低于该数据,就不应该重写;
- best-5%,到目前为止,遇到的rewrite utility最大的前5%数据块集合,大于minimal rewrite utility的decision block可能很多,超过了rewrite limit,所以应该尽量选取其中rewrite utility最大的block;
- 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.讨论
- 本文改善近期作业的恢复性能,牺牲旧作业的视角很好;
- 和MASCOTS’12的文章一样,没有深入研究内部碎片对性能的影响和解决方案;
- 我认为高估了rewrite的开销,因为去重是可以流水线的,rabin分块的吞吐率是磁盘顺序写的吞吐率的2倍左右,rewrite理论上对备份的吞吐率不会造成大影响。
转载于:https://www.cnblogs.com/opennaive/p/3312767.html
减少在线去重造成的数据碎片相关推荐
- 途牛+巨杉 诠释在线旅游与大数据结合
本文讲的是"途牛+巨杉" 诠释在线旅游与大数据结合,如今,随着互联网不断的影响和改变人们的生活方式,曾经我们熟悉的生活中的方方面面都正在或多或少的"互联网化". ...
- 容器开启数据服务之旅系列(四):Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制...
容器开启数据服务之旅系列(四) Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制 概述 本文是2018年大数据峰会上的一些分享,关于在线业务,离线业务在ACK(阿里云容器 ...
- mysql 碎片率_mysql数据碎片太多怎么办?
mysql数据碎片太多的解决方法:1.进入phpMyAdmin页面,点击左侧栏要管理的MySQL数据库,在数据库最右侧有一列名为"多余":2.点击数据表列表下面的"仅选择 ...
- stream去重_重复数据如何处理?List集合去重的四种方式
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍.但是,有时候难免会遇到集合里的数据是重复的,需要进行去除. ...
- mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换
MySQL 不停服务 在线进行100亿数据迁移切换 背景: 促销库压力巨大,单实例已经不足以提供写入性能,虽然有256个分表,但是经常io打满,总数据量已经达到100亿,单实例io已经支撑不住,所以方 ...
- 试试mysql数据碎片整理吧解决astgo经常死机变慢的问题
使用SSH之类的工具或navicat连接数据库后(注意:是链接数据库后哦,不是直接SSH后就弄,这样提示命令错误的) 需要安装Astgo 7.0 7.3 8.0 V2015 V2016可以联系QQ或微 ...
- 在线教育投融数据(2015-2020年)
一.数据介绍 数据名称:在线教育投融数据(2015-2020年) 数据年份:2015-2020年 样本数量:3182家在线教育公司 数据指标:时间.公司名称.公司名称链接.行业.轮次.金额.投资方.最 ...
- 数据碎片重组恢复之索尼摄像机MTS视频恢复混乱不全无法编辑的解决方法
MTS视频文件,是用索尼2500C摄像机拍摄,视频存在于机身内存中,摄像师一时疏忽,视频还没导出误删除,删除后并没有继续录像,但是使用普通方法恢复出来的视频有的打不开,有的内容不对,有的画面混乱,主要 ...
- 在线解析xml,json数据的网址
在线解析xml,json数据的网址 https://www.sojson.com/yasuoyihang.html
最新文章
- 闪存我自己来——HDS公布闪存路线图
- pc构件生产线及设备_PC构件成组立模生产线
- php 时分秒选择联动,微信小程序-年月日时分秒六级联动时间选择器
- html知识收集(一)
- 一个天才程序员的黑帮大佬人生
- 沈南鹏问了微软CEO四个问题
- C语言排序方法-----直接插入排序
- 中心对称又是轴对称的图形_【笔记-公务员amp;事业单位】行测:图形推理
- PictureBox滚动条、鼠标中轴滚动
- Java常见面试题总结(二)
- Word 中文编号标题与数字编号题注
- 基于AT89S52的俄罗斯方块游戏设计与实现
- 麒麟操作系统V10登录微信报错
- 差点被祭天!狂欢618,且看研发人如何绝地求生
- JAVA实现邮箱注册功能
- python中英文字母和中文汉字所占的字节
- Stimulsoft Dashboards.JS JavaScript 2203.1.0仪表板
- 微信小程序之自定义组件的使用、介绍、案例分享
- 其实,Face ID只是iPhone X TrueDepth相机的冰山一角
- php eod 调用方法,php中EOD及main发布