複合オブジェクト

サンプルに移動

このページでは、追加のオブジェクト データを転送せずに既存のオブジェクトから作成する複合オブジェクトについて説明します。複合オブジェクトは、オブジェクトにデータを追加する場合や、並行してアップロードしたコンポーネントを使用してオブジェクトを作成する場合に便利です。

作成オペレーション

作成オペレーションでは、新しい複合オブジェクトが作成されます。このオブジェクトのコンテンツは、指定された一連のソース オブジェクトを連結したものです。ソース オブジェクトはすべて、次の条件を満たしている必要があります。

作成を実行する場合:

  • ソース オブジェクトは影響を受けません。
  • 1~32 個のソース オブジェクトを使用できます。
  • ソース オブジェクト自体を複合オブジェクトにすることができます。
  • ソース オブジェクトが後で置換または削除されても、結果として得られる複合オブジェクトは変更されません。
  • gsutil を使用してオブジェクト作成を実行する場合、結果として得られる複合オブジェクトの Content-Type は最初のソース オブジェクトの Content-Type と一致するように設定されます。

複合オブジェクトのメタデータ

複合オブジェクトのメタデータと他のオブジェクトのメタデータにはいくつかの違いがあります。

  • 各複合オブジェクトには、コンポーネント数のメタデータ フィールドがあります。コンポーネント数は、オブジェクト内のコンポーネントの数を示します。ここで、単一のコンポーネントは非複合オブジェクトです。

    たとえば、2 つの非複合オブジェクトと 1 つの複合オブジェクト(コンポーネント数が 12)の 3 つのソース オブジェクトがあるとします。これらの 3 つのソース オブジェクトを作成すると、結果として得られる複合オブジェクトのコンポーネント数は 14 になります。

    • 複合オブジェクトに含めることができるコンポーネントの数に制限はありませんが、オブジェクトのコンポーネント数のメタデータ フィールドは 2,147,483,647 が上限となります。

      たとえば、オブジェクトに 3,000,000,000 個のコンポーネントが含まれていても、オブジェクトのコンポーネント数の値は 2,147,483,647 になります。

    • 複合オブジェクトを別の場所やストレージ クラスに書き換えると、コンポーネント数が 1 の複合オブジェクトになります。

  • 複合オブジェクトには、MD5 ハッシュのメタデータ フィールドはありません

  • 複合オブジェクトの ETag 値は MD5 ハッシュに基づいていないため、クライアント コードでは、複合オブジェクトの ETag 値は基になるオブジェクトが HTTP / 1.1 の IETF 仕様に応じて変化するたびに変化するということ以外、ETag 値について仮定することはできません。

複合オブジェクトの整合性チェック

Cloud Storage は、アップロード時に各ソース オブジェクトの整合性チェックを実行し、ダウンロード時に発信者が結果の複合オブジェクトの整合性チェックを実行できるようにするために、CRC32C を使用します。CRC32C は、そのコンポーネントの CRC32C 値から効率的に計算することができる誤り検出符号です。アプリケーションで以下のように CRC32C を使用する必要があります。

  • ソース オブジェクトをアップロードする場合、下記にリストされているような CRC32C ライブラリを使用して各オブジェクトの CRC32C を計算し、その値をリクエストに含める必要があります。
  • 作成オペレーションでは、リクエストに CRC32C を含める必要があります。Cloud Storage は、複合オブジェクトの CRC32C で応答します。これは、ソース・オブジェクトの CRC32C 値から CRC32C 値を作成して検証できます。
  • ダウンロード時には、ダウンロードしたオブジェクトの CRC32C を計算し、その値をレスポンスに含まれた値と比較する必要があります。
  • ソース オブジェクトのアップロード時と作成時との間に、アプリケーションでオブジェクトが変更される可能性がある場合は、競合状態を防止するために、ソース オブジェクトに世代固有の名前を付ける必要があります。

CRC32C 値を計算するためのライブラリには、C++ の Boost、Java の GoogleCloudPlatform crc32c、Python の crcmod、Ruby の digest-crc があります。また、CRC32C は、現在の Intel CPU のハードウェアでもサポートされています。

ユースケース

オブジェクト作成は、並列アップロード時やオブジェクトへのデータの追加の手段として役立つツールです。

並列アップロード

オブジェクト作成を使用して、オブジェクトを並行してアップロードできます。データを複数のチャンクに分割して、各チャンクを一意のオブジェクトに並行してアップロードし、最終的なオブジェクトを作成してから、一時ソース オブジェクトをすべて削除します。

アップロード リクエストと作成リクエストの間に、ソース オブジェクトが変更されないようにするためには、各ソースに予想される世代番号を付与する必要があります。オブジェクトの世代の詳細については、世代と前提条件をご覧ください。

制限付きの追加と編集

作成オペレーションを使用して、制限付きのオブジェクトの追加と編集を実行できます。

追加を実行するには、データを新しい一時オブジェクトにアップロードし、この新しいデータとともに追加するオブジェクトを作成して、一時オブジェクトを削除します。作成オペレーションの出力には元のオブジェクトと同じ名前にすることもできます。

また、作成オペレーションを使用して、オブジェクト編集の基本的な機能をサポートすることもできます。たとえば、シーケンス {Y1, Y2, Y3} からオブジェクト X を作成し、Y2 のコンテンツを変更して、同じコンポーネントで X を再作成できます。これを行うには、これらのコンポーネントとコンポジットに対して課金されるようにするために、Y1Y2Y3 を削除せずに残しておく必要がありますので注意してください。

次のステップ