在不到30秒的时间内从FTP服务器处理100 MB +文件?

时间:2017-06-19 11:14:22

标签: java multithreading design-patterns concurrency ftp

问题陈述:FTP服务器充斥着速度为100 Mbps(即12.5 MB / s)的文件,每个文件大小约为100 MB。文件将在创建时间戳30秒后删除。如果任何进程有兴趣阅读这些文件,它应该在不到30秒的时间内删除完整的文件。我正在使用Java来解决这个特殊问题。

需要建议哪种设计模式最适合此类问题。如何在服务器删除之前确保每个文件都被消耗。

您的建议将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

如果Java应用程序在与FTP服务相同的计算机上运行,​​则它可以使用File.renameTo(File)或等效文件将所需文件移出FTP服务器目录并移动到另一个目录中。然后它可以在闲暇时处理它。它可以使用WatchService来监视新到达文件的FTP目录。它应该监视目录上的事件,当文件开始出现时,它应该等待写入停止发生。 (根据操作系统的不同,您可能会或可能无法在FTP服务写入文件时移动文件。)

Java应用程序是否能够跟上所需的处理速率存在次要问题。但是,如果您有多个核心和多个工作线程,那么您的应用程序可能会并行处理它们。 (这取决于处理的计算和/或I / O密集程度。以及Java线程可以读取文件的速率......这将是操作系统和可能依赖于硬件的。)

如果Java应用程序没有在FTP服务器上运行,则可能需要使用FTP来获取文件。我怀疑你是否能够持续可靠地实施某些目标;即偶尔不丢失文件。