一种分布式对象存储系统中文件上传方法及装置与流程

文档序号:16900753发布日期:2019-02-19 17:58阅读:354来源:国知局
一种分布式对象存储系统中文件上传方法及装置与流程

本发明涉及分布式对象存储技术领域,特别涉及一种分布式对象存储系统中文件上传方法、装置、分布式对象存储系统及计算机可读存储介质。



背景技术:

目前,越来越多的业务场景需要使用分布式对象存储系统,其中,分布式对象存储系统指的是面向非结构化数据对象的分布式存储。随着互联网数据的爆炸性增长,人们对存储系统的容量要求越来越大,且单个容器存放的对象数量也越来越多。因此针对大文件的上传是用户经常要执行的操作。其中,大文件上传具体过程是,当用户上传大文件时,会将大文件分成多片进行上传,默认情况下,每片为15m,也就是说超过15m的文件将默认采用分片上传的方式上传文件,此时超过15m的文件就称之为大文件。其中,分片上传即将客户端要上传的大文件按照用户设定的分片大小分成若干部分,然后分别上传所有的分片并存储。而面对动辄几十g的大文件,如何提升存储系统中上传大文件时的效率就显得尤为重要。



技术实现要素:

本发明的目的是提供一种分布式对象存储系统中文件上传方法、装置、分布式对象存储系统及计算机可读存储介质,能够避免相同内容重复上传,进而提升存储系统中上传大文件时的效率。

为解决上述技术问题,本发明提供一种分布式对象存储系统中文件上传方法,包括:

当接收到大文件上传指令时,确定待上传大文件的名称;

计算所述待上传大文件的各分片的md5值;

根据所述名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;

分别判断所述待上传大文件的分片的md5值与所述同名大文件中对应的分片的md5值是否相等;

若不相等,则上传所述待上传大文件中不相等的md5值对应的分片。

可选地,所述计算所述待上传大文件的各分片的md5值之前,还包括:

计算所述待上传大文件的整体md5值;

获取所述同名大文件对应的整体头对象中存储的整体md5值;

判断所述待上传大文件的整体md5值与所述同名大文件的整体md5值是否相等;

若相等,则不上传所述待上传大文件;

若不相等,则执行所述计算所述待上传大文件的各分片的md5值的步骤。

可选地,所述计算所述待上传大文件的整体md5值之前,还包括:

判断分布式对象存储系统中是否存在所述同名大文件;

若存在,则执行所述计算所述待上传大文件的整体md5值的步骤。

可选地,当所述分布式对象存储系统中不存在所述同名大文件时,包括:

上传所述待上传大文件的全部分片。

本发明还提供一种分布式对象存储系统中文件上传装置,包括:

获取模块,用于当接收到大文件上传指令时,确定待上传大文件的名称;

第一计算模块,用于计算所述待上传大文件的各分片的md5值;

分片md5值获取模块,用于根据所述名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;

第一判断模块,用于分别判断所述待上传大文件的分片的md5值与所述同名大文件中对应的分片的md5值是否相等;

第一执行模块,用于若所述待上传大文件与所述同名大文件中对应分片的md5值不相等,则上传所述待上传大文件中不相等的md5值对应的分片。

可选地,所述文件上传装置还包括:

第二计算模块,用于计算所述待上传大文件的整体md5值;

整体md5值获取模块,用于获取所述同名大文件对应的整体头对象中存储的整体md5值;

第二判断模块,用于判断所述待上传大文件的整体md5值与所述同名大文件的整体md5值是否相等;

第二执行模块,用于若所述待上传大文件与所述同名大文件的整体md5值相等,则不上传所述待上传大文件;若所述待上传大文件与所述同名大文件的整体md5值不相等,则触发所述第一计算模块。

可选地,所述文件上传装置还包括:

第三判断模块,用于判断分布式对象存储系统中是否存在所述同名大文件;

第三执行模块,用于若所述分布式对象存储系统中存在所述同名大文件,则触发所述第二计算模块。

可选地,所述第三执行模块还用于若所述分布式对象存储系统中不存在所述同名大文件,则上传所述待上传大文件的全部分片。

本发明还提供一种分布式对象存储系统,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述所述分布式对象存储系统中文件上传方法的步骤。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述所述分布式对象存储系统中文件上传方法的步骤。

本发明所提供的分布式对象存储系统中文件上传方法,包括:当接收到大文件上传指令时,确定待上传大文件的名称;计算所述待上传大文件的各分片的md5值;根据所述名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;分别判断所述待上传大文件的分片的md5值与所述同名大文件中对应的分片的md5值是否相等;若不相等,则上传所述待上传大文件中不相等的md5值对应的分片。

