问题陈述: 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/