ブロック BLOB、追加 BLOB、ページ BLOB について
ストレージ サービスには、3 種類の BLOB、 ブロック BLOB、 追加 BLOB、 ページ BLOB が用意されています。 BLOB のタイプは、BLOB の作成時に指定します。 BLOB が作成されると、その型は変更できず、その BLOB の種類に適した操作 (ブロック BLOB へのブロックまたはブロックの一覧の書き込 み、追加 BLOB へのブロックの追加、ページ BLOB へのページの書き込みなど) を使用してのみ更新できます。
すべての BLOB では、コミットされた変更は直ちに反映されます。 BLOB には、ETag と呼ばれる一意のタグがバージョンごとに割り当てられます。このタグとアクセス条件を組み合わせることで、変更の対象を BLOB の特定のインスタンスに限定することができます。
排他的書き込みアクセスの際には、BLOB をリースすることができます。 BLOB がリースされているときは、現在のリース ID を含んだ呼び出しだけが、対応する BLOB またはそのブロック (ブロック BLOB の場合) を変更できます。
すべての BLOB はスナップショットとして複製することができます。 スナップショットの詳細については、「BLOB の スナップショットの作成」を参照してください。
注意
Azure Storage エミュレーターの BLOB は、最大サイズが 2 GiB に制限されています。
ブロック BLOB について
ブロック BLOB は、大量のデータを効率的にアップロードするために最適化されています。 ブロック BLOB はブロックで構成され、それぞれがブロック ID で識別されます。 ブロック BLOB には、最大 50,000 個のブロックを含めることができます。 ブロック BLOB 内の各ブロックは、使用中のサービス バージョンで許可される最大サイズまで、異なるサイズにすることができます。 ブロック BLOB を作成または変更するには、 Put Block 操作を使用してブロックのセットを書き込み、Put Block List 操作を使用してブロックを BLOB にコミットします。
特定のサイズ未満の BLOB (サービス バージョンによって決まります) は、 Put BLOB を介して 1 回の書き込み操作で全体をアップロードできます。
次の表では、サービス バージョンで許可される最大ブロック サイズと BLOB サイズについて説明します。
サービスのバージョン | 最大ブロック サイズ (Put Block 使用) | 最大 BLOB サイズ (Put Block List 使用) | 1 回の書き込み操作での最大 BLOB サイズ (Put Blob 使用) |
---|---|---|---|
バージョン 2019-12-12 以降 | 4,000 MiB | 約 190.7 TiB (4,000 MiB x 50,000 ブロック) | 5,000 MiB |
バージョン 2016-05-31 からバージョン 2019-07-07 | 100 MiB | 約 4.75 TiB (100 MiB x 50,000 ブロック) | 256 MiB |
2016-05-31 よりも前のバージョン | 4 MiB | 約 195 GiB (4 MiB x 50,000 ブロック) | 64 MiB |
ストレージ クライアントの既定では、BlobRequestOptions オブジェクトの SingleBlobUploadThresholdInBytes プロパティを使用して、.NET バージョン 11 の Azure Storage クライアント ライブラリで設定できる、最大 128 MiB の単一 BLOB アップロードが設定されます。 アップロードするブロック BLOB がこのプロパティに指定された値を超える場合、ストレージ クライアントによってファイルが複数のブロックに分割されます。 BlobRequestOptions オブジェクトの ParallelOperationThreadCount プロパティを使用して、要求ごとにブロックを並列にアップロードするために使用するスレッドの数を設定できます。
ストレージ アカウント内の BLOB にブロックをアップロードすると、そのブロックは、指定されたブロック BLOB に関連付けられます。ただし、その新しいブロックの ID を含んだ一連のブロックがコミットされるまでは、そのブロックは BLOB に追加されません。 実際にコミットされるか破棄されるまで、新しいブロックはコミットされていない状態のままになります。 コミットされていないブロックの最大数は 100,000 個です。 ブロックを書き込むだけでは、既存の BLOB の最終更新時刻は更新されません。
ブロック BLOB には、大きなファイルをネットワーク経由で効率よく管理できるという特徴があります。 ブロック BLOB を使用すると、複数のブロックを並列的にアップロードでき、アップロード時間を短縮することができます。 すべてのブロックには、転送結果を検証するための MD5 ハッシュが含まれているため、アップロードの進行状況を追跡したり、必要に応じてブロックを送信し直したりすることができます。 ブロックをアップロードする順序は任意であり、最後に一連のブロックをコミットする段階で確認することができます。 新しいブロックをアップロードして、同じブロック ID を持つ、まだコミットされていない既存のブロックを置き換えることもできます。 BLOB にコミットされないまま 1 週間が経過すると、そのブロックは破棄されます。 また、一連のブロックのコミット操作が実行されたときも、その対象に含まれていない未コミットのブロックはすべて破棄されます。
既存のブロック BLOB に変更を加える手段としては、挿入、置換、削除があります。 変更済みのブロック (複数可) をアップロードした後、保存しておく必要のある既存のブロックと併せて新規のブロックをコミットすることによって、BLOB の新しいバージョンをコミットできます。 コミット済みの BLOB の、異なる 2 つの場所に同じバイト範囲を挿入する場合、2 か所にある同じブロックを 1 回のコミット操作でコミットできます。 コミット操作でいずれのブロックも検出されなかった場合、エラーが発生してコミット操作全体が失敗します。BLOB は変更されません。 ブロック コミットメントは、BLOB の既存のプロパティとメタデータを上書きし、コミットされていないすべてのブロックを破棄します。
ブロック ID は、同じ長さを持つ文字列です。BLOB 内に存在します。 通常、ブロックのクライアント側のコードが、Base 64 エンコード形式を使用して、文字列を同じ長さに正規化します。 Base 64 エンコード形式を使用する場合、エンコード前の文字列長が 64 バイト以下であることが必要です。 ブロック ID の値は、BLOB が異なれば重複してもかまいません。
存在しない BLOB のブロックを作成すると、長さが 0 バイトの新しいブロック BLOB が作成されます。 この BLOB は、コミット前の BLOB を含んだ BLOB 一覧に反映されます。 この BLOB にブロックをコミットしない場合、最後に成功したブロックアップロードの 1 週間後に、ブロックとそのコミットされていないブロックが破棄されます。 同じ名前の新しい BLOB を (ブロックのアップロード後にコミットするという 2 段階プロセスではなく) 1 回のステップで作成した場合も、コミットされていないブロックがすべて破棄されます。
ページ BLOB について
ページ BLOBは、ランダムな読み取りと書き込みの操作用に最適化された 512 バイトのページのコレクションです。 ページ BLOB を作成するには、ページ BLOB を初期化し、ページ BLOB の最大サイズを指定します。 ページ BLOB の内容を追加または更新するには、オフセットと両方が 512 バイトのページ境界に揃える範囲を指定して、ページまたはページを書き込みます。 ページ BLOB への書き込みでは、1 ページ、一部のページ、または最大 4 MiB のページ BLOB のみを上書きできます。 ページ BLOB への書き込みはインプレースで行われ、BLOB に即座にコミットされます。 ページ BLOB の最大サイズは 8 TiB です。
Azure 仮想マシン ディスクは、ページ BLOB によってサポートされます。 Azure には、Premium と Standard の 2 種類の永続ディスク ストレージが用意されています。 ページ BLOB の Premium Storage は、一貫した高パフォーマンスと低待機時間を必要とする Azure 仮想マシン ワークロード向けに設計されています。 詳細については、「IaaS VM のディスクの種類を選択する」の「Premium ソリッド ステート ドライブ (SSD)」セクションを参照してください。 ページ BLOB の Premium Storage のスケーラビリティ ターゲットの詳細については、「 Azure Storage のスケーラビリティとパフォーマンスのターゲット」を参照してください。
追加 BLOB について
追加 BLOB はブロックで構成され、追加操作用に最適化されています。 追加 BLOB を変更すると、ブロックは追加ブロック操作を介して BLOB の末尾にのみ 追加 されます。 既存のブロックの更新または削除はサポートされていません。 ブロック BLOB とは異なり、追加 BLOB はブロック ID を公開しません。
追加 BLOB 内の各ブロックは、最大 4 MiB の異なるサイズにすることができ、追加 BLOB には最大 50,000 個のブロックを含めることができます。 したがって、追加 BLOB の最大サイズは 195 GiB (4 MiB X 50,000 ブロック) をわずかに超えています。