一种删除重复数据的方法及装置制造方法

文档序号:6635575阅读:241来源:国知局
一种删除重复数据的方法及装置制造方法
【专利摘要】本申请公开了基于Openstack Object Storage系统删除重复数据方法及装置,proxy节点包括去重中间件模块,storage节点包括去重服务进程模块,该去重中间件模块构建有去重hash环,该去重hash环的每个节点为一个红黑树的根节点,去重服务进程模块将指纹文件发送至去重中间件模块;去重中间件模块找到红黑树根节点后,判断是否存在重复文件;将一份重复文件保留在storage节点中,删除其他重复文件,在原本存储其他重复文件的位置保存一份指向该被保留的重复文件的重定向文件;如果不存在重复文件,则将每个指纹文件中包含的虚拟节点partition的值、文件内容的MD5值插入该红黑树子节点中。本申请充分利用了Openstack Object Storage系统的性能的线性增长的横向扩展优势,可轻松扩展节点。
【专利说明】一种删除重复数据的方法及装置

【技术领域】
[0001]本申请涉及013^601: 31:01'叫6云存储技术,尤其涉及基于(?知⑶8^01-886系统删除重复数据的方法及装置。

【背景技术】
[0002]0^)61181:80^ 013^601: 81:01-8^6 (8^1^1:)是开源云计算项目的对象存储子方案,提供了强大的扩展性、冗余和持久性。其架构如下:图013^601: 81:01-886框架图。
[0003]如图1,01)61181:80^ 013^601: 31:01'叫6主要有两种节点组成代理)节点和001^6(存储)节点。1^0X7节点负责接收客户端的请求,并与81:01'叫6节点通信。它根据客户端请求的对象,进行定位并转发请求到8丨01'叫6节点。8丨01'叫6节点主要负责数据存储,提供备份,容错,一致性,数据自动迁移达到数据均衡等数据安全保证。集群中所有节点都是可以横向扩展的,这包括两个方面,一是通过#01'叫6扩展数据存储容量;二是线性提升性能(如职3、吞吐量等&1代数据的元数据完全均匀随机分布,结合其所有节点可扩展,在架构和设计保证了无业务单点。
[0004]基于013^601: 31:01'叫6能轻易提供云存储服务,提供数据存取服务。但对于云存储来说,必定要存储大量数据,如何在确保服务正常的情况下,节约存储成本这是每一个云存储服务提供商都在考虑的问题,重复数据删除正是解决该问题的其中一种方式。对于大量数据,必然会存在许多名称不同但数据内容是相同情况。这些数据或存储在不同的目录上,或属于不同的用户账户下等情况。而对于这种数据,云存储应该只保留一份,其他仅指向该保留的一份,这大大降低存储所需要的存储总量,提高了存储空间利用率,节约了存储成本。
[0005]对于013^601: 31:01'叫6的重复数据删除,目前已有相关的方案,可以参考《八 06(1111)11081:1011 0^1111)118-13886(1 01011(1 81:01~8^6 878^6111 0886(1 011 3界 1亡1:》论文中的详细描述。
[0006]在该论文中,主要在原有的013^601: 31:01'叫6系统架构中增加了两个部件实现重复数据删除,一是去重客户端、二是去重中间件。由于该现有技术增加了去重客户端,并且所有文件访问都需要通过访问去重客户端,失去了013^601: 31:01'叫6的横向扩展带来的好处:性能的线性增长。并且,增加去重客户端还形成了集群的单点。另夕卜,该方案几乎没有利用到013^601: 81:01~8^6已有的机制,没有结合其特性,只是在外围增加功能,导致去重系统结构复杂。


【发明内容】

[0007]本申请提供基于013^601: 31:01'叫6系统删除重复数据的方法及装置,解决现有技术中删除重复数据的问题。
[0008]根据本申请实施例的第一方面,提供一种基于013^601: 31:01'叫6系统删除重复数据方法,所述013^601: 31:01'叫6系统包括?『0X7节点和8丨01'叫6节点;所述1^0X7节点包括去重中间件模块,所述8丨01'叫6节点包括去重服务进程模块,其中该去重中间件模块构建有去重匕也环,该去重匕也环的每个节点为一个红黑树的根节点,所述方法包括步骤:
[0009]所述去重服务进程模块扫描每个文件系统分区下所保存的文件,生成每个文件对应的指纹,并将这些指纹通过指纹文件发送至所述去重中间件模块;所述指纹文件包括一个虚拟节点的值以及每个文件内容的105值;
[0010]所述去重中间件模块根据各105值对取模的结果查找各指纹所对应的红黑树根节点,其中II为去重匕也环包括的节点数;
[0011]在找到红黑树根节点后,分别判断每个指纹中包含的!11(15值是否已存在于对应红黑树子节点中,针对任一指纹的111(15值存在于红黑树子节点中的情况,进一步判断该红黑树子节点所存的虚拟节点的值与该指纹所在的指纹文件中包括的虚拟节点
值是否相同,如果不同,则确认存在重复文件;将一份重复文件保留在8如以86节点中,删除其他重复文件,并且在原本存储其他重复文件的位置保存一份指向该被保留的重复文件的重定向文件;
[0012]如果不存在重复文件,则以各105值为匕7将每个指纹文件中包含的虚拟节点
的值、文件内容的105值插入该红黑树相应子节点中。
[0013]本申请实施例的第二方面,提供另一种基于013^601: 31:01'叫6系统删除重复数据方法,所述013^601: 81:01-886系统包括1^0X7节点和8丨01'叫6节点;所述1^0X7节点包括去重中间件模块,所述81:01'叫6节点包括去重服务进程模块,其中该去重中间件模块构建有去重匕也环,该去重匕也环的每个节点为一个红黑树的根节点,所述红黑树的子节点保存有虚拟节点%代1丨1011的值、文件内容的105值;所述方法包括步骤:
[0014]接收客户端的文件存储请求;
[0015]获取待存储的文件的105值,并根据所述105值对II取模的结果查找红黑树根节点,其中II为去重匕也环包括的节点数;
[0016]在找到红黑树的根节点后,判断所述105值是否存在于该红黑树中的子节点中,如果存在于所述子节点中,则确认存在重复文件,将存储待存储文件的位置保存一份指向所述重复文件的重定向文件;如果不存在于所述子节点中,则确认不存在重复文件,在存储待存储文件的位置存储该待存储文件,并以待存储文件的105值为匕7将该待存储文件的虚拟节点的值、105值插入该红黑树相应子节点中。
[0017]本申请实施例的第三方面,提供一种基于013^601: 31:01'叫6系统删除重复数据的装置,所述013^601: 31:01'叫6系统包括?『0X7节点和8丨01'叫6节点;该装置包括:
[0018]位于8丨01'叫6节点的去重服务进程模块,用于扫描所述81:01'叫6节点中每个文件系统分区下所保存的文件,生成每个文件对应的指纹,并将这些指纹通过指纹文件发送至所述去重中间件模块;以及当存在重复文件时,通知#01'叫6节点将一份重复文件保留在8七01'叫6节点中,并删除其他重复文件,在原本存储其他重复文件的位置保存一份指向该被保留的重复文件的重定向文件;所述指纹文件包括一个虚拟节点的值以及每个文件内容的105值;
[0019]位于^11*0X7节点的去重中间件模块,用于构建去重113811环,该去重1121811环的每个节点为一个红黑树的根节点,根据各105值对=取模的结果查找各指纹所对应的红黑树根节点,其中II为去重匕也环包括的节点数;在找到红黑树根节点后,分别判断每个指纹中包含的111(15值是否已存在于对应红黑树子节点中,针对任一指纹的111(15值存在于红黑树子节点中的情况,进一步判断该红黑树子节点所存的虚拟节点?虹1:11:1011的值与该指纹所在的指纹文件中包括的虚拟节点1^代1丨1011值是否相同,如果不同,则确认存在重复文件并告知所述去重服务进程模块;如果不存在重复文件,则以各105值为匕7将每个指纹文件中包含的虚拟节点%代“1011的值、文件内容的105值插入该红黑树相应子节点中。
[0020]本申请实施例的第四方面,提供一种基于013^601: 31:01'叫6系统删除重复数据的装置,所述013^601: 81:01-886系统包括1^0X7节点和8丨01'叫6节点;该装置包括,
[0021〕 所述去重中间件模块,用于构建去重匕也环,该去重匕也环的每个节点为一个红黑树的根节点,所述红黑树的子节点保存有虚拟节点%代1丨1011的值、文件内容的105值;当接收到客户端的文件存储请求时,获取待存储的文件的105值,并根据所述105值对II取模的结果查找红黑树根节点,其中II为去重匕也环包括的节点数;在找到红黑树的根节点后,判断所述105值是否存在于该红黑树中的子节点中,如果存在于所述子节点中,则确认存在重复文件,通知所述去重服务进程;如果不存在于所述子节点中,则以待存储文件的105值为匕7将该待存储文件的虚拟节点%代1丨1011的值、105值插入该红黑树相应子节点中;
[0022]所述去重服务进程模块,用于在存在重复文件时,通知001'叫6节点将存储待存储文件的位置保存一份指向所述重复文件的重定向文件;在不存在重复文件时,通知8^01-^6在存储待存储文件的位置存储该待存储文件。
[0023]本申请在没有引入新的节点的情况,结合013^601: 31:01'叫6自身提供的机制,在系统原有节点内部增加新的功能,即可实现对系统执行重复数据删除的目的,从而解决现有技术中需额外增加部件导致的系统结构复杂问题。同时,由于本申请的系统结构中各1^0X7节点的功能等同,各81:01'叫6节点的节点功能也等同,因此充分利用了01)61181:80^ 013^601: 81:01~8^6系统的性能的线性增长的横向扩展优势,可轻松扩展节点,而集群中也不存在单点。
[0024]现有技术中由于增加的去重客户端使用了 8(111仏存储数据,叫11仏采用粗粒度的锁。当一个连接要写数据库时,所有其他的连接被锁住,直到写连接结束它的事务,当并发量高的时候,系统性能大大降低,并且随着数据量增大,8^11^6的大量数据检索也成为瓶颈。而本发明由于通过在内存中基于1^811环与红黑树,结合01^6(^ 31:01'叫一的存储特点,构建去重匕也环来实现动态数据维护,不需要使用8(11116存储静态数据,因此,在避免现有技术中8(111仏存储静态数据所带来的问题的同时也能够在大量数据的情况下,减少重复数据的搜索时间,提高系统性能。

【专利附图】

【附图说明】
[0025]图1为现有技术中013^601: 31:01'叫6系统架构图;
[0026]图2为本申请实施例中013^601: 81:01-8^6系统硬件结构图
[0027]图3为本申请实施例中013^601: 81:01-8^6系统架构原理图;
[0028]图4为本申请实施例中去重哈希环的示意图;
[0029]图5为本申请实施例中构建去重哈希环的流程图;
[0030]图6为本申请实施例中构建哈希环时系统的信号走向示意图;
[0031]图7为本申请实施例中客户端存储文件的流程图;
[0032]图8是本申请实施例中客户端删除文件的流程图;
[0033]图9是本申请实施例中客户端读取文件的流程图。

【具体实施方式】
[0034]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0035]在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
[0036]本申请提供了一套基于013^601: 31:01'叫6系统实现其重复数据删除功能的解决方案,以解决在云存储环境下,大量文件相同的问题,减少系统存储总量,提供存储利用率,并且尽量减少对集群读写性能的影响。本申请的下述内容中首先阐述了01)61181:80^ 013^601: 81:01~8^6系统的系统架构,接着对该系统中对识别去重数据起着关键作用的去重哈希环的构建过程进行详细描述,随后对利用该去重哈希环进行数据去重的过程进行详述。数据去重的类型包括数据的同步去重和异步去重,本申请描述了分别针对这两种去重方式的解决方案。
[0037]为了方便对本申请所描述的技术方案的理解,首先对013^601: 81:01-886系统的几个基本概念进行定义013^601: 31:01'叫6系统存储的数据有三种,分别为 800011111:? 00111:811161-矛口
[0038]800011111::表不账户,一个 3(3(3011111:下有多个。
[0039]00111:811161-:表不容器,一个 0011'有多个必』6。!:。
[0040]:表示对象,对象由文件数据,元数据等组成。
[0041]¢81-1:11:1011013^601: '叫6 中一致性 113811 算法的虚拟节点,一个实际节点对应了若干个虚拟节点,虚拟节点在哈希空间中以哈希值排列。对于一个所对应的文件,可以通过哈希算法映射到对应的虚拟节点,虚拟节点再通过映射关系找到对应的实际节点。本申请中虚拟节点的值即为虚拟节点的序号,通过序号找到该虚拟节点后,再通过虚拟节点与实际节点的映射关系可以找到实际的#0叫6节点。
[0042]本申请中013^601: 81:01-886系统架构的技术方案描述:
[0043]在本申请在013^601: 31:01'叫6系统中增加了两个组件,即图2中所示的去重中间件模块和去重服务进程模块,其中去重中间件模块安装于1^0X7节点,去重服务进程模块在81:01'叫6节点中运行。
[0044]本申请的013^601: 31:01'叫6系统借助多台服务器实现。去重中间件可以借助?1*0X7服务器实现,去重服务进程可以借助#01'叫6服务器实现。去重中间件模块以及去重服务进程模块可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图2所示,为本申请中去重服务进程和去重中间件的一种硬件结构图,除了图2所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中各服务器还可以包括其他硬件,对此图2不再详细示出。
[0045]图3为实施例中013^601: 31:01'叫6系统的逻辑架构图。去重中间件模块构建和维护去重哈希环(匕也环)和若干棵红黑树。其中该去重哈希环中的每一个节点分别作为每一棵红黑树的根节点。每一棵红黑树的子节点用来保存存储对象必知⑶的关键信息,通过该关键信息可以找到整个系统中存储的每一个必知⑶。这里存储对象必知⑶的关键信息至少包括必知⑶所位于的虚拟节点的序号(即值)、文件内容的111(15值以及指纹文件名。图4为去重哈希环和红黑树的示意图。
[0046]构建好的去重哈希环是一个数组,该数组元素个数可以根据具体需求来自由选择,但作为一个实施例,通常采用虚拟节点的数目作为数组元素的个数。本申请用!
表示数组下标,即数组元素的序号,根据?081丨1011值可以定位到数组元素,即去重哈希环的节点,也即红黑树的根节点,从而访问该红黑树。关于¢10811:1011的值如何计算请参下文中的说明。
[0047]以下结合附图5和图6来说明如何构建出图4中所描述的去重哈希环以及各红黑树。在本实施例中可以在系统初始化时构建去重匕也环和各红黑树,当然也可以根据需求选择其他时刻构建。
[0048]在本实施例中,去重服务配置信息可写在0011?之中,添加
即61'字段,根据这些配置信息,可以构建出去重哈希环的数组结构。图6为构建红黑树各节点的流程图。
[0049]去重服务进程模块扫描每个文件系统分区(即如#⑶)下所保存的各文件,生成包含每个文件的指纹(指纹具有能够唯一标识一个文件的特性)的指纹文件(步骤701)。
[0050]结合图3可以了解到,这个指纹文件包括了该(16^106下所有的013』601:所对应的文件指纹。该指纹文件中的每个指纹分别包括文件内容的105值、文件所属的七、⑶打仏丨加广^^知⑶^勵^值是根据公开的勵^算法对原信息进行数学变换后得到的一个128位()311:)的特征码。指纹文件中包含的信息有文件的指纹、1^1:11:1011的值、8丨01'叫6的I?地址、(16^106路径。通过这些信息可以找到具体的所对应的文件:根据即代丨1:1011的值可以找到相应的81:0211^6节点,根据8丨01'叫6的I?地址、(16^106路径找到对应的如乂丨⑶,再根据指纹中的105值可以定位到具体的文件。
[0051]去重服务进程模块将各个的指纹文件汇集并发送至去重中间件模块(步骤702)。在本实施例中,如图5所示指纹文件通过肌1?发送到去重中间件模块。
[0052]去重中间件模块对指纹文件解析,获取指纹文件中各文件的指纹信息(步骤703)。根据该指纹文件中的每一个指纹中的111(15值构建各红黑树。构建红黑树的具体方式为:首先,分别将各文件内容的105值对构成去重哈希环的数组元素的个数取模得到¢0811:1011值,根据各¢0811:1011值分别定位到红黑树根节点的位置(步骤704);
[0053]然后进一步将各105值作为1(67,将各的关键信息分别添加到相应红黑树根节点对应的子节点中(步骤705)。请参图4,该图中有!1+1个节点,即数组元素的个数为11+1 ;如果某个046(^对应的105值为III,则该对应的红黑树的根节点位置I为1=111% (11+1) 0不难看出,任一 01^6(31:对应的红黑树的根节点位置在0?II这个范围内。
[0054]的指纹信息中¢£111:11:1011值和105值可以用来判断是否存在重复数据。而指纹文件的文件名可以找到所对应的指纹文件,根据指纹文件中所存储的指纹的信息可以判断重复文件数据所存储的账户。而作为一个实施例,对于步骤705中红黑树子节点中关键信息的保存可以采用如下方式:81:01'叫6的I?地址及文件在该81:01'叫6中的路径已经保存于指纹文件的文件名中,指纹文件用来命名,这个文件名中的I?与已挂载的文件系统分区所在的001'叫6的I?相同,文件名中的(16^106与已挂载的文件系统分区的路径相同。指纹文件可保存于#0X7中的特定存储位置,因此在一个优选方式中,红黑树节点中只需要保存该指纹文件的文件名、%代1“011值及文件内容105即可。
[0055]如图5所示,在本申请的一个优选实施例中,利用013^601: 31:01'叫6系统横向可扩展性的特点,可以将去重1^811环分布于多个1^0X7上,每个所述1^0X7节点维护其中一段去重匕也环,从而形成分布式去重匕也环。具体做法如下:根据配置文件的¢0811:1011值的范围选项,可以将整个去重1121811环,拆分成几个部分,每个1^0X7节点只负责存储部分去重匕也环,各个1^0X7节点之间可以通过肌1?进行查询操作。图5是拆成两部分的分布式去重匕也环:具有II个节点的1121811环被分成两个去重1121811环存储于不同的1^0X7之上,其中一个存储?0811:1011范围为0至(11/2-1)的数组;另一个存储?0811:1011范围为11/2至II的数组。
[0056]在一个优选实施例中,去重中间件模块以13以插件的形式存在,可以通过配置文件实现开启和关闭该插件功能的目的,由于1361本身的属性决定了该插件可以预处理接收到的所有肌1?请求,也就是说数据的写入请求会在存储前首先到达去除中间件进行预处理,从而为防止数据重复写入提供了可能。在一个实施例中,可以通过配置文件(以下通过即0^7-861^61\ 0011?来命名该配置文件)向去重中间件模块添加以下的配置内容:
[0057]1)数组元素的个数,作为一个实施例可以默认与?犯'““如的数目相同,这样配置上更方便;
[0058]2)1)0811:1011范围,是0?数组元素的总个数-1之间。
[0059]除了这些信息还可以根据需要配置其他信息,例如,当采用上文所描述的分布式哈希环的分布结构时,配置内容还可以包括其他配置有去重哈希环的#0X7的I?地址,以及该1^0X7上所配置的的¢10811:1011范围。
[0060]在一个实施例中,在分布式的哈希环架构下,在读取指纹文件一条数据,根据105对去重哈希环节点数取模得到¢10811:1011值后,还需要判断¢10811:1011是否属于本1^0X7节点,如果不属于该1^0X7节点,则通过配置文件获知该指纹文件所在的1^0X7节点,通过I?地址信息将该指纹文件传递给对应的#0X7节点。
[0061]该实施例以分布式的架构,各个1^0x7构建和维护重建匕也环的过程可并行处理。通过以下对每个1^0X7构建去重匕也环的时间负责度和空间复杂度的分析可以看出,分布式的架构大大减少了单台服务器的压力,又减少了服务器出现故障时去重匕也环重建的时间。
[0062]去重匕吐环的时间复杂度:
[0063]时间复杂度=(^1)+0(1(^),^的平均值4 =系统中存储对象的总量/1)0811:1011
数量
[0064]去重匕吐环空间复杂度:
[0065]假设每个红黑树根节点所存储的文件大小约为6513”6,其中105为1613”6,不超过1513”6,已挂载的文件系统分区的路径大约为%”6,¢£11-1:11:1011为4个137丨6。红黑树结构占用2513”6,三个指针1^1*6111:、16?!:、占用24!3”6,颜色占用1)37七6。
[0066]以65135^6计算1亿个文件所需要的内存:65^100000000 ^ 6.46
[0067]下文详细描述利用去重哈希环和红黑树删除重复数据的方法。
[0068]首先阐述同步去除重复数据(同步去重)的过程,同步去重是指在文件上传时,如果系统已存在该文件,则不写入文件,直接返回文件上传完毕,实现秒级上传功能。同步去重由客户端发送相关文件上传请求时触发。
[0069]如图7所示,当去重中间件模块接收到某个客户端要求上传文件的请求后,开始根据文件内容的105值查找红黑树根节点位置,在一个优选例子中,105值被承载于文件存储请求的消息中,作为一个实施例,可以是肌I?消息头中的6仏8。
[0070]根据所述文件内容的105值查找红黑树根节点位置(步骤801),并通过红黑树根节点以及以105值作为匕7查找所述红黑树中是否有105值相同的子节点(步骤802),如果有,则确认存在重复文件,将存储待存储文件的位置保存一份指向所述重复文件的重定向文件。如果没有,则确认不存在重复文件,在存储待存储文件的位置存储该待存储文件,并以待存储文件的105值为匕7将该待存储文件的虚拟节点%代1丨1011的值、105值插入该红黑树相应子节点中。(在存储待存储文件的位置存储该待存储文件可以是将待上传文件写入81:01'叫6中的相应81(^011111:,对于将上传文件写入801:!'叫6中的相应81(^011111:在现有技术中已经有教导,在此不再详细描述)。
[0071]需要说明的是,本申请利用在013^601: 31:01'叫6系统为用户提供的开放的接口来实现重定向文件的相关操作,该开放的接口允许添加自己的文件读写类接口文件0181^116,可以通过增加该接口文件来生成和维护重定向文件。增加重复数据删除功能,仅需执行读的时候,发现如果是重定向文件,则读取重定向文件内容,根据重定向文件内容的
800011111: -- (^知⑶,获取到真实文件内容并返回。
[0072]图中步骤8031至步骤8034描述了一个应用实例中对步骤803至步骤804生成重定向文件,并将所述重定向文件写入#01'叫6的过程,具体包括:
[0073]是013^601: 31:01~叫6 系统初始化由去重服务进程模块生成的一个狀⑶皿“当然如果根据需要在其他时刻生成该账户也可以),用于存放文件内容。去重中间件模块根据待上传文件内容的1^5值找到该重复数据所在的红黑树的子节点,利用该子节点所存储的指纹文件的文件名找到相应的指纹文件,随后根据该105值对应的指纹,根据指纹中存储的名称可以判断前述待上传的文件内容是否被存在(16(1111)6^800011111:的账户中(步骤8031);如果前述待上传文件已经被存在的账户中,贝1]生成所述重定向文件后将重定向文件写入所述中该105值所对应的8(^011111:,并在中记录当前所述重定向文件的个数(步骤8034);即图中的计数器加1。
[0074]如果待存储的文件内容不在(16(1即6^1(^0111^中,则将105值所对应的文件内容写入所述步骤8032),生成所述重定向文件后将重定向文件写入所述8七01'叫6中该105值所对应的81(^011111:,并在中记录当前所述重定向文件的个数(步骤8033);即图中的计数器!'6?61'加1,表示引用加1。更新后的(16(1即中文件的指纹可以由去重服务进程实时发送给去重中间件,也可以按照去重服务进程收集指纹文件的周期发送给去重中间件。
[0075]如图8所示,当收到客户端的删除文件邮⑶加的请求时,判断所删除的文件是否为重定向文件(步骤1001),如果不是,则执行正常的删除操作(步骤1007);如果是,贝0读取重定向文件(步骤1002),删除所述重定向文件(步骤1005),并更新当前所述重定向文件的个数(步骤1003)(即图中表示的引用次数的计数器减1)。如果更新后的当前所述重定向文件的个数为零(步骤1004),则将所述(16(1即6^1(^011111:中的文件内容删除,并将(16(1即所对应的红黑树子节点删除(步骤1006)。
[0076]可以看出,在文件存储时,可以通过只保留一份真实文件内容在(16(1即上,其他账户存储文件内容时只需存储一份重定向文件,从而可以实现同步去重的目的。
[0077]013^601: 31:01'叫6系统读取文件的流程图。当收到文件读取(⑶!'操作)请求时,判断所读取的文件是否为重定向文件(步骤901),如果是,则读取重定向文件,并获取重定向文件的内容信息)(步骤902),根据这些信息查找相应的4118文件中,从(16(1即6^1(^011111:获得文件内容(步骤903),并返回文件内容给1^0X7服务器(步骤904)。1*1118是3#代最重要的组件,用于记录存储对象与物理位置间的映射关系。在涉及查询%0011社、(?知⑶等信息时,就需要查询虹叩文件的信息。如何根据文件进行查找可依据现有技术的方式实现。
[0078]以下是异步去除重复数据(异步去重)的过程:
[0079]异步去重发生在构建去重匕也环和红黑树的时候。当添加删除服务重启等事件时也都可以启动异步去重。
[0080]在异步去重时,去重中间件模块通过去红黑树各子节点所保存的关键信息判定是否存在重复数据,其判定方法是:如果105值相同,并且?犯^1丨1011值不同则说明两个对象所存储的是重复数据;如果105值相同,并且?犯'““如值相同,可能存在重复数据,可能是同一用户特意存储了两份相同的的文件,其中一份为副本,此时,不用做特别的处理;如果105值不同,则确定不存在重复数据。以下结合图7来阐述本申请如何利用构建好的去重1121811环来去除重复数据的方法。
[0081]当去重服务进程模块收集完指纹文件时,通过肌1?将数据传送到去重中间件模块。针对指纹文件中的每一个指纹,去重中间件模块根据该指纹包含的105值查找红黑树的子节点,如果找到对应的子节点,则根据该指纹文件中记录的?虹1:11:1011值判断其是否和上述子节点中记录的?犯^“1011值相同,如果不同,则确认当前存在重复数据。根据指纹文件中的文件内容的111(15值找到相应的指纹,根据指纹中所存储的名称可以判断存储重复数据的账户是否为(16(1即63(^011111:,如果重复数据没有存放在(16(1即6^1(^011111:,则将105值相同的节点的中所存储的重复数据移入所述(16(1即6^1(^011111:,并在该中存储指向该重复数据的的重定向文件,并记录当前所述重定向文件的个数。在一个实施例中,可以在将文件内容写入后随即将该更新后的文件内容所对应的指纹信息通过指纹文件发给去重中间件模块更新红黑树各子节点所存储的信息。
[0082]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本【技术领域】中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
[0083]应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
【权利要求】
1.一种基于Openstack Object Storage系统删除重复数据方法,所述OpenstackObject Storage系统包括proxy节点和storage节点;其特征在于,所述proxy节点包括去重中间件模块,所述storage节点包括去重服务进程模块,其中该去重中间件模块构建有去重hash环,该去重hash环的每个节点为一个红黑树的根节点,所述方法包括步骤: 所述去重服务进程模块扫描每个文件系统分区下所保存的文件,生成每个文件对应的指纹,并将这些指纹通过指纹文件发送至所述去重中间件模块;所述指纹文件包括一个虚拟节点partit1n的值以及每个文件内容的MD5值; 所述去重中间件模块根据各MD5值对η取模的结果查找各指纹所对应的红黑树根节点,其中η为去重hash环包括的节点数; 在找到红黑树根节点后,分别判断每个指纹中包含的md5值是否已存在于对应红黑树子节点中,针对任一指纹的m d 5值存在于红黑树子节点中的情况,进一步判断该红黑树子节点所存的虚拟节点partit1n的值与该指纹所在的指纹文件中包括的虚拟节点partit1n值是否相同,如果不同,则确认存在重复文件;将一份重复文件保留在storage节点中,删除其他重复文件,并且在原本存储其他重复文件的位置保存一份指向该被保留的重复文件的重定向文件; 如果不存在重复文件,则以各MD5值为key将每个指纹文件中包含的虚拟节点partit1n的值、文件内容的MD5值插入该红黑树相应子节点中。
2.如权利要求1所述的方法,其特征在于,将一份重复文件保留在storage节点中具体为:将一份重复文件保存在depute_account中;所述dedupe_account为用于存放重复数据而构建的账户。
3.一种基于Openstack Object Storage系统删除重复数据方法,所述OpenstackObject Storage系统包括proxy节点和storage节点;其特征在于,所述proxy节点包括去重中间件模块,所述storage节点包括去重服务进程模块,其中该去重中间件模块构建有去重hash环,该去重hash环的每个节点为一个红黑树的根节点,所述红黑树的子节点保存有虚拟节点partit1n的值、文件内容的MD5值;所述方法包括步骤: 接收客户端的文件存储请求; 获取待存储的文件的MD5值,并根据所述MD5值对η取模的结果查找红黑树根节点,其中η为去重hash环包括的节点数; 在找到红黑树的根节点后,判断所述MD5值是否存在于该红黑树中的子节点中,如果存在于所述子节点中,则确认存在重复文件,将存储待存储文件的位置保存一份指向所述重复文件的重定向文件;如果不存在于所述子节点中,则确认不存在重复文件,在存储待存储文件的位置存储该待存储文件,并以待存储文件的MD5值为key将该待存储文件的虚拟节点partit1n的值、MD5值插入该红黑树相应子节点中。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:当收到删除文件的请求时,如果所删除的文件是重定向文件,则删除所述重定向文件;如果不存在重定向文件,则将所述storage节点中的文件内容删除,并将该文件的指纹对应的红黑树子节点删除。
5.一种基于Openstack Object Storage系统删除重复数据的装置,所述OpenstackObject Storage系统包括proxy节点和storage节点;其特征在于,该装置包括: 位于storage节点的去重服务进程模块,用于扫描所述storage节点中每个文件系统分区下所保存的文件,生成每个文件对应的指纹,并将这些指纹通过指纹文件发送至所述去重中间件模块;以及当存在重复文件时,通知storage节点将一份重复文件保留在storage节点中,并删除其他重复文件,在原本存储其他重复文件的位置保存一份指向该被保留的重复文件的重定向文件;所述指纹文件包括一个虚拟节点partit1n的值以及每个文件内容的MD5值; 位于proxy节点的去重中间件模块,用于构建去重hash环,该去重hash环的每个节点为一个红黑树的根节点,根据各MD5值对η取模的结果查找各指纹所对应的红黑树根节点,其中η为去重hash环包括的节点数;在找到红黑树根节点后,分别判断每个指纹中包含的md5值是否已存在于对应红黑树子节点中,针对任一指纹的md5值存在于红黑树子节点中的情况,进一步判断该红黑树子节点所存的虚拟节点partit1n的值与该指纹所在的指纹文件中包括的虚拟节点partit1n值是否相同,如果不同,则确认存在重复文件并告知所述去重服务进程模块;如果不存在重复文件,则以各MD5值为key将每个指纹文件中包含的虚拟节点partit1n的值、文件内容的MD5值插入该红黑树相应子节点中。
6.如权利要求5所述的装置,其特征在于,所述去重服务进程模块通知所述storage节点将一份重复文件保留在storage节点中具体为:将一份重复文件保存在depute_account中;所述dedupe_account为用于存放重复数据而构建的账户。
7.一种基于Openstack Object Storage系统删除重复数据的装置,所述OpenstackObject Storage系统包括proxy节点和storage节点;其特征在于,该装置包括, 所述去重中间件模块,用于构建去重hash环,该去重hash环的每个节点为一个红黑树的根节点,所述红黑树的子节点保存有虚拟节点partit1n的值、文件内容的MD5值;当接收到客户端的文件存储请求时,获取待存储的文件的MD5值,并根据所述MD5值对η取模的结果查找红黑树根节点,其中η为去重hash环包括的节点数;在找到红黑树的根节点后,判断所述MD5值是否存在于该红黑树中的子节点中,如果存在于所述子节点中,则确认存在重复文件,通知所述去重服务进程;如果不存在于所述子节点中,则以待存储文件的MD5值为key将该待存储文件的虚拟节点partit1n的值、MD5值插入该红黑树相应子节点中; 所述去重服务进程模块,用于在存在重复文件时,通知storage节点将存储待存储文件的位置保存一份指向所述重复文件的重定向文件;在不存在重复文件时,通知storage在存储待存储文件的位置存储该待存储文件。
8.根据权利要求7所述的装置,其特征在于,当收到删除文件的请求时,所述去重服务进程模块还用于如果所删除的文件是重定向文件,则通知storage节点删除所述重定向文件;如果不存在重定向文件,则通知storage节点将文件内容删除,并通知所述去重中间件模块将该文件的指纹对应的红黑树子节点删除。
9.根据权利要求7所述的装置,其特征在于,所述去重hash环按照预定规则拆分成多个环分别存储于多个所述proxy节点。
10.根据权利要求7所述的装置,其特征在于,所述去重中间件模块以WSGI形式安装于所述proxy节点。
【文档编号】G06F17/30GK104408111SQ201410682621
【公开日】2015年3月11日 申请日期:2014年11月24日 优先权日:2014年11月24日
【发明者】张朝潞 申请人:浙江宇视科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1