Objetos compuestos

Ir a ejemplos

En esta página se describen objetos compuestos, que creaste a partir de objetos existentes sin transferir datos de objetos adicionales. Los objetos compuestos son útiles con el fin de agregar adjuntos a un objeto, así como para compilar un objeto mediante componentes que subiste en paralelo.

Operación de composición

En la operación de composición, se crea un objeto compuesto nuevo cuyo contenido es la concatenación de una secuencia determinada de objetos de origen. Todos los objetos de origen deben cumplir los siguientes requisitos:

Cuando realizas una composición, se dan las siguientes situaciones:

  • Los objetos de origen no se ven afectados.
  • Puedes usar entre 1 y 32 objetos de origen.
  • Los objetos de origen pueden ser objetos compuestos.
  • El objeto compuesto resultante no cambia si los objetos de origen se reemplazan o borran más tarde.
  • Cuando se usa gsutil a fin de realizar la composición del objeto, el Content-Type del objeto compuesto resultante se configura para que coincida con el Content-Type del primer objeto de origen.

Metadatos de objetos compuestos

Existen varias diferencias entre los metadatos de un objeto compuesto y los metadatos de otros objetos:

  • Los objetos compuestos no tienen un campo de metadatos hash MD5.

  • El valor ETag de un objeto compuesto no se basa en un hash MD5, y el código del cliente no debe hacer suposiciones sobre los ETag de objeto compuesto, excepto que cambian cada vez que el objeto subyacente cambia en la especificación IETF para HTTP/1.1.

  • Cada objeto compuesto tiene un campo de metadatos de recuento de componentes, que cuenta la cantidad de objetos no compuestos que contiene el objeto compuesto.

    • Si reescribes un objeto compuesto en una ubicación o clase de almacenamiento diferente, el resultado será un objeto compuesto con un recuento de componentes de 1.

Verificación de integridad de los objetos compuestos

Cloud Storage usa CRC32C para verificar la integridad de cada objeto de origen en el momento de carga y a fin de permitir que el emisor realice una verificación de integridad del objeto compuesto resultante cuando se descarga. CRC32C es un código de detección de error que se puede calcular con eficiencia desde los valores CRC32C de sus componentes. Tu aplicación debería usar CRC32C de la siguiente manera:

  • Cuando subes objetos de origen, deberías calcular el CRC32C de cada objeto con una biblioteca CRC32C, como alguna de las que se indican debajo y, también, incluir ese valor en la solicitud.
  • Para la operación de composición, debes incluir un CRC32C en la solicitud. Cloud Storage responde con el CRC32C del objeto compuesto, que se puede validar cuando compilas un valor CRC32C a partir de los valores CRC32C de los objetos de origen.
  • En el momento de la descarga, tienes que calcular el CRC32C del objeto descargado y compararlo con el valor incluido en la respuesta.
  • Si tu aplicación puede cambiar los objetos de origen entre el momento de la carga y la composición de esos objetos, tendrás que especificar los nombres específicos de generación de los objetos de origen a fin de evitar condiciones de carrera.

Entre las bibliotecas que calculan valores CRC32C, se incluyen Boost para C++, GoogleCloudPlatform crc32c para Java, crcmod para Python, y digest-crc para Ruby. Ten en cuenta, también, que CRC32C cuenta con compatibilidad de hardware con las CPU Intel actuales.

Casos prácticos

La composición de objetos es una herramienta útil en el momento que se realizan cargas paralelas o como un medio para adjuntar datos a un objeto.

Cargas paralelas

La composición de objetos se puede usar para subir un objeto en paralelo: divide tus datos en varias partes, sube cada parte a un objeto en paralelo distinto, compone tu objeto final y borra cualquier objeto temporal.

Con el fin de estar protegidos de los cambios a los objetos de origen entre la carga y las solicitudes de composición, debes proporcionar un número de generación esperado para cada origen. Para obtener más información sobre las generaciones de objetos, consulta Generaciones y criterios previos.

Ediciones y agregados limitados

Puedes usar la operación de composición para realizar ediciones y agregados de objetos limitados.

Debes realizar el agregado mediante la carga de datos a un objeto temporal nuevo, lo que compone el objeto que deseas agregar junto con estos datos nuevos. De forma opcional, puedes nombrar al resultado de la operación de composición de la misma forma que el objeto original y borrar el objeto temporal.

También puedes usar la composición para que sea compatible con una variante básica de edición de objetos. Por ejemplo, puedes componer un objeto X de la secuencia {Y1, Y2, Y3}, reemplazar el contenido de Y2 y recomponer X de esos mismos componentes. Ten en cuenta que esto requiere que no se borren Y, Y2 ni Y3, por lo que se te facturará por esos componentes y por el compuesto.

Próximos pasos