Según tu inventario, es posible que debas fragmentar (o dividir los feeds en varios archivos).
Cuándo usar el particionado
El feed supera los 200 MB para 1 archivo (después de la compresión gzip).
- Ejemplo: El feed de disponibilidad generado es de 1 GB. Esto se debe fragmentar en más de 5 archivos (o fragmentos) separados.
El inventario de socios se distribuye en sistemas o regiones, lo que dificulta la conciliación del inventario.
- Ejemplo: El socio tiene inventario de EE.UU. y de la UE que se encuentra en sistemas separados. El feed se puede generar con 2 archivos (o fragmentos), 1 para EE.UU. y 1 para la UE, con los mismos
nonce
ygeneration_timestamp
.
- Ejemplo: El socio tiene inventario de EE.UU. y de la UE que se encuentra en sistemas separados. El feed se puede generar con 2 archivos (o fragmentos), 1 para EE.UU. y 1 para la UE, con los mismos
Reglas Generales
- Cada fragmento no puede superar los 200 MB para 1 archivo (después de la compresión gzip).
- Recomendamos no más de 20 fragmentos por feed. Si tienes una justificación comercial que requiere más de ese importe, comunícate con el equipo de asistencia para obtener más instrucciones.
-
Los registros individuales (por ejemplo, un objeto
Merchant
) se deben enviar en un fragmento y no se pueden dividir en varios fragmentos. Sin embargo, no es necesario que se envíen en el fragmento con el mismoshard_number
para los feeds futuros. - Para obtener un mejor rendimiento, divide los datos de manera uniforme entre los fragmentos para que todos tengan un tamaño similar.
Cómo fragmentar feeds
Para cada archivo (o fragmento), establece FeedMetadata
en lo siguiente:
processing_instruction
se estableció enPROCESS_AS_COMPLETE
.shard_number
establecido en el fragmento actual del feed (desde 0 hastatotal_shards
- 1 sin discontinuidades)total_shards
establecido en la cantidad total de fragmentos del feed (a partir de 1)nonce
establecido en un identificador único que es el mismo en todos los fragmentos del mismo feed, pero diferente del valor de otros feedsnonce
debe ser un número entero positivo (uint64
).generation_timestamp
es la marca de tiempo en formato UNIX y EPOCH. Debe ser el mismo en todos los fragmentos del feed.
Recomendado: Para cada archivo (o fragmento), establece el nombre del archivo para indicar el tipo de feed, la marca de tiempo, el número de fragmento y la cantidad total de fragmentos. Los fragmentos deben tener aproximadamente el mismo tamaño y se procesan una vez que se suben todos.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Ejemplo de feed de disponibilidad fragmentado
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" } ] } ] }
Usa la fragmentación para el inventario distribuido por socios
Para los socios, puede ser un desafío consolidar el inventario distribuido en varios sistemas o regiones en un solo feed. El particionamiento se puede usar para resolver los desafíos de conciliación configurando cada fragmento para que coincida con cada conjunto de inventario del sistema distribuido.
Por ejemplo, supongamos que el inventario de un socio está separado en 2 regiones (inventario de EE.UU. y de la UE), que se encuentran en 2 sistemas independientes.
El socio puede dividir cada feed en 2 archivos (o fragmentos):
- Feed de comercios: 1 fragmento para EE.UU. y 1 fragmento para la UE
- Feed de servicios: 1 fragmento para EE.UU. y 1 fragmento para la UE
- Feed de disponibilidad: 1 fragmento para EE.UU. y 1 fragmento para la UE
Sigue los pasos que se indican a continuación para asegurarte de que los feeds se procesen correctamente:
- Elige un programa de carga y configura cada instancia del inventario para que siga el programa.
- Asigna números de fragmento únicos para cada instancia (p. ej., EE.UU. = N, UE = N + 1).
Establece
total_shards
en la cantidad total de fragmentos. - En cada hora de carga programada, elige un
generation_timestamp
y unnonce
. EnFeedMetadata
, establece todas las instancias para que contengan los mismos valores para estos dos campos.generation_timestamp
debe ser actual o reciente (idealmente, la marca de tiempo de la base de datos de lectura del socio).
- Después de subir todos los fragmentos, Google los agrupa a través de
generation_timestamp
ynonce
.
Google procesará el feed como uno solo, aunque cada fragmento represente una región diferente del inventario del socio y se pueda subir en un momento diferente del día, siempre y cuando el generation_timestamp
sea el mismo en todos los fragmentos.
Ejemplo de un feed de disponibilidad fragmentado por región
Fragmento 0: Inventario de EE.UU.
{ "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: Inventario de la 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" } ] } ] }