2

非常に大きなファイルを急がずに転送するアプリケーションの開発を開始しようとしていますが、信頼性が必要です。そのような特定のケースのコーディングに取り組んだ人々に、私がこれから何をしようとしているのかについての洞察を与えてもらいたい.

環境は、イントラネット ftp サーバー > ここまでアクティブな ftp ノーマル ポート Windows システムを使用します。送信する前にファイルを圧縮する必要があるかもしれませんが、メモリ内で圧縮するライブラリで作業したことを覚えており、サイズに制限がありました...これに関するアイデアも高く評価されます.

他に何か明確にする必要がある場合はお知らせください。本当に詳細なヘルプがない場合は、一般的/高レベルの落とし穴を求めています。以前に通常のサイズ (最大 1GB) のアプリを作成したことがありますが、これは速度を制限する必要があるように思われるため、ネットワークやそのようなものを強制終了しません。

助けてくれてありがとう。

4

2 に答える 2

1

トレントからインスピレーションを得ることができると思います。

トレントは通常、ファイルを扱いやすい断片に分割し、それらのハッシュを計算します。後で、それらを少しずつ転送します。各ピースはハッシュに対して検証され、一致した場合にのみ受け入れられます。これは非常に効果的なメカニズムであり、複数のソースから転送を行うことができ、データの破損を心配することなく何度でも再起動できます。

サーバーから単一のクライアントへの転送の場合、ファイルに関するメタデータを含むヘッダーを作成することをお勧めします。これにより、受信者は常に何を期待し、どれだけ受信したかを認識し、受信したデータをハッシュと照合することもできます。

私はこのアイデアをクライアント サーバー アプリケーションに実際に実装しましたが、データ サイズははるかに小さく、たとえば 1500k でしたが、信頼性と冗長性が重要な要素でした。このようにして、アプリケーションで許可するトラフィックの量を効果的に制御することもできます。

于 2012-09-13T18:09:10.583 に答える
1

行く方法は、rsyncユーティリティをPythonの外部プロセスとして使用することだと思います-

ここから引用:

チェックサムを使用して、対象サイトに存在する可能性のあるファイルに断片を転送し、対象サイトから見つからない断片のみを転送します。実際には、これは、コピーするファイルの古いバージョンまたは部分的なバージョンがターゲット サイトに既に存在する場合、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
于 2012-09-13T18:19:45.107 に答える