可见,该方法在上传大文件时,通过比较待上传大文件各分片md5值与同名大文件各分片md5值,上传待上传大文件中与同名大文件中不相等的md5值对应的分片,即仅上传与系统中已有的同名大文件中不同的内容,对于两者相同的内容不需要再次上传,进而提升存储系统中上传大文件时的效率;本发明还提供了一种分布式对象存储系统中文件上传装置、分布式对象存储系统及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例所提供的分布式对象存储系统中文件上传方法的流程图;

图2为本发明实施例所提供的分布式对象存储系统中文件上传装置的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前,分布式对象存储系统(可以简称为对象存储系统)针对大文件的上传,执行与普通对象上传不一样的流程。其将整个大文件上传执行流程分为三个阶段:初始化多片上传、上传分片、完成多片上传。最终的执行结果是将大文件以分片的形式存储于对象存储系统中。上传过程中会生成两类很重要的头对象,整个大文件的头对象以及每个分片的头对象,分别用以标识该大文件及每个分片。其中对于同名的大文件上传,其所生成的大文件的头对象命名是相同的,而每个分片对象的名字中由于含有唯一标识upload_id而不同。但所有的对象名字中都含有大文件的文件名。其中,upload_id:大文件上传的唯一标识,用于断点续传、列出分片、销毁已上传分片等。同名大文件的不同上传产生的upload_id不同。

在现有的分布式对象存储系统中,为了支持多版本功能,系统是允许上传同名文件的。针对同名大文件的上传,抑或称之为大文件的重复上传以及修改内容不多的大文件上传,目前的分布式对象存储系统的执行过程如下:执行与普通大文件上传同样的流程,即将大文件分片后,上传所有的分片至存储系统并保存。之前已提到,对于同名的大文件上传,其所生成的大文件的头对象命名是相同的,每个分片对象的名字中由于含有唯一标识upload_id而不同。因此新生成的大文件的头对象会覆盖之前的,而对于之前的所有分片,则交由系统的垃圾处理系统来处理,在规定时间内将其全部删除。

上述过程的大文件上传效率是极差的。对于大文件的重复上传以及内容变动极少的大文件上传,其实完全没必要将其全部上传。为此,本实施例提供一种提升大文件上传效率的方法,能够减小分布式对象存储系统的计算开销,缓解i/o压力,加快大文件的上传速度,改善用户体验。具体请参考图1,图1为本发明实施例所提供的分布式对象存储系统中文件上传方法的流程图;该方法可以包括:

s110、当接收到大文件上传指令时,确定待上传大文件的名称。

本实施例中在接收到大文件上传指令时,首先确定待上传大文件的名称。由于本实施例中应用场景是在系统中已经存在有同名大文件之后,需要上传与之同名的待上传大文件的场景。因此在获取到大文件上传指令,首先需要确定待上传大文件的名称,进而可以根据该名称确定与待上传大文件同名的已经上传过的同名大文件。后续本实施例中均通过同名大文件来指与待上传大文件同名的已上传的大文件。因此,为了提高本实施例中具有同名大文件的待上传文件的上传效率,还可以首先判断待上传大文件是否具有已上传的同名大文件。若不存在,则直接按照相关技术中的方式上传,即直接上传待上传大文件的全部分片。若存在,则继续执行本申请中的步骤。进而可以提高上传效率,避免无用功。即优选的,判断分布式对象存储系统中是否存在同名大文件。该判断步骤设置在步骤s110获取到待上传大文件的名称之后,进而可以根据该名称来确定是否存在同名大文件。当然,为了提高待上传文件的上传效率,避免无用功。本实施例中该判断步骤在执行完步骤s110获取到待上传大文件的名称之后,立即执行。

需要说明的是,本实施例并不对大文件的具体大小进行限定。例如大文件可以是指当前默认的大于15m的文件。或者说是由于当前默认情况下,每个分片的大小为15m,因此超过15m的文件将默认采用分片上传的方式上传文件,此时超过15m的文件就称之为大文件。所以也可以理解为超过默认分片大小的文件就是大文件,也就是需要分片上传的文件就是大文件。可以理解的是,由于本实施例并不对大文件的具体大小进行限定,也就是本实施例并不对分片的大小进行限定。可以根据实际情况进行确定。

s120、计算待上传大文件的各分片的md5值。

其中,md5是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。即通过对比md5值可以确定两个分片的数据是否一致,进而可以根据md5比较结果,确定是否需要上传对应数据。

