Dependendo do inventário, a fragmentação (ou a divisão de feeds em vários arquivos, podem ser necessários.
Quando usar a fragmentação
O feed excede 200 MB para um arquivo (após a compactação gzip).
- Exemplo:o feed de disponibilidade gerado tem 1 GB. Ela deve ser fragmentados para mais de 5 arquivos (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 que ficam em um local separado
sistemas. O feed pode ser gerado com dois arquivos (ou fragmentos), um para os EUA,
e uma para UE com o mesmo
nonce
egeneration_timestamp
.
- Exemplo:o parceiro tem inventário dos EUA e da UE que ficam em um local separado
sistemas. O feed pode ser gerado com dois arquivos (ou fragmentos), um para os EUA,
e uma para UE com o mesmo
Regras gerais
- Cada fragmento não pode exceder 200 MB para um arquivo (após a compactação gzip).
- Recomendamos não mais do que 20 fragmentos por feed. Se você tiver uma justificativa comercial precisar de mais do que essa quantidade, entre em contato com o suporte para receber mais instruções.
-
Os registros individuais (um objeto
Merchant
, por exemplo) precisam ser enviados em um fragmento, elas não podem ser divididas em vários fragmentos. No entanto, eles não precisam ser enviados no fragmento com o mesmoshard_number
para feeds futuros. - Para um melhor desempenho, seus dados devem ser divididos igualmente entre para que todos os arquivos tenham tamanhos semelhantes.
Como fragmentar feeds
Para cada arquivo (ou fragmento), defina o FeedMetadata
como o
seguintes:
processing_instruction
definido comoPROCESS_AS_COMPLETE
.shard_number
definido como o fragmento atual do feed (de 0 atotal_shards
- 1 sem descontinuidades)total_shards
definido como o número total de fragmentos para o feed (a partir de 1).nonce
definido como um identificador exclusivo que é mesmo. em todos os fragmentos do mesmo feed, mas diferente do valor outros feeds.nonce
precisa ser um inteiro positivo (uint64
).generation_timestamp
é o carimbo de data/hora em Unix e EPOCH. . Ele precisa ser o mesmo em todos os fragmentos do feed.
Recomendado:para cada arquivo (ou fragmento), defina o nome do arquivo para indicar o tipo de feed, o carimbo de data/hora, o número do fragmento e o número total de os fragmentos Os fragmentos devem ter aproximadamente o mesmo tamanho e são processados para que os fragmentos sejam carregados.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Exemplo de feed de disponibilidade fragmentada
Fragmento 0
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 0, "total_shards": 3, "nonce": 111111, "generation_timestamp": 1524606581 }, "service_availability": [ { "availability": [ { "spots_total": 1, "spots_open": 1, "duration_sec": 3600, "service_id": "1000", "start_sec": 1577275200, "merchant_id": "merchant1", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Fragmento 1
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 1, "total_shards": 3, "nonce": 111111, "generation_timestamp": 1524606581 }, "service_availability": [ { "availability": [ { "spots_total": 1, "spots_open": 1, "duration_sec": 3600, "service_id": "1000", "start_sec": 1577620800, "merchant_id": "merchant2", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Fragmento 2
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 2, "total_shards": 3, "nonce": 111111, "generation_timestamp": 1524606581 }, "service_availability": [ { "availability": [ { "spots_total": 1, "spots_open": 1, "duration_sec": 3600, "service_id": "1000", "start_sec": 1576670400, "merchant_id": "merchant3", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Como usar fragmentação para inventário distribuído por parceiros
Pode ser um desafio para os parceiros consolidarem o inventário distribuído em vários sistemas e/ou regiões em um único feed. A fragmentação pode ser usados para resolver desafios de reconciliação, definindo cada fragmento para corresponder do conjunto de inventário do sistema distribuído.
Por exemplo, digamos que o inventário de um parceiro seja separado em duas regiões (EUA e UE ) que ficam em dois sistemas diferentes.
O parceiro pode dividir cada feed em dois arquivos (ou fragmentos):
- Feed de comerciantes: 1 fragmento para os EUA, 1 fragmento para a UE
- Feed de serviços: 1 fragmento para os EUA, 1 fragmento para a UE
- Feed de disponibilidade: 1 fragmento para os EUA, 1 fragmento para a UE
Siga as etapas abaixo para garantir que os feeds sejam processados corretamente:
- Escolha uma programação de upload e configure cada instância do inventário para seguir o cronograma.
- Atribua números de fragmento exclusivos para cada instância (por exemplo, US = N, EU = N + 1).
Defina
total_shards
como o número total de fragmentos. - Em cada horário de envio programado, escolha um
generation_timestamp
enonce
. NaFeedMetadata
, defina todas as instâncias para manter os mesmos valores esses dois campos.generation_timestamp
precisa ser atual ou recente (preferencialmente, o carimbo de data/hora de leitura do banco de dados do parceiro)
- Depois que todos os fragmentos são enviados, o Google os agrupa usando
generation_timestamp
enonce
.
O Google processará o feed como um, mesmo que cada fragmento represente um
em uma região diferente do inventário do parceiro e podem ser carregados
um horário diferente do dia, desde que a generation_timestamp
é o mesmo em todos os fragmentos.
Exemplo de feed de disponibilidade fragmentada por região
Fragmento 0 - inventário dos EUA
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 0, "total_shards": 2, "nonce": 111111, "generation_timestamp": 1524606581 }, "service_availability": [ { "availability": [ { "spots_total": 1, "spots_open": 1, "duration_sec": 3600, "service_id": "1000", "start_sec": 1577275200, "merchant_id": "US_merchant_1", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Fragmento 1: inventário da UE
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 1, "total_shards": 2, "nonce": 111111, "generation_timestamp": 1524606581 }, "service_availability": [ { "availability": [ { "spots_total": 1, "spots_open": 1, "duration_sec": 3600, "service_id": "1000", "start_sec": 1577620800, "merchant_id": "EU_merchant_1", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }