服务器中的数据合并方法及系统的制作方法

文档序号:6526428阅读:135来源:国知局
服务器中的数据合并方法及系统的制作方法
【专利摘要】本申请公开了一种服务器中的数据合并方法,包括以下步骤:接收数据文件;把所述数据文件放置于对应的内部队列中;取得所述内部队列中的所述数据文件,并根据所述数据文件的文件大小决定切分数量;根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段;对应于不同大小的切分片段,分别调用预先创建的写入线程,把所述切分片段依序附加写入服务器的分散式文件装置中的与该数据文件对应的目标文件。通过本方法,可以不需关闭串流写入的动作,所以在切分片段一直开启的状态把新的切分片段合并在文件的尾端,因此可以加快合并切分片段为数据文件的速度。
【专利说明】服务器中的数据合并方法及系统
【技术领域】
[0001]本申请涉及数据传输的方法及系统,具体涉及一种服务器中的数据合并方法及系统。
【背景技术】
[0002]随着网络流量的快速成长,许多过去不容易实现的服务也可以被轻易的完成。例如:宽带的上传多媒体文件(multimedia file)。由于海量的传输仍会影响服务器的负荷量。因此在已知的多媒体服务器也会具备带宽管理(Bandwidth Manager)的功能。服务器可以透过带宽分布或缓存等方式减轻同时间的资料传输量。
[0003]此外,所述的传输方式更结合了多个实体磁盘,使得数据可以同步的写入所述磁盘中。而现有技术对数据写入磁盘的方式,是将数据同步的由来源端写入服务器中。服务器会暂存这些数据文件。之后,服务器在将这些数据文件分批的写入实体磁盘。
[0004]这种写入的方式的实现成本低廉且快速。但是过去的写入方式是将上传的数据文件切分为多个切分片段。在服务器内部将这些切分片段重新组合。过去的写入技术是将每一切分片段写完后,工作线程会将字节流(I/o Stream)关闭。当下一个切分片段要接续写在数据文件后,另一个工作线程才会开启字节流。这样的处理方式虽然可以实现一次性数据写入。但多个工作线程的开关会造成写入的延迟。而且写入的过程中发生错误,会使得当前已经记录完成的数据文件随之毁损。
[0005]因此数据重新传输的时间就会拉长,而且也会增加网络带宽的负载。此外,同一份数据文件除了要从客户端中重新载入,而且也要在服务器内部重新传输。

【发明内容】

