数据文件的传输方法及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种数据文件的传输方法及装置。
背景技术
目前,在互联网环境下传输大数据文件的实现过程如下:
发送方执行如下:
步骤1)将大文件分成若干数据包;
步骤2)为所述大文件和每个数据包分配标识;
步骤3)判断数据包是否全部发送完,若没有发送完,执行步骤4);若发送完,结束发送;
步骤4)以数据包为单位向接收方发送数据;
步骤5)若接收方返回的结果为正确接收,执行步骤3),否则执行步骤4)。
接收方执行如下:
步骤1’)正确接收到发送方发送的数据后向发送方返回正确接收,否则返回错误;
步骤2’)全部数据包都正确接收完毕后根据所述文件和数据包的标识将所有数据包重组成所述大文件。
然而,在采用上述方法传输单个大数据文件时,一方面,由于主要采用单线程发送方式,因而造成单个大数据文件的传输速度较慢。另一方面,对单个大数据文件的完整性校验,通常在该大数据文件下载完成之后进行,因而,造成单个大数据文件在进行可靠传输时需要的时间较长,资源开销较大,进而造成网络带宽的利用率较低。
发明内容
本发明的实施例提供了一种数据文件的传输方法及装置,提高了单个大数据文件的传输速度,缩短了单个大数据文件的可靠传输时间,提高了网络带宽的利用率。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,提供一种数据文件的传输方法,包括:
发送端将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;
所述发送端向接收端的至少两个下载线程同时发送所述至少两个下载线程各自对应的分块数据。
还提供一种数据文件的传输方法,包括:
接收端创建至少两个下载线程,所述每个下载线程对应一个任务队列,每个所述任务队列与单个大数据文件中不同编号的分块数据相映射,所有所述任务队列中映射的分块数据组合后为所述单个大数据文件;
所述接收端启动所有所述下载线程进行并发下载,每个所述下载线程从发送端独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;
所述接收端同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序;
所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。
另一方面,提供一种发送端,包括:
分块单元,用于将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;
发送单元,用于向接收端的至少两个下载线程同时发送所述至少两个下载线程各自对应的分块数据。
还提供一种接收端,包括:
创建单元,用于创建至少两个下载线程,所述每个下载线程对应一个任务队列,每个所述任务队列与单个大数据文件中不同编号的分块数据相映射,所有所述任务队列中映射的分块数据组合后为所述单个大数据文件;
并发下载单元,用于启动所有所述下载线程进行并发下载,每个所述下载线程从发送端独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;
校验单元,用于同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序;
重组单元,用于所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。
由上述技术方案所描述的本发明实施例中,发送端将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;接收端在进行所述单个大数据文件的下载时,通过创建至少两个下载线程,启动所有所述下载线程进行并发下载,每个所述下载线程独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序;所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。可以看出,当上述单个大数据文件中编号为最后一个的分块数据下载完成时,可以立即得到编号为最后一个的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,亦即得到了对下载的单个大数据文件的数据完整性校验值,并且所述目标文件中也写入了所有的分块数据,亦即也完成了将所有的分块数据重组为单个大数据文件。与现有技术中通过单线程下载单个大数据文件,并在该单个大数据文件下载完成之后再进行数据完整性校验相比,本发明实施例通过多个下载线程的并发执行,不仅提高了单个大数据文件的传输速度,而且通过有序迭代性的数据完整性校验和实时将每个下载的分块数据写入目标文件,实现了在完成单个大数据文件下载的同时,也完成了单个大数据文件的数据完整性校验和重组,缩短了单个大数据文件的可靠传输时间,提高了网络带宽的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种数据文件传输方法的流程图;
图2为本发明实施例1提供的另一种数据文件传输方法的流程图;
图3为本发明实施例1提供的一种分块数据与任务队列的映射示意图;
图4为本发明实施例1提供的一种数据文件传输方法的示意图;
图5为本发明实施例2提供的一种发送端的结构图;
图6为本发明实施例2提供的一种接收端的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
如图1所示,本发明实施例提供一种数据文件的传输方法,由发送端执行,具体如下:
101、发送端将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;
102、所述发送端向接收端的至少两个下载线程同时发送所述至少两个下载线程各自对应的分块数据。
相应地,如图2所示,本发明实施例还提供一种数据文件的传输方法,由接收端执行,具体如下:
201、接收端创建至少两个下载线程,所述每个下载线程对应一个任务队列,每个所述任务队列与单个大数据文件中不同编号的分块数据相映射,所有所述任务队列中映射的分块数据组合后为所述单个大数据文件;
例如,如图3所示,发送端按照指定块大小将单个大数据文件顺序分成n个分块数据,并依次编号为Block 0、Block 1、Block 2、...、Block(n-1)。接收端建立m个下载线程,m>1且m为正整数,每个下载线程对应一个任务队列,比如,第i个下载线程对应第i个任务队列,m≥i≥1且i为正整数。每个所述任务队列与单个大数据文件中不同编号的分块数据相映射,一种可采用的映射方式如图3所示,第1个任务队列与Block 0、Block m、…、Blockkm、…、Block(n-2)相映射,第2个任务队列与Block 1、Block m+1、…、Block km+1、…、Block(n-)相映射,以此类推。
当然,每个所述任务队列与单个大数据文件中不同编号的分块数据相映射不局限于上述映射方式,只要满足上述m个任务队列包含所有的n个分块即可,亦即所有所述任务队列中映射的分块数据组合后为所述单个大数据文件。
202、所述接收端启动所有所述下载线程进行并发下载,每个所述下载线程从发送端独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;
203、所述接收端同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序,亦即为按照0,1,2…n-1的顺序;
204、所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。
本发明实施例中,发送端将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;接收端在进行所述单个大数据文件的下载时,通过创建至少两个下载线程,启动所有所述下载线程进行并发下载,每个所述下载线程从发送端独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序;所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。可以看出,当上述单个大数据文件中编号为最后一个的分块数据下载完成时,可以立即得到编号为最后一个的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,亦即得到了对下载的单个大数据文件的数据完整性校验值,并且所述目标文件中也写入了所有的分块数据,亦即也完成了将所有的分块数据重组为单个大数据文件。与现有技术中通过单线程下载单个大数据文件,并在该单个大数据文件下载完成之后再进行数据完整性校验相比,本发明实施例通过多个下载线程的并发执行,不仅提高了单个大数据文件的传输速度,而且通过有序迭代性的数据完整性校验和实时将每个下载的分块数据写入目标文件,实现了在完成单个大数据文件下载的同时,也完成了单个大数据文件的数据完整性校验和重组,缩短了单个大数据文件的可靠传输时间,提高了网络带宽的利用率。
进一步地,上述发送端按照FTP协议向所述接收端发送数据,所述接收端按照FTP协议从所述发送端通过多线程接收数据。
或者,上述发送端按照HTTP协议向所述接收端发送数据,所述接收端按照HTTP协议从所述发送端通过多线程接收数据。
需要说明的是,上述FTP协议和HTTP协议为支持多线程下载和断点续传的数据通信协议,本发明实施例中的发送端和接收端在进行数据通信时,可采用但不限于上述FTP协议和HTTP协议,其他可以支持多线程下载和断点续传的数据通信协议也可以采用。
在上述发送端将单个大数据文件进行分块,并发送给接收端之前,通常需要通过协议头判断是否支持上述数据通信协议,如果发送端支持上述数据通信协议,则调用上述数据通信协议的处理单元,建立协议连接。如果上述数据通信协议支持断点续传,则确定断点续传的相应参数,之后,开始进行数据的传输。
进一步地,如图4所示,上述步骤203可以采用如下方式实现:
所述并行单线程按照0,1,2…n-1的顺序(亦即根据分块编号从小到大的顺序)依次获取缓冲队列中编号为i的分块数据,并根据f(i)=f(i-1)->h(Block(i))对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,其中,所述f(i)为编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,即f(i)=g(Block0+Block1…Block(i)),Block0为编号为0的分块数据,Block1为编号为1的分块数据,Block(i)为编号为i的分块数据,g表示校验算法,h表示叠加算法,f(i-1)->h(Block(i))表示在f(i-1)的值上以编号为i的分块数据为参数执行h算法。
具体地,上述校验算法g可采用MD5校验算法。
按照0,1,2…n-1的顺序依次获取到的分块数据,并对获取到的分块数据进行有序迭代性校验,得到的校验值如下:
编号为0的分块数据的校验值为f(0)=g(Block 0);
编号为0,1的分块数据叠加在一起的组合块数据的校验值为f(1)=g(Block0+Block 1)=f(0)->h(Bl ock 1);
编号为0,1,2的分块数据叠加在一起的组合块数据的校验值为f(2)=g(Block0+Block1+Block2)=f(1)->h(Block2);
依次类推,f(i)=f(i-1)->h(Bl ock(i))
本发明实施例中采用的校验算法需要满足f(i)=f(i-1)->h(Block(i)),即在f(i-1)值上以编号为i+1的分块数据为参数执行h算法则生成f(i),此时,称该数据完整性校验算法满足有序迭代性。
可见,本发明实施例可以采用但不限于上述MD5校验算法,只要校验算法满足有序迭代性即可使用。
如图4所示,在进行上述数据完整性校验的同时,每当利用编号为i的分块数据完成数据完整性校验时,则将编号为i的分块数据写入目标文件。从而在完成单个大数据文件下载的同时,也完成了单个大数据文件的数据完整性校验和重组,缩短了单个大数据文件的可靠传输时间,提高了网络带宽的利用率。
本发明实施例可以应用在互联网长宽网络(Long Fat Networks)中,长宽网络环境中的上游服务器(发送端)上存储单个大数据文件,并提供包括但不限于FTP、HTTP等的众多支持多线程下载的数据传输协议服务;下游服务器(接收端)通过本发明实施例提供的方法将上游服务器上的单个大数据文件下载到本地,并提供包括但不限于md5的数据完整性校验信息进行直接或间接的迭代性数据完整性算法校验。可以想到的是,下游服务器在启动下载任务时需要指定上游服务器地址和文件的远程存储位置以及文件的本地存储位置。
上述长宽网络是异地数据中心之间常见的特性网络形态,其特点是带宽大但时延高,导致网络带宽无法有效利用,由此产生长宽管道问题,因此单个大数据文件无法进行快速传输。当采用本发明实施例提供的方法后,可以数倍提升数据传输速率,在适当区间内下载线程的并发数越大,数据传输速率的提升倍数越大。同时,本发明实施例提供的方法是边传输边进行有序迭代性的数据完整性校验,数据传输完成即同步完成数据完整性校验,相比先传输大数据文件再进行该文件完整性校验的传统可靠性传输技术,本方法大大缩短了大文件的可靠传输时间。因此,本方法有效提升了长宽网络带宽利用率。例如:在北京到上海的2G带宽下,千兆网卡服务器间传输大数据文件,传统传输方法传输带宽仅有1.5-2MB/s,本方法可轻松达到15-20MB/s,相当于实际传输带宽获得10倍提升;又例如,在某种服务器机型下,对下载完成的20G数据文件做md5校验需要耗时约6分钟,而本方法则可完全节省此时间开销。
实施例2:
如图5所示,本发明实施例提供一种发送端,包括:
分块单元11,用于将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;
发送单元12,用于向接收端的至少两个下载线程同时发送所述至少两个下载线程各自对应的分块数据。
如图6所示,本发明实施例还提供一种接收端,包括:
创建单元21,用于创建至少两个下载线程,所述每个下载线程对应一个任务队列,每个所述任务队列与单个大数据文件中不同编号的分块数据相映射,所有所述任务队列中映射的分块数据组合后为所述单个大数据文件;
并发下载单元22,用于启动所有所述下载线程进行并发下载,每个所述下载线程从发送端独立下载各自对应的任务队列中的分块数据,并将下载的分块数据写入缓冲队列;
校验单元23,用于同时启动一个并行单线程,所述并行单线程依次获取缓冲队列中编号为i的分块数据,并对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,所述i的取值顺序为根据分块编号从小到大的顺序;
重组单元24,用于所述接收端将所述编号为i的分块数据写入目标文件,并将所述编号为i的分块数据从所述缓冲队列中删除。
本发明实施例中,发送端将单个大数据文件进行分块,并为每个分块数据按顺序进行编号;接收端一侧,当上述单个大数据文件中编号为最后一个的分块数据下载完成时,可以立即得到编号为最后一个的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,亦即得到了对下载的单个大数据文件的数据完整性校验值,并且所述目标文件中也写入了所有的分块数据,亦即也完成了将所有的分块数据重组为单个大数据文件。与现有技术中通过单线程下载单个大数据文件,并在该单个大数据文件下载完成之后再进行数据完整性校验相比,本发明实施例通过多个下载线程的并发执行,不仅提高了单个大数据文件的传输速度,而且通过有序迭代性的数据完整性校验和实时将每个下载的分块数据写入目标文件,实现了在完成单个大数据文件下载的同时,也完成了单个大数据文件的数据完整性校验和重组,缩短了单个大数据文件的可靠传输时间,提高了网络带宽的利用率。
进一步地,所述校验单元具体根据f(i)=f(i-1)->h(Block(i))对所述编号为i的分块数据进行满足有序迭代性的数据完整性校验,得到编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,其中,所述f(i)为编号为i的分块数据和之前的所有分块数据有序组合后的数据完整性校验值,即f(i)=g(Block0+Block1…Block(i)),Block0为编号为0的分块数据,Block1为编号为1的分块数据,Block(i)为编号为i的分块数据,g表示校验算法,h表示叠加算法,f(i-1)->h(Block(i))表示在f(i-1)的值上以编号为i的分块数据为参数执行h算法。
接收端的功能实现过程可参见实施例1中接收端执行方法的相关描述。
进一步地,上述发送端按照FTP协议向所述接收端发送数据,所述接收端按照FTP协议从所述发送端通过多线程接收数据。
或者,上述发送端按照HTTP协议向所述接收端发送数据,所述接收端按照HTTP协议从所述发送端通过多线程接收数据。
本发明实施例主要应用于长宽网络中大数据文件的下载处理中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。