Fragmentar arquivos de feed

Dependendo do seu inventário, pode ser necessário dividir os feeds em vários arquivos.

Quando usar o sharding

  • O feed excede 200 MB para um arquivo (após a compactação gzip).

    • Exemplo:o feed de disponibilidade gerado é de 1 GB. Ele precisa ser fragmentado em mais de cinco arquivos separados (ou fragmentos).
  • O inventário do parceiro é distribuído entre sistemas e/ou regiões, resultando em dificuldade para reconciliar o inventário.

    • Exemplo:o parceiro tem inventário dos EUA e da UE em sistemas separados. O feed pode ser gerado com dois arquivos (ou fragmentos), um para os EUA e outro para a UE, com o mesmo nonce e generation_timestamp.

Regras gerais

  • Cada fragmento não pode exceder 200 MB para um arquivo (após a compactação gzip).
  • Recomendamos não usar mais de 20 fragmentos por feed. Se você tiver uma justificativa comercial que exija mais do que esse valor, entre em contato com o suporte para receber mais instruções.
  • Registros individuais (um objeto Merchant, por exemplo) precisam ser enviados em um fragmento. Eles não podem ser divididos em vários fragmentos. No entanto, eles não precisam ser enviados no fragmento com o mesmo shard_number para feeds futuros.
  • Para um melhor desempenho, seus dados devem ser divididos igualmente entre os fragmentos. Assim, todos os arquivos terão um tamanho parecido.

Como fragmentar feeds

É possível dividir o feed de eventos separando um único JSON em arquivos JSON separados com eventos não sobrepostos e atualizando o JSON do descritor de arquivo com a lista de nomes de arquivos JSON.

Recomendado:para cada arquivo (ou fragmento), defina o nome do arquivo para indicar o tipo de feed, o carimbo de data/hora e o número do fragmento. Os fragmentos precisam ter tamanhos semelhantes e são processados quando todos são enviados.

Exemplo fragmentado

Descritor de arquivos: event.feeddata.v1_1728306001.filedescriptor.json

{
  "generation_timestamp": 1728306001,
  "name": "event.feeddata.v1",
  "data_file": [
    "event.feeddata.v1_1728306001_001.json",
    "event.feeddata.v1_1728306001_002.json"
  ]
}

Fragmento 0: event.feeddata.v1_1728306001_001.json

{
  "data": [
    {
      "id": "event-1",
      ...
    },
    {
      "id": "event-2",
      ...
    }
  ]
}

Fragmento 1: event.feeddata.v1_1728306001_002.json

{
  "data": [
    {
      "id": "event-3",
      ...
    },
    {
      "id": "event-4",
      ...
    }
  ]
}

Fragmentos para inventário distribuído por parceiros

Pode ser difícil para os parceiros consolidar o inventário distribuído em vários sistemas e/ou regiões em um único feed. O fragmentação pode ser usado para resolver problemas de reconciliação definindo cada fragmento para corresponder a cada conjunto de inventário do sistema distribuído.

Por exemplo, digamos que o inventário de um parceiro seja dividido em duas regiões (inventário dos EUA e da UE), que estão em dois sistemas separados.

O parceiro pode dividir cada feed em dois arquivos (ou fragmentos):

Siga estas etapas para garantir que os feeds sejam processados corretamente:

  1. Defina uma programação de upload e configure cada instância de inventário para seguir essa programação.
  2. Atribua números de fragmento exclusivos para cada instância (por exemplo, EUA = N, UE = N + 1). Defina total_shards como o número total de fragmentos.
  3. Em cada horário de upload programado, escolha um generation_timestamp. Defina todos os nomes de arquivos para manter os mesmos valores para esses dois campos e liste todos os nomes de arquivos esperados no arquivo de descritor.
    • generation_timestamp precisa ser atual ou recente (de preferência, o carimbo de data/hora de leitura do banco de dados do parceiro)
  4. Depois que todos os fragmentos são enviados, o Google os agrupa usando generation_timestamp e nonce.

O Google vai processar o feed como um único, mesmo que cada fragmento represente uma região diferente do inventário do parceiro e possa ser enviado em um horário diferente do dia, desde que o generation_timestamp seja o mesmo em todos os fragmentos.