[0006]本申请所要解决的技术问题在于提供一种服务器中的数据合并方法,提高服务器中的切分数据的合并处理速度。
[0007]为了解决上述问题,本申请另揭示了一种数据切分的传输方法,包括以下步骤:接收数据文件;把所述数据文件放置于对应的内部队列中;取得所述内部队列中的所述数据文件并根据所述数据文件的文件大小决定切分数量;根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段;对应于不同大小的切分片段,分别调用预先创建的写入线程,把所述切分片段依序附加写入服务器的分散式文件装置中的与该数据文件对应的目标文件。若服务器的分散式文件装置中不存在所述目标文件,则创建与该数据文件对应的所述目标文件。
[0008]进一步地,所述取得所述内部队列中的所述数据文件,并根据所述数据文件的文件大小决定切分数量,具体包括:取得所述内部队列中的所述数据文件;读取所述数据文件的文件大小;对应于不同的文件大小和预先创建的写入线程的写入数据长度限制决定切
分数量。
[0009]进一步地,所述方法还包括:在所述调用预先创建的写入线程之前,判断与该数据文件对应的目标文件是否存在;当所述与该数据文件对应的目标文件不存在时,创建与该数据文件对应的目标文件。
[0010]所述根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段,具体为:根据所述切分数量确定切分点,对所述数据文件进行预切分;当所述数据文件的切分位置落于所述内部队列的尾端,且所述数据文件的切分点位于所述尾端之前,则修改所述数据文件的切分位置至所述切分点上。
[0011]进一步地包括:若所述切分位置与尾端的长度小于长度阀值,减缩所述切分片段的长度。
[0012]进一步地包括:若所述切分位置与尾端的长度大于所述长度阀值,延伸所述切分片段的长度。
[0013]为了解决上述问题,本申请揭示了一种服务器中的数据合并系统包括:
[0014]本地目录,接收客户端所发送的数据文件;
[0015]扫描模组,连接于所述本地目录,所述扫描模组监视所述本地目录的数据文件是否异动;
[0016]控制模组,耦接于所述扫描模组,所述控制模组包括至少内部队列,所述内部队列储存对应的所述数据文件的路径资讯,所述本地目录的任一所述数据文件异动时,所述扫描模组根据异动的数据文件的种类令所述控制模组创建新的所述内部队列或更新已知的所述数据文件的内容;
[0017]上传模组,连接于所述本地目录,所述本地目录的任一所述数据文件异动时,所述上传模组侦测异动的所述数据文件的一文件种类,并根据所述文件种类将所述数据文件指派至对应的所述内部队列;
[0018]至少一队列监视模组,连接于所述控制模组,所述队列监视模组根据所述内部队列的数量产生对应数量的队列监视模组,所述队列监视模组根据所述内部队列的所述数据文件的大小决定所述数据文件的切分数量,并根据所述切分数量对所述数据文件进行切分以产生对应的切分片段;以及
[0019]多个工作线程,连接于所述队列监视模组,所述工作线程读取相应的所述切分片段;
[0020]其中,所述队列监视模根据所述目标文件的文件头指派工作线程所对应的所述目标文件的写入位置,工作线程根据所属的所述写入位置并以附加处理的方式,把每一所述工作线程所对应的所述切分片段写入所述目标文件。
[0021]所述队列监视模组对所监控的所述内部队列的数据文件根据先进先出的方式从所述内部队列中取出所述数据文件。
[0022]当所述队列监视模组于切分时确认所述数据文件的切分位置落于所述内部队列的一尾端,且所述数据文件的一切分点位于所述尾端之前,则所述队列监视模组修改所述数据文件的切分位置至所述切分点上。
[0023]进一步地,工作线程以并行的方式把切分片段写入所述目标文件中。
[0024]进一步地,所述系统还包括一分散式文件装置,连接于工作线程,工作线程将切分片段依序的写入所述分散式文件装置中。
[0025]与现有技术相比,本申请可以获得包括以下技术效果:[0026]1)本申请对切分片段的合并可以不需关闭串流写入的动作,所以在切分片段一直开启的状态把新的切分片段合并在文件的尾端。因此可以加快合并切分片段为数据文件的速度。
[0027]2)本申请改进数据文件的传输过程,数据文件写入时若发生错误,本申请不需重新从客户端中取得数据文件。
[0028]3)本申请若于传输数据文件的期间中发生错误,本申请可以透过至少一台心跳服务器发报给后台,使得后台人员可以实时的得知何项组件发生异常。
[0029]当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。
【专利附图】

