【IT168 导购】现在有两个不同内容的Word文档(其显示的文字不同 ),他们之间有没有重合地方呢?或者说,这两个不同的文档之间有没有通用的内容呢?答案是肯定的。如不同的文档之间,可能具有相同的访问权限。假设,每个文档需要利用0.5K的容量来保存这些信息或者属性(如只读或者隐藏等等)。那么10000个文件,需要占用多少容量呢?上百万个文件呢?显然,这些通用的信息会造成比较大的浪费。为了节约存储的成本,此时重复删除技术就派上用场了。
重复数据删除技术是一个减少或者消除冗余文件、字节、或者数据块的一个过程。简单的说,就是确保只有少有的数据被保存到存储设备中。重复的内容都被压缩了。从而来降低存储成本(如硬盘或者维护的成本等等)。在存储设备中(如用于文件服务器的存储设备),往往数据会有比较高的通用性。用户之间、服务器之间、同一种类型的文件之间相当一部分内容都是通用的。重复数据删除技术按自然边界江数据拆分为非常细粒度的子块单元,会采用指针代替相同的子块单元,从而达到显著降低存储空间的目的。这个原理跟数据库中的关系表有点类似。不过重复数据删除技术的工作原理要比其复杂的多。还好这并不是存储管理员必须要掌握的内容。我们只需要知道,重复数据删除技术有哪几种类型、各自有什么特点、如何根据企业的实际情况来选择适用的存储技术等等。
根据启动重复数据删除技术的时机来区分,可以将重复数据删除技术分为联机重复数据删除技术和后期处理重复数据删除技术。作为存储管理员,可以不精通重复删除技术背后的工作原理,但是对于这两种技术的特点必须了解。
一、后期处理重复数据删除技术的优缺点分析
假设现在往存储设备中存储数据,那么存储系统是什么时候判断是否有重复的子块呢?是存储之间判断,还是存储作业完成之后判断呢?这就是重复数据删除流程启动的时机。如果是在存储作业完成之后再进行判断的话,那么就是后期重复数据删除技术。
这里笔者以一个备份的案例来谈这种技术的优缺点。现在有一个Oracle数据库,需要定期向存储设备中备份数据。当数据库服务器开始向备份设备传输备份数据流时,系统是将整个备份数据量作为一个整体来传递。然后启动单独的进程开始读取已写入磁盘的数据块,开始判断是否有重复的子块,并进行后续的相关动作。如下图所示,可以形象的说明这种方式的特点。
从上图中可以知道,数据存储与重复数据删出流程是两个独立的进程。一个进程负责数据的存储,另外一个进程来检查是否有重复的数据块以及后续的处理。简单的说,就是一边往存储设备中存储数据、一边进行判断。如果读入的数据块和已存储的数据块重复了,则会使用指针来替代这个数据块并删除重复的数据块(或者说可以被后续的数据所覆盖)。如果没有重复的话,则不会对这个暑假块进行任何操作(因为这个数据块实际上已经保存在硬盘上)。
这种处理方式主要的缺陷是对于I/O的要求比较高。其先将数据保存在存储设备上。然后再由一个独立的进程从硬盘中读取数据来判断是否有重复的现象。如果有的话,还需要将其删除。从这个流程中就可以看出,有多个I/O的过程。所以对硬盘的I/O提出了比较高的要求。其优势是在存储数据的时候,不需要先在内存中进行缓存、再判断。为此可以节省内存的开销,提高数据存储的效率。
二、联机重复数据删除技术的优缺点分析
采用联机重复删除技术的方式时,其主要的特点就是数据存储、重复数据删除进程有一个前后的过程,而不是并列。笔者也以数据库备份为例来说明这种方式的特点。当备份数据流到达存储设备时,数据并不会直接保存在硬盘中,而是先驻留在内存中。然后重复数据删除技术进程会对这个数据进行重复性的判断。如果与硬盘中已有的内容重复的,则不会将这个数据保存在硬盘中,而是利用指针来代替。相反,如果硬盘中没有已知的重复数据则将数据保存在硬盘中。其主要的过程就如下图所示。
使用联机重复数据删除技术主要的优势是可以降低硬盘的I/O开销。在后期处理重复数据删除技术这种方式中,需要先对所有备份数据进行写操作。然后重复数据删除进程需要将写入的数据再次读取出来,以判断是否有重复的子块。如果有重复子块的话,就需要进行删除的操作。光从这个数据流来看,就用了三次的I/O操作。这还不包括更新哈希表的I/O操作。所以采用后期处理重复数据的删除技术,其I/O的开销是非常庞大的。
而采用联机重复数据删除技术,就不存在这个问题。因为其数据一开始就是在内存中,不保存在硬盘上。只有确认存储设备中没有重复的子块时,才会将数据保存在硬盘上。为此其基本上只有一个I/O操作。也就是说,其大部分的工作都是在内存中完成的,就没有涉及到硬盘的I/O。
不过采用联机重复删除技术,其对于内存的要求会比较高,需要利用额外的内存在保存这些备份数据。另外,从存储的时间上来看,由于其采用的是一前一后的方式,为此从整体的存储时间来看(假设不考虑I/O冲突),要比后期重复数据处理要长。在实际工作中,如果存储设备的I/O不理想,后期处理方式则会造成I/O比较严重的冲突,此时后期处理方式的作业时间反而要比联机处理方式要长。
三、如何选择适用自己企业的处理方式
可见,两种处理方式各有各的特点。后期处理重复数据删除技术主要耗费的是硬盘的I/O资源,而联机重复数据删除技术其主要占用的是存储服务器的内存。即后期重复数据删除技术会将整个处理过程分解为两个相对独立的进程,从而缩短整个作业的时间。但是其是以增加至少三倍以上的I/O操作来达到这个目的的。采用联机重复数据删除技术,整个处理过程中所需要的I/O操作比较少。但是中间数据存储有一个等待的过程,为此会导致备份时间作业的延长。
了解了这些差异之后,要做出一个合理的判断难度应该不是很大。如果存储服务器的硬盘性能比较好、但是内存比较小的话,显然比较适合采用后期处理重复数据删除技术。如果在后续的维护中,发现磁盘的I/O冲突比较严重,已经影响到了数据存储的效率,此时则比较适合采用联机重复删除技术。一般来说,对于备份作业并发数量比较多的企业,如当用户关机时会将每台客户端上的特定文件夹中有更新的文件在服务器上进行备份。当员工下班时,会触发大量的备份作业。此时如果采用联机重复删除技术的话,用户可能会有一个比较长的等待时间。不过如果采用后期处理删除技术的话,可以先将数据在服务器上进行备份。用户可以在比较短的时间内完成备份作业并实现关机的过程。然后存储服务器就可以慢慢的判断是否有重复的子块,并进行后续的处理。
可见针对不同的情形,会有不同的选择。主要还是需要根据企业的实际情况来进行判断。作为存储管理员,需要牢牢的掌握这两种处理方式的差异。虽然最终都可以实现相同的结果,但是对于其性能会有很大的影响。