
我正在實現一個種子下載和存檔系統。我想下載一個 torrent 檔案(其中包含幾個小檔案),然後將其存檔。我的磁碟效能很差。所以我想要一種有效的方式來歸檔文件。
我有幾個選擇:
1.將檔案下載到普通磁碟/檔案系統上,然後使用普通 unixtar
指令對其進行 TAR。
2.建立空白 TAR 存檔,然後使用寫入模式掛載它archivemount
,然後開始在掛載路徑中下載 torrent。
3.類似選項2但使用 ZIP 檔案而不是 tar。
4.因為我想透過 Web 瀏覽器傳送檔案:實作一個軟體/腳本來動態 TAR 資料夾。 (我幾年前寫了一個Python腳本(uWsgi/Nginx)來做到這一點。但是由於tar需要每個檔案的校驗和。效能相當差)
5.找到一個可以直接寫入 TAR/Zip 檔案的 torrent 用戶端。 (極不可能)
我該考慮哪一種方式?
謝謝。
答案1
如果磁碟確實是您真正的瓶頸,那麼實際上最佳效能仍然可能是 4。這樣您就不必花費寶貴的 IOPS 將文件從一個地方複製到另一個地方。
此外,選項 4 實際上是唯一允許客戶端在伺服器完成下載後立即下載 torrent 的選項,這意味著用戶端實際上可以更快地取得其資料。此外,透過這種方式,您可以輕鬆地允許使用者下載單個檔案(非常簡單,因為它們只是位於您的檔案系統上)。
我會調查為什麼 tar 會帶給你這麼差的性能。我真的懷疑你的問題是校驗和,因為據我所知,它們甚至不在數據上。您有什麼理由不能直接將 GNU tar 的輸出透過管道傳輸到 Web 瀏覽器,而不是編寫自己的 tar 打包程式?
一個挑戰是使用這種方法向客戶端提供正確的內容長度。如果您不關心這一點,您可以忽略發送此訊息,然後您的客戶端將不會看到下載的百分比計數器。根據您的應用程序,這可能並不重要。