【附图说明】
[0030]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0031]图1是本申请实施例的架构示意图。
[0032]图2是本申请实施例的运作流程示意图。
[0033]图3A是本申请的第一工作线程与第二工作线程的切分片段写入示意图。
[0034]图3B是本申请的第一工作线程与第二工作线程的切分片段写入示意图。
【具体实施方式】
[0035]以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
[0036]如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
[0037]本申请的服务器中的数据上传系统,请参考图1。本申请的传输系统包括:本地端110与多台心跳服务器120。而本地端110由以下元件所构成:本地目录111、上传模块112、扫描模块113、控制模块114、队列监视模块115、工作线程116与分散式文件装置117。
[0038]而本申请所述的各项元件执行以下步骤:
[0039]接收数据文件;
[0040]把所述数据文件放置于对应的内部队列中;
[0041]取得所述内部队列中的所述数据文件,并根据所述数据文件的文件大小决定切分
数量;
[0042]根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段;[0043]对应于不同大小的切分片段,分别调用预先创建的写入线程,把所述切分片段依序附加写入服务器的分散式文件装置117中的与该数据文件对应的目标文件。
[0044]上传模块112连接于本地目录111与控制模块114。扫描模块113连接于本地目录111与控制模块114。在本申请中为能简单且清楚的说明整体的运作方式,因此设置第一心跳服务器121与第二心跳服务器122。但实际上心跳服务器120的数量可以根据服务器的运行能力、带宽或安全性等因素所决定。
[0045]控制模块114连接于扫描模块113、上传模块112、队列监视模块115、第一心跳服务器121与第二心跳服务器122。每一个本地目录111可以存放各自数据文件。例如:视频文件可以被存放置视频本地目录,而广告文件则放至于广告本地目录中。一般而言,本地目录111会定时的接收客户端所传送过来的数据文件。扫描模块113监视本地目录111中的文件是否有所异动。所述文件异动指的是数据的新增、搬移、修改或删除。当本地目录111中的文件有所异动时,则上传模块112将会把异动的数据文件在服务器中的路径传递至控制模块114。
[0046]此外,上传模块112侦测本地目录111所异动的数据文件的文件种类。广义而言所述文件种类可能是音频文件、影片文件或文字文件等等。进一步而言,音频文件又可能细分为mp3、m4a、AAC或ARM等;影片文件又可细分为mov、flv、m4v、mkv或mp4等。
[0047]若控制模块114中未存在数据文件的种类的内部队列1141时,上传模块会驱动控制模块114生成新的内部队列1141。尔后,若有同一种类的数据文件被载入,上传模块112会将新载入的数据文件放入对应的内部队列1141中。
[0048]控制模块114会根据所接收到的文件路径依次分类并产生各自对应的内部队列,且不同的内部队列会指派不同的队列监视模块115来进行处理。在图1中是以第一内部队列、第二内部队列与第三内部队列作为示意。每一个队列监视模块115会记录所属的文件的切分资讯。所述的切分资讯指的是文件被上传至本地目录111时,文件长度也会随之异动。在数据文件切分之前,队列监视模块115先从第一个内部队列取出对头元素(队列的第一个元素),然后才进行切分。而内部队列的数据取出方式是依照先进先出(First InFirst Out, FIFO)的方式所实现。
[0049]队列监视模块115对文件进行等长的切分。在完成文件的切分后,每一个文件切分的片段则定义为切分片段(slice)。队列监视模块115侦测所属的内部队列1141的堆叠数量超过上限时,队列监视模块115会向第一心跳服务器121与第二心跳服务器122发出
报警信息。
[0050]而切分片段的数量是可以根据本地端110的性能所决定。例如:1个工作线程116可处理50兆的切分片段,那么一个200兆的数据文件分配给4个工作线程116处理。同理,500兆的数据文件,可以分配给10个工作线程116处理。
[0051]对于切分时所记录的相关资讯则称为切分资讯。例如,切分时的每一个切分长度与文件位置的在磁盘中的偏移量(offset)。扫描模块113发现本地目录111中的数据文件被删除时,扫描模块113会把控制模块114中的对应内部队列1141予以删除。
[0052]接着,不同的切分片段会被指派各自对应的工作线程116,作为读取本地目录111的数据文件。工作线程116的实现可以由不同的程序语言所实现。在本申请中并不局限程序语言的种类,例如,JAVA语言或ASP语言。实际上,队列监视模块115是对本地目录111的数据文件进行切分的估算,用以得到所述数据文件的每一个应所述要被切分的位置。而实际上进行文件切分处理的对象是由队列监视模块115所实现。队列监视模块115接获切分片段后会根据切分片段的长度,并分派给工作线程116所属的部分数据文件。工作线程116在把所述部分的数据文件写入分散式文件装置117中。
[0053]一般而言,第一心跳服务器121或第二心跳服务器122在超过一预设的期间后未收到心跳要求,心跳服务器120会向发出报警信息。但工作线程116在写入的过程中发生错误时。工作线程116会发送报警信息给第一心跳服务器121与第二心跳服务器122。所述工作线程116同时间也会通知其他工作线程116,要求其他工作线程116停止对分散式文件装置117的写入处理,藉以避免分散式文件装置117中的数据完整性。
[0054]在切分片段写入分散式文件装置117的过程中,本申请的工作线程除了会读取对应的切分片段并根据写入的顺序调整数据文件的合并过程,请配合图2所示理解本方法:
[0055]步骤S200:将数据文件上传至本地目录;
[0056]步骤S210:由控制模组将数据文件放置于内部队列中;
[0057]步骤S220:队列监视模组取得内部队列中的数据文件并根据数据文件的文件大小决定切分数量;
[0058]步骤S230:队列监视模组根据切分数量对数据文件进行切分,并得到多个切分片段;
[0059]步骤S240:配置多个工作线程,每一工作线程读取所属的切分片段;
[0060]步骤S250:判断分散式文件装置中是否存在目标文件;
[0061]步骤S260:若分散式文件装置中不存在目标文件,在分散式文件装置中创建目标文件;
[0062]步骤S270:若分散式文件装置中存在目标文件,队列监视模根据目标文件的文件头指派工作线程所对应的目标文件的写入位置;以及
[0063]步骤S280:工作线程根据所属的写入位置并以附加处理的方式,把每工作线程所对应的切分片段写入目标文件。
[0064]例如,服务器内预先建有内部队列,并预先创建有队列监控线程,不同类型的数据文件对应不同的内部队列。服务器接收到上传的数据文件后,将数据文件放置于相应的内部队列中。不同内部队列对应创建有不同的工作线程,用于切分数据文件,得到数据片段,并把切分后得到的数据片段写入到服务器上的目标文件中。
[0065]当队列监控线程监控到队列的数据文件发生变化时,用于存储数据文件的目标文件是否存在,如果不存在则首先创建目标文件,并在文件头写入数据存储信息,比如文件类型和存储位置等;然后,队列监控线程启动多个工作线程,分别取得内部队列中的数据文件,并根据数据文件的文件大小决定切分数量,并把数据文件切分成多个切分片段。然后,多个工作线程并行的将不同队列中的数据文件切分得到的切分片段写入到目标文件。通过本发明的方法,不需关闭串流写入的动作,所以在切分片段一直开启的状态把新的切分片段合并在文件的尾端可以加快合并切分片段为数据文件的速度。
[0066]本地目录111除了接收来自于客户端的数据文件外,本地目录111中的数据文件也可能会被修改、搬移或删除等异动。队列监视模块115会实时的侦测本地目录111中的数据文件是否有异动。当数据文件异动时,队列监视模块115会向上传模块112发出数据文件异动的讯息。
[0067]当有新的数据文件存入本地目录111时,扫描模块113会令控制模块建立新的内部队列1141,并将数据文件存入新的内部队列1141。一般而言,内部队列1141的数量限制取决于服务器的运行能力。但若是有过多的数据文件新创,可能会发生内部队列1141堆叠的问题。一旦有过量的数据文件被创建,则扫描模块113会透过控制模块114向心跳服务器发出报警要求。
[0068]当现有的数据文件的内容有所异动时,扫描模块113会将变更后的数据文件再次存入内部队列1141中。若是本地目录111删除数据文件时,则扫描模块113会要求控制模块114将对应的数据文件的内部队列1141进行删除。
[0069]上传模块112侦测本地目录111所异动的数据文件的文件种类。上传模块112根据文件种类是否存在,上传模块112要求控制模块113创建新的内部队列1141或把数据文件放入对应的内部队列1141中。上传模块112接获数据文件异动的讯息后,上传模块112会重新取得数据文件的路径名称并将路径名称储存至内部队列1141中。对于不同的数据文件会设置唯一的内部队列1141。当本地目录111储存大量的数据文件时,控制模块114中的内部队列1141的数量也会快速的成长。
[0070]由于过多的内部队列1141会造成过量的堆叠,会使得后续的工作线程116无法即时的处理完数据文件。因此本申请会监控内部队列1141的服务量是否超过设定的压力阀值。当服务量超过压力阀值时,控制模块114会向第一心跳服务器121或第二心跳服务器122发出报警信息。
[0071]接着,根据切分片段的数量产生相应的工作线程116。每一个工作线程116根据各自的切分片段的起始位置与偏移量取得数据文件的部分片段。队列监视模组115把切分片段转由工作线程116开始读取。工作线程116把取得的片段写入分散式文件装置117中。为清楚说明本申请的过程在此对以下元件做进一步的定义:读取两相依的切分片段的工作线程分别定义为第一工作线程410与第二工作线程420。在此是为能方便说明所以仅以两个工作线程作为说明,但实际上工作线程的数量并不局限于此。此外为能区别数据文件与分散式文件装置117的文件,因此在合并后的数据文件定义为目标文件430。
[0072]请参考图3A与图3B,分别为本申请的第一工作线程与第二工作线程的切分片段写入示意图。于写入的过程中会创建目标文件430时,队列监视模组115会先根据数据文件创建一个关于各切分片段写入顺序的文件头。每一个工作线程可以根据文件头所记载的文件长度把切分片段填入对应的位置上。本申请中的属于同一群组的多个工作线程116在写入同一目标文件430的方式是并行写入的。而后续的切分片段在写入时会利用附加处理(append)的方式写入目标文件430。由于附加处理时不需关闭串流,因此其他工作线116程不需等待即可并行的处理。
[0073]举例来说,欲写入的数据文件为视频文件,而每一个切分片段是10分钟的长度。将原来每10分钟切分片段写入的开始写入目标文件430并进行合并。第一工作线程410与第二工作线程420在取得文件头后,第一工作线程410与第二工作线程420会并行的写入目标文件430中。
[0074]在写入分散式文件装置117的过程中可能会发生错误,所以本申请当侦测到写入的切分片段的内容有误时,会向第一心跳服务器121或第二心跳服务器122发出报警要求。[0075]还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者系统中还存在另外的相同要素。
[0076]本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0077]以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含·在本申请的权利要求范围之内。
【权利要求】
1.一种服务器中的数据合并方法,其特征在于,包括以下步骤:接收数据文件;把所述数据文件放置于对应的内部队列中;取得所述内部队列中的所述数据文件,并根据所述数据文件的文件大小决定切分数量;根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段;对应于不同大小的切分片段,分别调用预先创建的写入线程,把所述切分片段依序附加写入服务器的分散式文件装置中的与该数据文件对应的目标文件。
2.如权利要求1所述的服务器中的数据合并方法,其特征在于,所述方法还包括:若服务器的分散式文件装置中不存在所述目标文件,则创建与该数据文件对应的所述目标文件。
3.如权利要求1所述的服务器中的数据合并方法,其特征在于,所述取得所述内部队列中的所述数据文件,并根据所述数据文件的文件大小决定切分数量,具体包括:取得所述内部队列中的所述数据文件;读取所述数据文件的文件大小;对应于不同的文件大小和预先创建的写入线程的写入数据长度限制决定切分数量。
4.如权利要求1所述的服务器`中的数据合并方法,其特征在于,所述方法还包括:在所述调用预先创建的写入线程之前,判断与该数据文件对应的目标文件是否存在;当所述与该数据文件对应的目标文件不存在时,创建与该数据文件对应的目标文件。
5.如权利要求1至4任一项所述的服务器中的数据合并方法,其特征在于,所述根据所述切分数量对所述数据文件进行切分,并得到多个不同大小的切分片段,具体为:根据所述切分数量确定切分点,对所述数据文件进行预切分;当所述数据文件的切分位置落于所述内部队列的尾端,且所述数据文件的切分点位于所述尾端之前,则修改所述数据文件的切分位置至所述切分点上。
6.一种服务器中的数据合并系统,其特征在于,包括:本地目录,接收客户端所发送的数据文件;扫描模组,连接于所述本地目录,所述扫描模组监视所述本地目录的数据文件是否异动;控制模组,耦接于所述扫描模组,所述控制模组包括至少内部队列,所述内部队列储存对应的所述数据文件的路径资讯,所述本地目录的任一所述数据文件异动时,所述扫描模组根据异动的数据文件的种类令所述控制模组创建新的所述内部队列或更新已知的所述数据文件的内容;上传模组,连接于所述本地目录,所述本地目录的任一所述数据文件异动时,所述上传模组侦测异动的所述数据文件的一文件种类,并根据所述文件种类将所述数据文件指派至对应的所述内部队列;至少一队列监视模组,连接于所述控制模组,所述队列监视模组根据所述内部队列的数量产生对应数量的队列监视模组,所述队列监视模组根据所述内部队列的所述数据文件的大小决定所述数据文件的切分数量,并根据所述切分数量对所述数据文件进行切分以产生对应的切分片段;以及多个工作线程,连接于所述队列监视模组,所述工作线程读取相应的所述切分片段;其中,所述队列监视模根据所述目标文件的文件头指派工作线程所对应的所述目标文件的写入位置,工作线程根据所属的所述写入位置并以附加处理的方式,把每一所述工作线程所对应的所述切分片段写入所述目标文件。
7.如权利要求7所述的服务器中的数据合并系统,其特征在于,所述队列监视模组对所监控的所述内部队列的数据文件根据先进先出的方式从所述内部队列中取出所述数据文件。
8.如权利要求6所述的服务器中的数据合并系统,其特征在于,当所述队列监视模组于切分时确认所述数据文件的切分位置落于所述内部队列的一尾端,且所述数据文件的一切分点位于所述尾端之前,则所述队列监视模组修改所述数据文件的切分位置至所述切分点上。
9.如权利要求6所述的服务器中的数据合并系统,其特征在于,进一步工作线程以并行的方式把切分片段写入所述目标文件中。
10.如权利要求6所述的服务器中的数据合并系统,其特征在于,进一步包括一分散式文件装置,连接于工作线程,工作`线程将切分片段依序的写入所述分散式文件装置中。
【文档编号】G06F3/06GK103678699SQ201310741755
【公开日】2014年3月26日 申请日期:2013年12月27日 优先权日:2013年12月27日
【发明者】于凤东, 张磊, 马一鸣 申请人:乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1