高效数据重删中表至关重要

翻译 2013年12月05日 20:31:07
                                                                    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





相关文章推荐

数据中心生命周期的管理为何至关重要

着云架构、软件定义的横向扩展式存储及虚拟化层等的出现,将基础实施的管理进行全方位的自动化成为必需。由于系统中出现了更多的层次,自动化不仅仅能带来成本上的优化,还能简化系统的整体管理。...

JavaWeb中表单数据的获取及乱码问题

首先使用一个用户提交界面作为举例(文本框,密码框,选择,下拉表单等),效果如下 ...

web开发时jsp中表单回显character类型的数据需注意

当我们后台在做表单数据回填时,经常有遇到一些莫名其妙的错误,导致自己无法找到bug所在,我在这聊聊我所遇到的一些坑! Character类型数据在el表达式中无法进行判断在将Character类型的...

Hadoop学习笔记——1.java读取Oracle中表的数据,创建新文件写入Hdfs

在编写mapreduce应用程序时,首先要解决的就是把应用系统中的数据先进行整理以文本文件的方式存储到hdfs上,或者将数据整理后保存到其他mapreduce支持的数据源上(如HBase),本文主要是...

oracle中表空间与数据文件编号的连续性

ORACLE中表空间编号与数据文件编号都是连续的,不会断号。如果TS$中表空间出现了断号,oracle在启动时会进行数据字典和控制文件的校验,发现不一致时,数据库不能正常启动。 表空间被删除时ts$表...

Java Web中表单数据的获取

1、 表单,是一种可以由用户输入,并提交给服务器端的一个图形界面,有如下性质: (1)表单中可以输入一些内容,这些输入功能由控件提供,叫做表单元素 2、提交的数据类型 分为...
  • suwu150
  • suwu150
  • 2016年05月12日 19:28
  • 6682

hive中表的创建以及数据的加载

本文介绍何如在hive中创建表以及加载数据   建表语法: CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] tabl...

JDBC POOL 高效数据源配置

  • 2015年01月25日 14:01
  • 747B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高效数据重删中表至关重要
举报原因:
原因补充:

(最多只允许输入30个字)