Objetos compostos

Esta página descreve objetos compostos que você cria a partir de objetos existentes sem transferir dados de objetos adicionais. Objetos compostos são úteis para criar anexos em um objeto, bem como para construir um objeto com componentes carregados em paralelo. Para ter acesso a um guia passo a passo sobre como realizar a composição de objetos, consulte Como criar objetos.

Operação de composição

A operação de composição cria um novo objeto composto com a concatenação de uma determinada sequência de objetos de origem. Todos os objetos de origem devem:

Ao executar uma composição:

  • Os objetos de origem não são afetados.
  • É possível usar até 32 objetos de origem.
  • Os próprios objetos de origem podem ser objetos compostos.
  • Em caso de subsequente substituição ou exclusão dos objetos de origem, o objeto composto resultante não será alterado.
  • Ao usar o gsutil para realizar a composição do objeto, o Content-Type do objeto composto resultante é definido para corresponder ao Content-Type do primeiro objeto de origem.

Metadados do objeto composto

Há várias diferenças entre os metadados de um objeto composto e aqueles de outros objetos:

  • Cada objeto composto tem um campo de metadados de contagem de componentes. A contagem do componente indica o número de componentes no objeto, onde um único componente é um objeto não composto.

    Por exemplo, digamos que você tenha três objetos de origem: dois objetos não compostos e um composto com contagem de componentes de 12. Se você escrever esses três objetos de origem, o objeto composto resultante terá uma contagem de componentes de 14.

    • Ainda que não haja limite para o número de componentes que um objeto composto pode conter, o campo de metadados de contagem de componente de um objeto é saturado em 2.147.483.647.

      Digamos, por exemplo, que você tem um objeto com 3.000.000.000 componentes. Nesse caso, a contagem de componentes do objeto tem um valor de 2.147.483.647.

    • Se você reescrever um objeto composto para um local e/ou classe de armazenamento diferente, o resultado será um objeto composto com uma contagem de componentes igual a 1.

  • Os objetos compostos não têm um campo de metadados de hash MD5.

  • O valor ETag de um objeto composto não é baseado em um hash MD5, e o código cliente não deve fazer suposições sobre ETags de objetos compostos, exceto que eles mudam sempre que o objeto subjacente é alterado pela especificação IETF para HTTP/1.1.

Como fazer verificação de integridade de objetos compostos

O Cloud Storage usa o CRC32C (em inglês) para verificar a integridade de cada objeto de origem no momento do upload e para permitir que o autor da chamada execute uma verificação de integridade do objeto composto resultante quando o download dele é feito. O CRC32C é um código de detecção de erros que pode ser calculado com eficiência a partir dos valores CRC32C dos componentes dele. O aplicativo usará o CRC32C da maneira a seguir:

  • Ao fazer o upload de objetos de origem, calcule o CRC32C para cada objeto usando uma biblioteca de CRC32C, como uma das listadas abaixo, e inclua esse valor em sua solicitação.
  • Para a operação de composição, inclua um CRC32C na solicitação. O Cloud Storage responde com o CRC32C do objeto composto, que pode ser validado pela criação de um valor CRC32C dos valores CRC32C dos objetos de origem.
  • No momento do download, calcule o CRC32C do objeto baixado e o compare com o valor incluído na resposta.
  • Se seu aplicativo puder alterar objetos de origem entre o momento de fazer o upload e compor esses objetos, defina nomes específicos de geração para os objetos de origem para evitar disputas.

As bibliotecas para calcular os valores de CRC32C incluem Boost para C++, GoogleCloudPlatform crc32c para Java, crcmod para Python e digest-crc para Ruby (links em inglês). Observe também que o CRC32C é compatível com hardware nas CPUs da Intel atuais.

Casos de uso

A composição de objetos é uma ferramenta útil ao realizar uploads em paralelos ou como um meio de anexar dados a um objeto.

Uploads paralelos

A composição de objetos pode ser usada para fazer upload de um objeto em paralelo: divida seus dados em vários fragmentos, faça upload de cada fragmento para um objeto distinto em paralelo, escreva seu último objeto e exclua todos os objetos de origem temporários.

Para proteger contra alterações em objetos de componentes entre as solicitações de upload e de composição, os usuários precisam fornecer um número de geração esperado para cada componente. Para mais informações sobre as gerações de objetos, consulte Gerações e condições prévias.

Anexação e edição limitadas

É possível usar a operação de escrita para executar edições e anexos limitados de objetos.

Você anexa fazendo upload de dados para um objeto temporário novo, compondo o objeto que quer anexar com esses novos dados, nomeando opcionalmente a saída da operação de composição igual ao objeto original e excluindo o objeto temporário.

Você também pode usar composição para dar suporte a uma versão básica de edição de objetos. Por exemplo, é possível compor um objeto X com a sequência {Y1, Y2, Y3}, substituir o conteúdo de Y2 e recompor X a partir desses mesmos componentes. Isso exige que Y1, Y2 e Y3 não sejam excluídos, por isso você será cobrado por esses componentes e pelo objeto composto como um todo.

A seguir