3

安全な Web サーバーから 8 GB の XML ファイルをダウンロード、処理、保存する必要があります。クラスを使用してファイルをダウンロードできましたWebRequestが、これには非常に長い時間がかかります。また、ファイルが個別のチャンクでの処理に適した方法で構造化されていることも知っています。

一度にストリーム全体を取得することなく、作業できる一口サイズのピースのみを取得するように、このファイルを「ストリーム」するにはどうすればよいですか?

編集

言い忘れましたが、私たちは Azure でホストされています。頭に浮かぶアイデアは、大きなファイルをダウンロードするだけで、必要なだけ時間がかかるワーカー ロールをプロビジョニングすることです。それはどれほど実現可能でしょうか?

4

4 に答える 4

3

8 GB は大きなワークロードです。やり直しから身を守り、効果的にスケーリングするために、XML ファイルのダウンロードをその処理から分離します。

ストリームとしてダウンロードしている間、ある種のストリーム識別子を永続ストレージに書き込み、関連するデータを含むメッセージをキューに配置することで、各アトミック単位の作業が実行されるようにスケジュールします。これにより、何らかの理由でダウンロードが失敗したり、作業単位が失敗したり、ダウンロードに干渉したりした場合に、ダウンロードからの回復が可能になります。

于 2012-04-17T19:11:30.890 に答える
2

私はHttpWebRequest、BeginGetResponse、GetResponseStreamを使用しています

次に、ストリームが stream.BeginRead を介して滴り落ちているときに、ストリームをチャンクで読み取ることができます。

これは非常に複雑な例です: http://stuff.seans.com/2009/01/05/using-httpwebrequest-for-asynchronous-downloads/

于 2012-04-17T17:12:37.323 に答える
1

ファイルを順次処理する必要がある場合は、応答のストリームで XMLReader を開き、必要に応じてデータを読み取ります。

ファイルへのランダム アクセスが必要な場合 (つまり、途中で読み取る)、シーク可能なストリームを作成するためにさらに作業を行う必要がある場合があります (サーバーが要求で RANGE オプションをサポートしている場合)。または、現在のようにファイル全体をダウンロードするだけです。

8GBはデータ量が多く、読み込みを完了すると読み込みに時間がかかりますのでご注意ください。

于 2012-04-17T17:13:02.930 に答える
1

xml ファイルをブロック BLOB にアップロードして、そこからダウンロードすることができます。 -transfers-with-progress-change-notification.aspx

お役に立てれば。

于 2012-04-17T20:38:20.767 に答える