本实施例中在确定待上传文件存在同名大文件时,计算待上传大文件的各分片的md5值,本实施例中并不限定计算待上传大文件的各分片的md5值的方式,例如,若待上传大文件中分片头对象中已经计算并存放了当前分片内容的md5值,则步骤s120可以直接从待上传大文件中分片头对象中获取各分片的md5值。若待上传大文件中分片头对象中没有存放当前分片内容的md5值,则步骤s120需要计算待上传大文件的各分片的md5值,此时优选的,为了便于后续再有与该待上传大文件同名的待上传大文件时,此时的待上传大文件就变成了已上传的同名大文件,为了更加快速执行步骤s130,此时可以将计算得到的各分片的md5值直接存储在分片头对象中。

s130、根据名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值。

本实施例中可以直接从已上传的同名大文件对应的分片头对象中存储的各分片的md5值。

本实施例中并不限定步骤s120和步骤s130的顺序。也就是说,先执行步骤s130再执行步骤s120也可。

s140、分别判断待上传大文件的分片的md5值与同名大文件中对应的分片的md5值是否相等。

本步骤的目的是在于确定待上传大文件和同名大文件之间是否存在md5值相等的分片。也就是说,相等的md5值对应的待上传大文件中的分片不需要上传,仅上传剩余分片,这样就可以避免相同数据的重复上传,减少了需上传的分片的数量,也就提升了待上传大文件的上传效率,能够减小分布式对象存储系统的计算开销,缓解i/o压力,加快大文件的上传速度,改善用户体验。由于大文件在划分为分片时,是按照一定规则进行的,因此两个内容相同的大文件在划分分片后,对应的分片顺序是相同的,本实施例中为了提高判断效率,减少判断次数,本实施例中可以按照分片对应关系进行比较(可以简单理解为,分片头对象中分片对象是按照顺序排列的,可以将待上传大文件与同名大文件中位于同样位置的两个分片对象看成是相对应的分片对象。例如待上传大文件的第3个分片与同名大文件的第3个分片为对应分片),也就是分别比较对应的两个分片的md5值是否相等,若相等,则不上传该分片,并判断下一组对应的两个分片的md5值是否相等,循环执行直到全部的对应分片比较完为止(即依次比较,可以理解为单线程处理)。当然,也可以是用多个线程同时执行比较过程,即通过并行提高比较效率。即本实施例中分别判断待上传大文件的分片的md5值与同名大文件中对应的分片的md5值是否相等。

s150、若不相等,则上传待上传大文件中不相等的md5值对应的分片。

s160、若相等,则不上传待上传大文件中相等的md5值对应的分片。

进一步,本实施例中还存在待上传大文件与系统中已存在的同名大文件完全相同的情况,此时为了更加快速确定不需要上传的操作,可以仅比较待上传大文件与系统中已存在的同名大文件整体md5即可,从而可以避免执行分别比较各个分片的md5的操作。即优选的,计算待上传大文件的各分片的md5值之前还可以包括:

计算待上传大文件的整体md5值;

获取同名大文件对应的整体头对象中存储的整体md5值;

判断待上传大文件的整体md5值与同名大文件的整体md5值是否相等;

若相等,则不上传待上传大文件;

若不相等,则执行计算待上传大文件的各分片的md5值的步骤,也就是执行步骤s120。

本实施例中并不限定计算整体md5值的方式,可以参考计算分片md5值的具体方式。本实施例中可以在需要获取待上传大文件的整体md5值以及同名大文件对应的md5值时,可以分别计算获取;当然也可以是在分布式对象存储系统服务端代码中添加相关逻辑,用于计算大文件整体md5值,并存放于整体头对象中,用于后续比较时获取。

此时,判断分布式对象存储系统中是否存在同名大文件的步骤可以在计算待上传大文件的整体md5值之前执行。也就是判断分布式对象存储系统中是否存在同名大文件;若存在同名大文件,则执行计算待上传大文件的整体md5值的步骤。

下面通过具体例子说明上述过程:

步骤1:当客户端发起大文件上传请求(也就是接收到大文件上传指令)后,首先判断对象存储系统相应容器中是否有同名大文件的对象,若没有,则执行大文件上传,即直接上传待上传大文件的全部分片;否则,计算本地大文件(即待上传大文件)的整体md5值;

步骤2:获取服务端同名大文件的整体头对象中存储的整体md5值,并与本地大文件的整体md5值进行比较,若二者md5值相同,则说明二者内容相同无变动,跳过上传;否则,在上传分片之前计算本地大文件的各分片的md5值;

步骤3:获取服务端同名大文件的分片头对象中存储的各分片的md5值,并与本地计算的分片md5值进行比较,若二者md5值相同,则说明当前分片内容相同无变动,则跳过当前分片的上传;否则,上传当前分片;

