2017-06-19 19 views
0

問題描述: FTP服務器被100Mbps(即12.5 MB/s)速率的文件淹沒,每個文件大小大約爲100 MB。文件將在創建時間戳30秒後被刪除。如果任何進程有興趣讀取這些文件,它應該在30秒內將完整文件刪除。我正在使用Java來解決這個特定的問題。在不到30秒的時間內從FTP服務器處理100 MB +文件?

需要關於的建議哪種設計模式最適合這類問題。如何確保每個文件在服務器刪除之前都會被使用。

您的建議將不勝感激。謝謝

+2

爲該問題陳述編寫代碼不是_design patterns_的問題。如果有的話,這是一個高效的IO操作問題。 「如何確保每個文件在服務器刪除之前都會被使用?」 =>誠實。你不能。有太多事情可能會出錯。你想讓它失敗嗎?如果幾乎所有字節都被讀取 - 但不是全部 - 然後文件消失?如果其他進程有處理它,它甚至會消失嗎?真的,這個問題太廣泛了。 – Seelenvirtuose

+0

其他進程在訪問文件時應該鎖定文件,這樣可以防止它被服務器刪除,我想。 –

+0

@KevynMeganck是的,在這種情況下,放置鎖定是可能的並且有幫助。謝謝 – Anshul

回答

1

如果Java應用程序與FTP服務在同一臺計算機上運行,​​那麼它可以使用File.renameTo(File)或同等功能將所需文件移出FTP服務器目錄並移入另一個目錄。然後它可以在閒暇時處理它。它可以使用WatchService來監視新到文件的FTP目錄。它應該監視目錄上的事件,並且當文件開始出現時,它應該等待寫入停止發生。 (根據操作系統的不同,當FTP服務正在寫入文件時,您可能會也可能無法移動該文件。)

Java應用程序能否跟上所需的處理速度存在次要問題。但是,如果您有多個內核和多個工作線程,那麼您的應用程序可能會並行處理它們。 (這取決於計算和/或I/O密集型處理,以及Java線程可以讀取文件的速度......這將是操作系統並可能依賴於硬件)

如果Java應用程序是沒有運行在FTP服務器上,它可能需要使用FTP來獲取文件。我懷疑你可以採取一些措施來始終如一地做到這一點。即不偶爾丟失文件。

+0

感謝您的回答。 「如果Java應用程序與FTP服務在同一臺計算機上運行,​​那麼它可以使用File.renameTo(File)或等效命令將所需文件移出FTP服務器目錄並進入另一個目錄」 - > Java應用程序將會遠程連接到FTP服務器。 – Anshul

+0

然後看最後一段。 –

相關問題