可能な限り最速の方法で大量のファイルをアーカイブする

可能な限り最速の方法で大量のファイルをアーカイブする

私は、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 つになります。その点を気にしない場合は、この送信を省略できます。その場合、クライアントはダウンロードのパーセンテージ カウンターを表示しません。アプリケーションによっては、これが問題にならない場合があります。

関連情報