2012-09-13 43 views
2

我即將開始開發一個應用程序來傳輸非常大的文件,而不需要任何衝突,但需要可靠性。我希望那些曾經工作過編碼這樣一個特殊案例的人們瞭解我將要進入的內容。通過網絡傳輸60GB +文件有哪些選擇?

環境將是內網ftp服務器>迄今爲止使用主動ftp正常端口的windows系統。我可能還需要在發送之前壓縮文件,並且我記得曾經在圖書館工作過一次,會在內存中壓縮,並且大小有限制......關於此的想法也值得讚賞。

讓我知道如果我需要澄清別的東西。如果有任何細節沒有幫助,我會問一般/更高級別的問題。我已經完成了正常大小(高達1GB)的應用程序,但是似乎我需要限制速度,所以我不殺死網絡或類似的東西。

感謝您的任何幫助。

回答

1

我想你可以從種子中獲得靈感。

Torrents一般會分解可管理塊中的文件並計算它們的散列值。後來他們一塊一塊地轉移他們。每件作品都經過哈希驗證,只有匹配時才接受。這是非常有效的機制,讓轉移發生在多個來源,並讓任何時間重新啓動,而不必擔心數據損壞。

對於從服務器到單個客戶端的傳輸,我建議您創建一個頭文件,其中包含有關文件的元數據,以便接收者始終知道期望的內容,並且知道接收了多少內容,並且還可以檢查接收的內容針對哈希的數據。

我已經在客戶端服務器應用程序上實際實現了這個想法,但數據量要小得多,比如1500k,但可靠性和冗餘性是重要因素。這樣,您還可以有效控制您希望通過應用程序允許的流量。

+0

好的辦法。你在哪裏學習種子如何工作?你有沒有任何有意義的聯繫?或者我可以購買一本書進一步調查? – mimoralea

1

我覺得要走的路是用rsync的工具作爲外部進程到Python -

here報價:

件,使用校驗和,以可能存在的目標文件 網站,並僅傳輸那些從 目標網站找不到的作品。實際上,這意味着如果目標站點中已存在較舊或部分版本的待複製文件,則rsync只傳輸文件的缺失部分。在許多情況下,這會使數據更新過程快得多,因爲每次源和目標站點同步時,都不會複製所有文件,而是複製 。

而且你可以使用-z開關在數據傳輸上透明地進行壓縮,不需要引導任一端壓縮整個文件。

而且,這裏覈對答案: https://serverfault.com/questions/154254/for-large-files-compress-first-then-transfer-or-rsync-z-which-would-be-fastest

而且從rsync的的man頁面,這可能會感興趣:

--partial 
      By default, rsync will delete any partially transferred 
      file if the transfer is interrupted. In some circumstances 
      it is more desirable to keep partially transferred files. 
      Using the --partial option tells rsync to keep the partial 
      file which should make a subsequent transfer of the rest of 
      the file much faster 
+0

好主意!它甚至不在我的腦海! – mimoralea