zoukankan      html  css  js  c++  java
  • ZFS与数据去重

    http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome
    ZFS与数据去重
    什么是Deduplication?
    Deduplication是消除重复数据的过程。去重过程可以基于file-level文件级,block-level块级或者byte-level字节级。使用非常高可能性的hash算法来唯一标识数据块(文件,块,字节)。当使用安全hash,例如SHA256时,hash碰撞的可能性为2的256次方,2\^256 = 10\67 或者表示为0.00000000000000000000000000000000000000000000000000000000000000000000000000001。

    选择哪个等级的去重,files,blocks,bytes?
    数据可以在文件级,块级,字节级被去重。

    文件级的去重对文件作为整体来计算hash签名,如果处理的是自然的文件,则此方法需要的消耗最小,但是缺点是对文件的任何修改都需要重新计算文件的hash签名,即对文件的任何修改,将使得此文件之前节约的空间消失,因为两个文件将不再相同。此中方法比较适合类似于文件JPEG,MPEG,但是对于像虚拟机镜像(大文件)文件将无效,因为即使他们只是很小的一部分不同,但是文件级别他们将是不同的文件。

    块级别的去重(相同大小的块),相比文件级的去重,需要更多的计算消耗,但是他能够很好地对像虚拟机镜像类似的大文件去重。大部分的虚拟机镜像文件是重复数据,例如镜像文件中的操作系统部分。使用块级的去重将使得只有镜像特别的数据才占用额外的空间,相同的数据将共享。

    字节级别的去重,将需要更多的计算消耗来决定重复数据的开始和结束区域,不管怎么说,此方法对mail服务器来说是理想的选择,例如一个邮件的附件可能出现很多次,但是使用块级别去重时他们并不能被优化。此类型的去重一般用来一些应用程序的去重中,例如exchangeserver,因为应用程序知道他管理的数据,可以在内部容易地去重。

    ZFS提供了块级别的去重技术,此种技术更适合通用的情况。且ZFS使用SHA256来计算hash签名。


    什么时候去重,现在还是将来?

    除了以上描述的文件级,块级,字节级的区别外,去重还可以分为同步(实时或内置)和异步(批处理或离线处理)。在同步去重中,重复文件在出现的时候即被去除,在异步去重中,文件已经存储在磁盘上,然后通过后续的处理来去重(例如在夜间来处理)。异步去重典型地被用在拥有有限的cpu和多线程的存储系统,最小化对日常工作的影响。但是如果cpu的性能足够,同步去重是推荐的方法,因为避免了无用的磁盘的写操作。


    ZFS去重是同步的去重,ZFS需要高性能的cpu和高度多线程支持的操作系统(例如solaris)。


    如何使用ZFS的去重

    使用非常的简单,如果你有存储池tank,你需要对tank使用zfs,则设置为:

    zfs set dedup=on tank


    是否需要ZFS的去重的权衡

    主要还是取决于你的数据。如果你的数据确实不包含重复,则开启去重功能则会带来额外的开销且没有任何的好处。但是如果你的数据包含重复,则使用zfs的去重可以节约空间而且提高性能。节约空间是显而易见的,性能的提高是因为减少了重复数据的写磁盘消耗和内存页的置换。


    大部分的存储环境都是多种数据的混合,zfs支持对有重复的部分开启去重操作,例如你的存储池包含了home目录,虚拟机镜像目录,源代码目录。此时你可以设置如下:

    zfs set dedup=off tank/home

    zfs set dedup=on tank/vm

    zfs set dedup=on tank/src


    信任或验证

    如果两个数据的hash相同,我们则认为两个数据是同一个数据,hash例如SHA256,两个不同数据hash相同的可能性为1/2^256, 是个很小的概率。当然zfs也提供了验证的选项,此选项对两个数据进行全比较来确定他们是否相同,如果不相同则处理,指定verify的语法如下:

    zfs set dedup=verify tank


    hash的选择

    因为不同种类的hash所需要的运算也不相同,一种推荐的方法是使用较弱的hash(需要的运算较少)加verify来提供快速的去重,zfs对应的选项为:

    zfs set dedup=fletcher4,verify tank

    不像SHA256,fletcher4不能被信任为无碰撞,只适合与verify一起使用,verify来确保碰撞的处理。总的来说性能相对要好些。


    通常如果不确定哪种的hash的效率跟高的话,即使用默认的设置dedup=on


    扩展性和效率

    大部分的去重方案都只能针对有限的数据,一般在TB等级,因为他们需要去重数据表常驻在内存。ZFS对数据大大小没有限制,可以处理PB级的数据。但是如果去重数据表常驻内存的话,性能比较好。

    完! 

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/itech/p/2555442.html
Copyright © 2011-2022 走看看