步骤4:循环执行步骤3,直至所有分片上传完成,结束本次大文件上传任务。

即获取存储系统中同名大文件的整体md5值,与本地计算出来的md5值进行比较,若二者相同,证明存储系统中已存在相同内容的文件,可不必再次上传,极大提升了用户体验;若二者不相同,获取存储系统中同名大文件对应分片的md5值,与本地计算出来的分片内容的md5值进行比较,若相同,则跳过当前分片的上传,只上传内容变动的分片内容,极大地提升了大文件的上传速度,提升了上传效率。

基于上述技术方案,本发明实施例提供的分布式对象存储系统中文件上传方法,分布式对象存储系统现有的针对同名大文件的上传,采用与普通大文件上传相同的方法,也就是将大文件分片后全部上传,然后将之前所上传的同名大文件的所有分片交由垃圾处理系统清理掉。此种处理方法对于内容完全相同的同名大文件的重复上传,以及内容变动较少的同名大文件的上传来说,既占用了带宽,占用内存资源,又增加了i/o,同时给用户带来极差的体验。针对此场景,本实施例提出了一种分布式对象存储系统中提升大文件上传效率的方法,增加了大文件整体md5值及对应分片md5值的比较机制,达到重复内容不上传的目的,减少了内存占用,避免上传重复的内容,有效提升上传效率,提高用户体验。

下面对本发明实施例提供的分布式对象存储系统中文件上传装置、分布式对象存储系统及计算机可读存储介质进行介绍,下文描述的分布式对象存储系统中文件上传装置、分布式对象存储系统及计算机可读存储介质与上文描述的分布式对象存储系统中文件上传方法可相互对应参照。

请参考图2,图2为本发明实施例所提供的分布式对象存储系统中文件上传装置的结构框图;该装置可以包括:

获取模块100,用于当接收到大文件上传指令时,确定待上传大文件的名称;

第一计算模块200,用于计算待上传大文件的各分片的md5值;

分片md5值获取模块300,用于根据名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;

第一判断模块400,用于分别判断待上传大文件的分片的md5值与同名大文件中对应的分片的md5值是否相等;

第一执行模块500,用于若待上传大文件与同名大文件中对应分片的md5值不相等,则上传待上传大文件中不相等的md5值对应的分片;若待上传大文件与同名大文件中对应分片的md5值相等,则不上传待上传大文件中相等的md5值对应的分片。

基于上述实施例,该装置还可以包括:

第二计算模块,用于计算待上传大文件的整体md5值;

整体md5值获取模块,用于获取同名大文件对应的整体头对象中存储的整体md5值;

第二判断模块,用于判断待上传大文件的整体md5值与同名大文件的整体md5值是否相等;

第二执行模块,用于若待上传大文件与同名大文件的整体md5值相等,则不上传待上传大文件;若待上传大文件与同名大文件的整体md5值不相等,则触发第一计算模块。

基于上述实施例,该装置还可以包括:

第三判断模块,用于判断分布式对象存储系统中是否存在同名大文件;

第三执行模块,用于若分布式对象存储系统中存在同名大文件,则触发第二计算模块。

基于上述实施例,第三执行模块还用于若分布式对象存储系统中不存在同名大文件,则上传待上传大文件的全部分片。

需要说明的是,基于上述任意实施例,所述装置可以是基于可编程逻辑器件实现的,可编程逻辑器件包括fpga,cpld,单片机等。该可编程逻辑器件可以是在分布式对象存储系统中。

本发明实施例还提供一种分布式对象存储系统,包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时实现上述任意实施例所述的分布式对象存储系统中文件上传方法的步骤。如处理器用于执行计算机程序时实现当接收到大文件上传指令时,确定待上传大文件的名称;计算所述待上传大文件的各分片的md5值;根据所述名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;分别判断所述待上传大文件的分片的md5值与所述同名大文件中对应的分片的md5值是否相等;若不相等,则上传所述待上传大文件中不相等的md5值对应的分片。

本实施例并不对分布式对象存储系统的规模进行限定。

本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例所述的分布式对象存储系统中文件上传方法的步骤。如计算机程序被处理器执行时实现当接收到大文件上传指令时,确定待上传大文件的名称;计算所述待上传大文件的各分片的md5值;根据所述名称获取已上传的同名大文件对应的分片头对象中存储的各分片的md5值;分别判断所述待上传大文件的分片的md5值与所述同名大文件中对应的分片的md5值是否相等;若不相等,则上传所述待上传大文件中不相等的md5值对应的分片。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的一种分布式对象存储系统中文件上传方法、装置、分布式对象存储系统及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1