何千もの小さな BLOB を Azure Storage に書き込むときに、最もパフォーマンスの高い方法を見つけようとしています。アプリケーションのシナリオは次のとおりです。
- Windows Azure VM にインストールされた常時実行中の Windows サービスによって、何千ものファイルが作成または上書きされています。
- VM で利用可能な一時ストレージへの書き込みにより、サービスは 1 秒あたり 9,000 を超えるファイル作成に達することができます
- ファイル サイズは 1 KB から 60 KB の範囲です
- 同じ sw が実行されている他の VM では、他のファイルが同じ速度と基準で作成されています。
- 中央リポジトリを構築して更新し続ける必要がある場合、各 VM で実行されている別のサービスが、新しく作成されたファイルを一時ストレージから Azure BLOB にコピーします。
- 他のサーバーは、より新しいバージョンで Azure Blob を読み取る必要があります。
簡潔にするためにリストしていない多くの制約については、一時ファイル システム上のファイルの代わりに BLOB を直接作成するようにメイン サービスを変更することは現在不可能であることに注意してください。...そして、私が現在見ているものからすると、作成速度が遅くなり、元の要件では受け入れられない.
私が 10,000 ファイルのタイト ループでテストしているこのコピー操作は、1 秒あたり 200 個の BLOB 作成に制限されているようです。ここにある「Windows Azure ImportExportBlob」という名前のサンプル コードを微調整した後、この結果に到達できました: http://code.msdn.microsoft.com/windowsazure/Windows-Azure-ImportExportB-9d30ddd5 にある非同期の提案この回答:小さな azure インスタンスで Parallel.Foreach を使用する
私は、8 コアの特大 VM で 1 秒あたり 200 個の blob 作成という明らかな最大値を取得し、それに応じて "maxConcurrentThingsToProcess" セマフォを設定しました。テスト中のネットワーク使用率は、タスク マネージャーに表示される使用可能な 10Gb の最大 1% です。これは、その VM サイズで利用可能な 800 Mb のうち、およそ 100 Mb を意味します。
経過時間中にコピーされた合計サイズは、約 10 MB/秒であることがわかります。
生成できる Azure Storage トラフィックに制限はありますか? または、非常に多くの小さなファイルを書き込む場合は、別のアプローチを使用する必要がありますか?