WindowsAzureで「クラウドサービス」としてホストされているWCFサービスがあります。サービスの開始時に、ファイル/ディスクからメモリにデータを入力して、高速にアクセスできるようにする必要があります(つまり、キャッシュされます)。現在、C:\ Documents \ Filestoprocessフォルダーのように使用しているので、WCFはフォルダーを呼び出し、そのフォルダー内のデータデータをメモリに入力します。5,000個の小さなファイルがあります。Azureでこれを行うにはどうすればよいですか?WCFがこれらのファイルを呼び出して各ファイルを開き、各データをファイルに保存するために、WCF内で呼び出すことができるフォルダーパスはありますか?帯域幅を使用したネットワークを介した複雑なBlobアクセスを実際に探しているわけではありません。独自のパブリックWebアドレスで実行されているWCF「クラウドサービス」からこれらのファイルへの単純なディスクI/Oアクセスを探しています。
3 に答える
ローカルファイルシステムに書き込む場合は、サービスの再起動またはサービスのリサイクル時にデータが破壊される可能性があるため、クラウドストレージサービスを使用してデータを保存するようにしてください。
ディスクダイブを作成するような紺碧のドライブサービスの使用を検討できます。これは、BLOBストレージの上にあります。
ただし、本当にローカルファイルシステムでデータを読み書きしたい場合は、このブログ投稿http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-を確認してください。 file-system-on-windows-azure /
ローカルファイルシステムへの書き込みを可能にするサービス定義の設定について説明します。
インスタンスのサイズに応じて、この種の一時データを保存できる非永続ディスクを取得します。非常に小さいインスタンスの場合、最小は20GBです。ディスクに直接アクセスしないでください。代わりに、サービス定義ファイルまたはVisual Studioで構成できるローカルリソースを使用する必要があります(Web /ワーカーの役割をダブルクリックします)。
このストレージは非永続的です。つまり、デプロイメントを削除した場合、インスタンスの数を減らした場合、ハードウェアの問題が発生した場合、ここに保存されているすべてのデータが失われます。ファイルを永続化したい場合は、代わりにBLOBストレージを使用する必要があります。しかし、ある種のキャッシュメカニズムとしてファイルが必要な場合は、ローカルリソースが最適です。
また、データをキャッシュすることが目標である場合は、WindowsAzureに含まれているキャッシュ機能を確認することをお勧めします。WindowsAzureでのキャッシュ
Blobアクセスは複雑ではありません。実際、blobストレージからローカルディスクにzipファイルを1回ダウンロードして解凍し、5,000個の小さなファイルからwcfサービスを準備することができます。
このmsdnページのドキュメントを確認してくださいDownloadBlobToFile()
。重要な部分:
CloudBlobClient blobClient =
new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey));
// Return a reference to the blob.
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");
// Download the blob to a local file.
blob.DownloadToFile("c:\\mylocalblob.txt");
現在:C:のルートフォルダに保存することに同意しません。むしろ、ローカルストレージ(簡単に構成可能)を取得する必要があります。ロール構成でローカルストレージを構成したら、ロール環境にローカルストレージを要求し、ルートパスを要求します。
var localResource = RoleEnvironment.GetLocalResource("mylocalstorage");
var rootPath = localResource.RootPath;
注:@KingPancakeが述べたように、Azureドライブを使用できます。ただし、Azureドライブは1つのインスタンスでのみ書き込み可能であることに注意してください。他のインスタンス用に追加のスナップショットを作成する必要があります。単純なBLOBを使用して、ファイルを(単一のzipまたは個別のファイルとして)コピーして、そこから移動する方がはるかに簡単だと思います。
ネットワーク+帯域幅に関する懸念についておっしゃいました。同じデータセンター内の帯域幅に対して料金を支払う必要はありません。また、非常に高速です。コアあたり100Mbpsです。そのため、インスタンスが小さい場合でも、ファイルを非常にすばやくコピーできます。インスタンスサイズを大きくすると、ファイルがコピーされます。
最後に考えたのは、blobストレージまたはAzureドライブ(blobストレージにvhdとしてマウントされている)を使用せずに5,000ファイルにアクセスする他の唯一の方法は、外部ソースからファイルをダウンロードするか、Windowsにバンドルすることです。 Azureパッケージ(そして、それらをスタックしたサブフォルダーの下のアプリのフォルダーに表示されます)。バンドルには2つの欠点があります。
- サイズが追加されたため、デプロイメントパッケージのアップロードに時間がかかる
- パッケージを再デプロイせずに個々のファイルを変更できない。
BLOBに保存することで、コードを再デプロイせずに小さなファイルの1つ(またはすべて)を簡単に変更できます。BLOBストレージから再読み取りするか、インスタンスを再起動して新しいファイルを自動的にダウンロードするように通知する必要があります。ファイル。