java - 在 30 秒内处理来自 FTP 服务器的 100 MB 以上文件?

标签 java multithreading design-patterns concurrency ftp

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

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

我们将非常感谢您的建议。谢谢

最佳答案

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

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

如果 Java 应用程序未在 FTP 服务器上运行,则可能需要使用 FTP 来获取文件。我怀疑你是否可以实现一些措施来一致且可靠地做到这一点;即不会偶尔丢失文件。

关于java - 在 30 秒内处理来自 FTP 服务器的 100 MB 以上文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629097/

相关文章:

php - 减少同一对象的不同类型集合中代码重复的设计模式

java - 如何创建线程来控制另一个线程?

c++ - 避免在消息传递中向下转型的设计模式

objective-c - 网络存储设计模式

c# - 使用 Dispatcher.Invoke 从非主线程更改 WPF 控件

objective-c - 在并发队列中使用dispatch_semaphore_t发生死锁

c# - Dispatcher.Invoke 和传播错误

java - 试图让 JFormattedtextfield 改变......不工作

java - Activiti Forms,表单属性的初始值

java - 建议…JavaServer Faces(JSF),Struts,model2和其他