
私は、torrent のダウンロードとアーカイブのシステムを実装しています。torrent ファイル (複数の小さなファイルを含む) をダウンロードしてアーカイブしたいと考えています。ディスクのパフォーマンスが低いので、ファイルをアーカイブする効率的な方法が必要です。
いくつかの選択肢があります:
1.通常のディスク/ファイルシステムにファイルをダウンロードし、通常の UNIXtar
コマンドを使用して TAR します。
2.空の TAR アーカイブを作成し、を使用して書き込みモードでマウントしarchivemount
、マウントされたパスでトレントのダウンロードを開始します。
3.オプションに類似2ただし、tar ではなく ZIP ファイルを使用します。
4.ウェブブラウザ経由でファイルを配信したいので、フォルダをオンザフライで TAR するソフトウェア/スクリプトを実装します。(これを行うために、数年前に Python スクリプト (uWsgi/Nginx) を作成しました。ただし、tar では各ファイルのチェックサムが必要なため、パフォーマンスはかなり悪かったです)
5.TAR/Zip ファイルに直接書き込むことができる Torrent クライアントを見つけます。(可能性は低いです)
どちらの方法を検討すべきでしょうか?
ありがとう。
答え1
ディスクが本当にボトルネックである場合、パフォーマンスの面で最適なのは実際には 4 である可能性が高いです。これにより、ファイルをある場所から別の場所にコピーするために貴重な IOPS を費やす必要がなくなります。
また、オプション 4 は、サーバーがダウンロードを完了するとすぐにクライアントがトレントをダウンロードできる唯一のオプションです。つまり、クライアントは実際にデータに早くアクセスできます。また、この方法では、ユーザーが個々のファイルをダウンロードできるように簡単に許可するオプションがあります (ファイルはファイルシステム上に置かれているだけなので、非常に簡単です)。
tar のパフォーマンスがなぜそれほど悪いのか調べてみましょう。私の記憶では、チェックサムはデータ上にさえ存在しないので、問題がチェックサムにあるとは到底思えません。独自の tar パッカーを作成するのではなく、GNU tar からの出力を Web ブラウザーに直接パイプできない理由はありますか?
このアプローチでは、クライアントに正しいコンテンツの長さを提供することが課題の 1 つになります。その点を気にしない場合は、この送信を省略できます。その場合、クライアントはダウンロードのパーセンテージ カウンターを表示しません。アプリケーションによっては、これが問題にならない場合があります。