BLOB スナップショットで料金がどのように発生するかを理解する
スナップショット (BLOB の読み取り専用コピー) を作成すると、別途データ ストレージ料金がアカウントに課金される場合があります。 不要なコストを抑えるためにも、アプリケーションを設計する際は、この料金が発生するしくみを理解しておくことが重要です。
課金に関する重要な考慮事項
スナップショットの作成時に考慮する必要のある重要なポイントを以下に示します。
料金はブロックまたはページに対して一意的に発生します。そのブロックまたはページが BLOB であるかスナップショットであるかは関係ありません。 BLOB に関連付けられているスナップショットについてアカウントに追加料金が発生するのは、そのベースになっている BLOB を更新したときです。 いったんベース BLOB を更新すると、ベース BLOB はそのスナップショットから分化し、それぞれの BLOB またはスナップショットの中で、一意のブロックまたはページに対する料金が発生するようになります。
ブロック BLOB 内のブロックを置き換えた場合、以後そのブロックは一意のブロックとして課金されます。 そのブロックに割り当てられているブロック ID とデータが、スナップショット側と同じであっても変わりません。 ブロックが再度コミットされると、そのブロックはスナップショット内の対応するブロックから分化し、そのデータに対する料金が発生します。 これは、ページ BLOB 内のページを、まったく同じデータで更新した場合にも当てはまります。
UploadFile、UploadText、UploadStream、または UploadByteArray メソッドを呼び出してブロック BLOB を置き換えると、その BLOB 内のすべてのブロックが置き換えられます。 その BLOB に関連付けられているスナップショットがある場合、ベース BLOB とスナップショット内のすべてのブロックが分化し、両方の BLOB のすべてのブロックが課金対象となります。 これは、ベース BLOB 内のデータとスナップショット内のデータとがまったく同一であっても変わりません。
2 つのブロックに格納されているデータが同一であるかどうかを判断する方法は、Azure Blob service には用意されていません。 アップロードされてコミットされたブロックは、同じデータや同じブロック ID がある場合でも、それぞれが一意のものとして扱われます。 料金は一意のブロックに対して発生するため、スナップショットを持つ BLOB を更新すると、一意のブロックがその分増えて、追加料金が発生することに注意してください。
重要
不要な料金を避けるためにも、スナップショットは慎重に管理してください。 スナップショットは次のように管理することをお勧めします。
- まったく同じデータで更新する場合も含め、BLOB を更新するときは必ずその BLOB に関連付けられているスナップショットを削除してから作成し直すようにします (アプリケーションの設計上、スナップショットを維持しなければならない場合を除く)。 BLOB のスナップショットを削除してから作成し直すことにより、BLOB とスナップショットの分化を確実に防ぐことができます。
- BLOB のスナップショットを保持している場合は、Blob 内のすべてのブロックが置き換えられるので、 UploadFile、 UploadText、 UploadStream、または UploadByteArray を呼び出して BLOB を更新することは避けてください。 代わりに、PutBlock メソッドと PutBlockList メソッドを使用して、最少数のブロックのみを更新するようにしてください。
スナップショットの課金シナリオ
ブロック BLOB とそのスナップショットについて料金が発生するしくみを次のシナリオで説明します。 シナリオ 1 は、スナップショットが作成されてからベース BLOB は更新されていません。したがって、料金の発生対象は、一意のブロックである 1、2、3 のみです。
シナリオ 1: ブロック 1、2、3 についてのみ料金が発生する。
シナリオ 2 は、ベース BLOB が更新されています。スナップショットは更新されていません。 更新されたのはブロック 3 です。格納されているデータと ID が同じでも、スナップショット内のブロック 3 とは異なります。 このため、4 ブロック分の料金がアカウントに課金されます。
シナリオ 2: ベース BLOB 内のブロック 1、2、3 に加え、スナップショット内のブロック 3 に対して料金が発生する。
シナリオ 3 では、ベース BLOB は更新されましたが、スナップショットは更新されていません。 ベース BLOB のブロック 3 がブロック 4 に置き換わっていますが、スナップショット側はブロック 3 のままです。 このため、4 ブロック分の料金がアカウントに課金されます。
シナリオ 3: ブロック 1、2、3、4 について料金が発生する。
シナリオ 4 では、ベース BLOB が完全に更新されており、元のブロックは 1 つも含まれていません。 このため、8 つある一意のブロックすべてについての料金がアカウントに課金されます。 このシナリオは、UploadFile、UploadText、UploadFromStream、UploadByteArray などの更新メソッド (これらのメソッドは BLOB の内容をすべて置き換えるため) を使用した場合に発生する可能性があります。
シナリオ 4: ブロック 1、2、3、4、5、6、7、8 について料金が発生する。
参照
How to Use the Blob Storage Service (BLOB ストレージ サービスを使用する方法)
キュー Storage Service を使用する方法
BLOB のスナップショットの作成