公开/公告号CN112732657A
专利类型发明专利
公开/公告日2021-04-30
原文格式PDF
申请/专利权人 广州金越软件技术有限公司;
申请/专利号CN202011616639.4
申请日2020-12-30
分类号G06F16/17(20190101);G06F16/13(20190101);H04L29/06(20060101);
代理机构
代理人
地址 510000 广东省广州市天河区高唐路235号7栋403单元
入库时间 2023-06-19 10:48:02
技术领域
本发明涉及跨网服务交换领域,具体是一种在ftp服务场景下高效读取大量小文件的方法。
背景技术
跨网服务交换场景需要生成大量小文件,借助单向光闸的文件摆渡功能交换到对端网络,再做处理。目前软件应用在文件监听采用的方法大多是两种,
第一种:通过ftp协议,使用MLST命令轮询获取文件列表信息,信息包含一个标准UTC格式的文件修改时间,应用可利用此时间来判断前后时间间隔的时间是否一样来判断文件写完成(写完即可判断为完整),此方法造成效率低下的原因是需要多次判断前后时间。且MLST命令不是所有ftp服务都支持,业界常用的vsftp就不支持。
第二种:通过ftp协议,使用LIST命令轮询获取文件列表信息,由于返回文件的时间戳属性是基于服务器的时区,它使得在FTP对目录和文件同步时有许多的不同,因为没有方法获得服务器上当前文件的时间戳,所以只能采用记录文件在一段时间内的大小,以它在一段时间内不再改变为依据判断文件的完整性,这样的方法效率低下。
但是,目前采用走ftp协议+轮询的方式来判断,走ftp协议会造成大量网络交互,受网络因素影响,性能损耗大。使用轮询的方法来发现文件和判断文件,造成大部分文件处理不及时。使用用MLST命令存在局限性,此方法不能很好兼容各种ftp服务。因此,本领域技术人员提供了一种在ftp服务场景下高效读取大量小文件的方法,以解决上述背景技术中提出的问题。
发明内容
本发明的目的在于提供一种在ftp服务场景下高效读取大量小文件的方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种在ftp服务场景下高效读取大量小文件的方法,包括交互本地化和本地文件监听,所述交互本地化,在不改变前端输入的参数情况,方法得到的入参是ftp协议的url,适用设计模式中的策略模式适配各种ftp服务器;
具体逻辑为:将ftp协议url解析出用户名,端口,推送目录。根据端口获取进程名,从而可以判断出ftp服务器类型,或者根据各种ftp服务器的配置文件名、其他特征来判断ftp服务器类型,然后读取配置文件,获取ftp用户与本地目录的映射关系,并缓存到Map集合。整个转化过程不需要由调用逻辑关注,完全由本方法自动适配。
作为本发明进一步的方案:所述本地文件监听利用jdk1.7自带的文件事件监听WatchService,配置监听实体的创建和修改事件,阻塞获取监听器事件队列的事件。
作为本发明再进一步的方案:所述事件出列后解析出文件名,再实例化为自定义的文件事件对象,对象属性包含文件File对象,文件创建时间戳,文件修改时间戳,当前文件字节长度,文件MD5摘要。
作为本发明再进一步的方案:所述事件入列到队列中,此处使用业界性能优越的有界无锁队列实现,此处使用了生产者消费者模式,另一线程监听队列获取文件事件对象继续处理。
作为本发明再进一步的方案:所述事件出列后先判断当前时间戳与文件修改时间戳是否大于某个时间,经过大量测试,基于16核cpu、64G内存和网络稳定的环境中,此时间值约为1毫秒为性能最佳。
作为本发明再进一步的方案:所述事件如果不是则再次入列,否则继续获取文件当前文件字节长度和文件MD5摘要,在对比前后的字节长度和MD5摘要是否相同,如果相同,即判断为完整,可继续后续处理,否则,更新对象的修改时间戳,当前文件字节长度和文件MD5摘要再次入列。
作为本发明再进一步的方案:所述后续文件处理建议适用多线程处理,避免同步操作,降低文件监听判断逻辑的效率。
与现有技术相比,本发明的有益效果是:
1、本发明方法尤其适合在高并发情况下,对频繁创建的大量的小文件监听逻辑实现。相比于轮询的方法,适用的cpu资源更低,网络交互更少,实时性更高,利用数据本地化+文件事件监听+队列的解决方案来提高效率,本方法同样适用监听大文件。
2、本发明运用了大数据的数据本地化策略,结合文件事件监听技术和无锁队列。数据本地化解决了大量网络交互的问题,不再受网络不稳的因素影响,保证了稳定性。使用文件事件监听技术可保证了发现文件的及时性,事件驱动的效率会比轮询方法高,实时性更强。
附图说明
图1为一种在ftp服务场景下高效读取大量小文件的方法的程序执行框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中,一种在ftp服务场景下高效读取大量小文件的方法,本方法使用java编程语言实现,实现过程如下:
第一步交互本地化,在不改变前端输入的参数情况,方法得到的入参是ftp协议的url。适用设计模式中的策略模式适配各种ftp服务器。具体逻辑为:将ftp协议url解析出用户名,端口,推送目录,根据端口获取进程名,从而可以判断出ftp服务器类型,或者根据各种ftp服务器的配置文件名、其他特征来判断ftp服务器类型,然后读取配置文件,获取ftp用户与本地目录的映射关系,并缓存到Map集合,整个转化过程不需要由调用逻辑关注,完全由本方法自动适配;
第二步本地文件监听,利用jdk1.7自带的文件事件监听WatchService,配置监听实体的创建和修改事件,阻塞获取监听器事件队列的事件,事件出列后解析出文件名,再实例化为自定义的文件事件对象,对象属性包含文件File对象,文件创建时间戳,文件修改时间戳,当前文件字节长度,文件MD5摘要,接着入列到队列中,此处使用业界性能优越的有界无锁队列实现。此处使用了生产者消费者模式,另一线程监听队列获取文件事件对象继续处理,出列后的事件先判断当前时间戳与文件修改时间戳是否大于某个时间,经过大量测试,基于16核cpu、64G内存和网络稳定的环境中,此时间值约为1毫秒为性能最佳,如果不是则再次入列,否则继续获取文件当前文件字节长度和文件MD5摘要,在对比前后的字节长度和MD5摘要是否相同,如果相同,即判断为完整,可继续后续处理。否则,更新对象的修改时间戳,当前文件字节长度和文件MD5摘要再次入列。
后续文件处理建议适用多线程处理,避免同步操作,降低文件监听判断逻辑的效率。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
机译: 一种用于在空间条件有限的情况下检测单部分或多部分标记的方法,该方法包括在可变的可调节挠度下读取检测系统的最小距离来读取标记
机译: 使用以交互模式标记的文档来复制AV数据的设备用于控制临时存储存储器的设备,该设备临时存储用于以交互模式复制AV数据的约会文档用于记录和/或复制AV的设备用于在交互式模式下使用标记文档的数据。用于使用文档标记在交互式模式下复制AV数据的方法,用于在交互式模式下复制AV数据的文档标记的管理方法。用于以交互模式再现AV数据的方法,一种用于以交互模式再现AV数据的方法。计算机的读取,计算机系统中用于以交互模式处理AV数据的方法一个文件标记,并存储数据
机译: 一种基于球面的智能家居场景高效检测方法