4

Azure ストレージ アカウントにアップロードされたテキスト ファイルがあります。今、worker ロールで実行する必要があるのは、実行するたびにデータベースからコンテンツを取得し、そのコンテンツをアップロードされたテキスト ファイルに書き込む必要があることです。具体的には、テキスト ファイルのコンテンツが新しいコンテンツで上書きされるたびに。

ここでは、テキスト ファイルをストレージにアップロードし、ファイルを削除する方法を提供しています。

4

1 に答える 1

8

Windows Azure BLOB にファイルを保存することについて言及していると思います。その場合: BLOB はファイル システムではありません。それは単なるデータを保存する場所です (そして、ファイルの概念は少し人工的です - それは単なる... ブロックの束に保存されたブロブです)。

ファイルを変更するには、ファイルをダウンロードしてローカル ディスクに保存し、(ローカル ディスクで) 変更してからアップロードする必要があります。これに関するいくつかの考え:

  • この目的のために、worker ロールの構成内にローカル ディスクを割り当てる必要があります。このディスクは論理ディスクであり、VM が実行されているマシン内のローカル物理ディスク上に作成されます。つまり、このタイプの使用に最適な付属ストレージとなります。
  • VM インスタンスとストレージ間の帯域幅は、コアあたり 100 Mbps です。そのため、スモール インスタンスで 10 MB のファイルを取得するには、おそらく 1 秒ほどかかります。XL では、おそらく 10 分の 1 秒程度です。非常に高速で、VM シリーズ (A、D、G) とサイズによって異なります。
  • ファイルは Blob Storage にあるため、そうしたい (またはその必要がある) 場合は、更新されたバージョンをアップロードする前にスナップショットを作成できます。スナップショットは、保存されたデータ ブロックへのリンク リストのようなものです。また、ある日、既存のデータに変更を加えるまで、スナップショットにコストはかかりません (これで、古いデータと新しいデータの両方を表すブロックが作成されます)。BLOB のバージョンを BLOB ごとに保存する優れた方法です (スナップショットを削除するのは簡単です)。

このダウンロード/変更/アップロードのパターンが明確であることを確認するために、ここに非常に単純な例を示します (Visual Studio でこれをすばやく入力しましたが、テストしていません。要点を説明しようとしています)。

        // initial setup
        var acct = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        var client = acct.CreateCloudBlobClient();

        // what you'd call each time you need to update a file stored in a blob
        var blob = client.GetContainerReference("mycontainer").GetBlockBlobReference("myfile.txt");
        using (var fileStream = System.IO.File.OpenWrite(@"path\myfile.txt"))
        {
            blob.DownloadToStream(fileStream);
        }

        // ... modify file...

        // upload modified file
        using (var fileStream = System.IO.File.OpenWrite(@"path\myfile.txt"))
        {
            blob.UploadFromStream(fileStream);
        }
于 2013-06-12T05:56:32.753 に答える