高效数据重删中表至关重要
来源:互联网 发布:淘宝网店促销 编辑:程序博客网 时间:2024/06/11 21:31
Efficient Deduplication Is All About Tables
在和Permabit的CTO Jered Floyd的最近一次网络会议中, 我们谈到了伴随他们提供的存储系统的扩展,重删技术面临的挑战。重删就是鉴别一个存储系统中冗余的数据段(块) ,通过只存重复块的一份从而获得容量效率(capacity efficiency)。扩展重复数据删除的关键就成了如何更好的管理那些生成和使用的表?
表是计算机科学中一个非常根本的元素,可以用其来存蓄各种信息。 重删技术使用表来保留那些存储在设备上的数据的信息,从而使得冗余可以鉴别。它使用一种称为哈希表的结构来存储那些数据段的唯一指纹(fingerprint),当向设备中增加数据时,计算它的指纹并且和那些哈希表中的已有值比对来判断这个数据段是否已经存在。如果指纹没有匹配,说明这是一个新的段,存入设备,同时更新哈希表;如果是冗余数据,就不存这个数据段,用一个指针指向已存在的段。
为了保证性能不受影响,上述过程必须足够快。大多数情况,上述的查询操作发生在内存中,那么性能不会受影响。问题是,对于大多数的主存系统,这些跟踪的数据量会超过可用内存,这就意味着部分或全部的重删表需要放在磁盘上,这会给性能带来明显的延迟。
你如何保证随着存储系统的生长,你的重删引擎不会成为瓶颈呢?正如我们在网络会议中讨论的,基于这种哈希表,有多长数据要存储以及存储多长时间都会影响查询功能的性能。能够高效创建,缓存,查询这个表是构建可扩展,能工作几十年而且支持高容量的重删引擎的关键。
步骤1-高效创建
构建可扩展重删引擎的第一步就是确保基本的构建块,表结构本身是高效的,这意味着要保证表足够精美(small and compact)更好的适应RAM。比如说,Permabit的Albireo hash table典型的只需要0.1B来存每个指纹。
步骤2-高效缓存
仅仅依赖DRAM存储重删表来构建存储系统是很有问题的。首先,典型的存储控制器只有那么多的DRAM,而且还要留作重删表之外的其他用途,最后,过多的DRAM使得存储系统的总体代价急剧增加。因此在构建一个重删引擎的第二步就是保证重删哈希表的高效缓存。缓存机制就是尽量使得大多数活跃的重删表项在内存中,而让其他部分驻留在磁盘或其它设备,如SSD。
值得注意的是这里使用的cache不同于其它的cache,并不是以FIFO的规则被换出,因为在决定一个数据块是否是冗余的之前,所有的数据都需要来比对(译注:比如在存的时候充分保证文件的局部性,在每次换入的时候就可以保证更高的命中率,这里可以看DataDomain的两篇paper)。缓存必须智能的管理使访问磁盘的次数尽量少。Permabit的Albireo在每1000次尝试中仅需要访问SSD一次。
步骤3-高效查询
表必须能够高效查询从而使确认数据块是否冗余耗时尽量小。这里需要聪明的启发式方法(intelligent heuristics)和数据组织来保证使得判断冗余搜索的表项尽量少。Permabit的Albireo 索引查询平均少于10微秒,这可以保证在单核处理器下11GB/sec的持续摄入率(sustainable ingestion rate)(64 KB的块长和基于硬件的哈希), 而且利用Albireo网格技术,可以随着集群节点的增加线性可扩展。
总结
网络会议和该系列的日志就是为了帮助用户理解重删是怎样影响他们的,包括前期和随着系统的发展。对于提供商,目的就是帮助他们更好的理解伴随着时间的推移他们薄弱的重删设计的方面。值得注意的是重删并非一个复选项,而是需要仔细的审查,从而保证可以长期服务于企业。
-----------------vonzhou:2013-12-5
原文地址:http://www.storage-switzerland.com
- 高效数据重删中表至关重要
- Hive 典型的中表内数据除重写法
- SQLServer 数据去重高效方法
- sql高效去重重复数据方法
- 删除数据库中表数据
- 修改oracle中表的数据
- 数据重删压缩
- 模块化:高效重构
- C#实现大数据量TXT文本数据快速高效去重
- 健康至关重要
- PostgreSQL中表的阶层数据取得方法
- Oracle中表数据导出到excel中
- Mysql中表结构以及数据的分布
- 数据库中表中的数据的显示方式
- Oracle数据中表值插不进去问题
- Struts2中表单数据怎样实例化
- 对数据库中表的数据的操作
- Mysql大数据中表分区的应用
- 程序设计实现笔记——排错
- 编程语言系列(一)--C语言基础知识点总结
- 练习赛11.删数问题
- 黑马程序员 小知识—学习用户自定义转换
- UVA10020- Minimal coverage
- 高效数据重删中表至关重要
- c++ 正则表达式
- 【ASO潜规则】之 SEO如何给我的应用带来15万个下载量
- 单例的两种模式
- android 自己实现日历功能
- 黑马程序员 一秒学会Lambda表达式
- Debug这个词是从哪来的呢
- Otto介绍
- 使用Fiddler监听手机App访问的API