Objets composites

Cette page décrit les objets composites, que vous créez à partir d'objets existants sans transférer de données d'objet supplémentaires. Les objets composites sont utiles pour faire des ajouts à un objet, ainsi que pour créer un objet à l'aide de composants que vous avez importés en parallèle. Pour obtenir un guide détaillé sur la composition des objets, consultez la section Composer des objets .

Opération de composition

L'opération de composition crée un objet composite dont le contenu correspond à la concaténation d'une séquence donnée d'objets sources. Les objets sources doivent tous :

Lorsque vous effectuez une composition :

  • Les objets sources ne sont pas affectés.
  • Vous pouvez utiliser jusqu'à 32 objets sources.
  • Les objets sources peuvent eux-mêmes être des objets composites.
  • L'objet composite obtenu ne change pas si les objets sources sont remplacés ou supprimés par la suite.
  • Lorsque vous utilisez gsutil pour effectuer une composition d'objet, la valeur Content-Type de l'objet composite obtenu correspond à la valeur Content-Type du premier objet source.

Métadonnées des objets composites

Il existe plusieurs différences entre les métadonnées d'un objet composite et les métadonnées des autres objets :

  • Chaque objet composite possède un champ de métadonnées pour le nombre de composants. Le nombre de composants indique le nombre de composants de l'objet, où un composant individuel est un objet non composite.

    Supposons, par exemple, que vous ayez trois objets sources : deux objets non composites et un objet composite dont le nombre de composants est égal à 12. Si vous composez ces trois objets sources, le nombre de composants de l'objet composite sera de 14.

    • Bien qu'il n'y ait aucune limite au nombre de composants qu'un objet composite peut contenir, le champ de métadonnées du nombre de composants pour un objet est saturé à 2 147 483 647.

      Par exemple, supposons que vous disposiez d'un objet contenant 3 000 000 000 de composants. Dans ce cas, le nombre de composants de l'objet prend la valeur 2 147 483 647.

    • Si vous réécrivez un objet composite dans un autre emplacement et/ou une autre classe de stockage, vous obtenez alors un objet composite avec un nombre de composants de 1.

  • Les objets composites ne possèdent pas de champ de métadonnées de hachage MD5.

  • La valeur ETag d'un objet composite n'est pas basée sur un hachage MD5, et le code client ne doit faire aucune hypothèse concernant les ETags des objets composites, si ce n'est qu'ils changent chaque fois que l'objet sous-jacent est modifié conformément à la spécification IETF pour HTTP/1.1.

Contrôle de l'intégrité des objets composites

Cloud Storage utilise CRC32C pour contrôler l'intégrité de chaque objet source lors de l'importation et pour permettre à l'utilisateur à l'origine de l'appel d'effectuer le même type de contrôle sur l'objet composite obtenu lors de son téléchargement. CRC32C est un code de détection d'erreur pouvant être calculé efficacement à partir des valeurs CRC32C de ses composants. Votre application doit utiliser CRC32C comme suit :

  • Lorsque vous importez des objets sources, calculez le code CRC32C pour chaque objet à l'aide d'une bibliothèque CRC32C (telle que l'une de celles répertoriées ci-dessous) et incluez cette valeur dans votre requête.
  • Pour l'opération de composition, incluez un code CRC32C dans la requête. Cloud Storage répond avec le code CRC32C de l'objet composite, qui peut être validé en créant une valeur CRC32C à partir des valeurs CRC32C des objets sources.
  • Lors du téléchargement, calculez le code CRC32C de l'objet téléchargé et comparez-le à la valeur incluse dans la réponse.
  • Si votre application peut modifier les objets sources entre le moment où ils sont importés et le moment où ils sont composés, spécifiez des noms propres aux générations pour les objets sources afin d'éviter les conditions de concurrence.

Les bibliothèques permettant de calculer les valeurs CRC32C incluent Boost pour C++, GoogleCloudPlatform crc32c pour Java, crcmod pour Python et digest-crc pour Ruby. Notez également que le code CRC32C est compatible avec les composants matériels des processeurs Intel actuels.

Cas d'utilisation

La composition d'objet est un outil utile pour effectuer des importations parallèles ou pour ajouter des données à un objet.

Importations parallèles

Vous pouvez utiliser la composition d'objet pour importer un objet en parallèle : divisez vos données en plusieurs fragments, importez chaque fragment dans un objet distinct en parallèle, composez votre objet final et supprimez tous les objets sources temporaires.

Afin d'empêcher les modifications d'objets sources entre les requêtes d'importation et de composition, vous pouvez fournir un numéro de génération attendu pour chaque source. Pour en savoir plus sur les générations d'objets, consultez la page Numéros de génération et conditions préalables.

Ajouts et modifications limités

Vous pouvez utiliser l'opération de composition pour effectuer des ajouts et des modifications d'objets limités.

Pour effectuer un ajout, vous devez ajouter des données à un nouvel objet temporaire, composer l'objet que vous souhaitez ajouter avec ces nouvelles données, nommer la sortie de l'opération de composition comme l'objet d'origine (facultatif) et supprimer l'objet temporaire.

Vous pouvez également utiliser la composition pour apporter des modifications élémentaires aux objets. Par exemple, vous avez la possibilité de composer un objet X à partir de la séquence {Y1, Y2, Y3}, de remplacer le contenu de Y2 et de recomposer X à partir des mêmes composants. Notez que cette opération nécessite que Y1, Y2 et Y3 ne soient pas supprimés. Ces composants, ainsi que l'objet composite, vous seront donc facturés.

Étapes suivantes