Archivos del feed de fragmentación (heredados)

Según tu inventario, es posible que se necesite fragmentar (o dividir los feeds en varios archivos).

Cuándo usar la fragmentación

  • 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. Debe estar fragmentado en más de 5 archivos separados (o fragmentos).
  • El inventario de socios se distribuye entre sistemas o regiones, lo que genera dificultades para conciliarlo.

    • Ejemplo: El socio tiene inventarios de EE.UU. y de la UE que se encuentran en sistemas separados. El feed se puede generar con 2 archivos (o fragmentos), 1 para EE.UU. y 1 para EU con los mismos nonce y generation_timestamp.

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 shards por feed. Si tienes una justificación comercial que requiere más que esa cantidad, comunícate con el equipo de asistencia para obtener más instrucciones.
  • Los registros individuales (un objeto Merchant, por ejemplo) se deben enviar en un fragmento. No se pueden dividir en varios fragmentos. Sin embargo, no es necesario que se envíen en el shard con el mismo shard_number para los feeds futuros.
  • Para obtener un mejor rendimiento, debes dividir los datos de manera uniforme entre los fragmentos, de manera que todos los archivos fragmentados tengan un tamaño similar.

Cómo fragmentar feeds

Para cada archivo (o fragmento), establece el FeedMetadata de la siguiente manera:

  • processing_instruction configurado como PROCESS_AS_COMPLETE
  • shard_number se establece en el fragmento actual del feed (comienza de 0 a total_shards, 1 sin discontinuidades).
  • El valor total_shards es la cantidad total de fragmentos del feed (a partir de 1).
  • nonce se establece en un identificador único que es el mismo en todos los fragmentos del mismo feed, pero diferente del valor de otros feeds.
  • generation_timestamp es la marca de tiempo en formato Unix y EPOCH. Debe ser el mismo en todos los fragmentos del feed.

Recomendación: Para cada archivo (o fragmento), configura el nombre del archivo a fin de indicar el tipo de feed, la marca de tiempo, el número de fragmento y la cantidad total de fragmentos. Los fragmentos deben tener un tamaño similar y se procesan una vez que se suben todos los fragmentos.

  • 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"
        }
      ]
    }
  ]
}

Uso de la fragmentación para el inventario distribuido por socios

Puede ser difícil para los socios consolidar el inventario distribuido entre varios sistemas o regiones en un solo feed. La fragmentación se puede usar para resolver desafíos de conciliación estableciendo cada fragmento de modo que coincida con el conjunto de inventario de cada sistema distribuido.

Por ejemplo, supongamos que el inventario de un socio está separado en 2 regiones (inventario de EE.UU. y UE), que se encuentran en 2 sistemas separados.

El socio puede dividir cada feed en 2 archivos (o fragmentos):

  • Feed de comercios: 1 fragmento para EE.UU., 1 fragmento para la UE
  • Feed de servicios: 1 fragmento para EE.UU., 1 fragmento para la UE
  • Feed de disponibilidad: 1 fragmento para EE.UU., 1 fragmento para UE

Sigue los pasos que se indican a continuación para asegurarte de que los feeds se procesen correctamente:

  1. Decide un programa de cargas y configura cada instancia del inventario para que lo siga.
  2. Asigna números de fragmento únicos para cada instancia (p.ej., US = N, EU = N + 1). Establece total_shards en la cantidad total de fragmentos.
  3. En cada hora de carga programada, elige una generation_timestamp y una nonce. En FeedMetadata, configura todas las instancias a fin de que conserven los mismos valores para estos dos campos.
    • generation_timestamp debe ser actual o reciente en el pasado (idealmente, la marca de tiempo de la base de datos de lectura del socio)
  4. Una vez subidos todos los fragmentos, Google los agrupa mediante generation_timestamp y nonce.

Google procesará el feed como uno solo, aunque cada fragmento represente una región diferente del inventario del socio y se podría subir en un momento diferente del día, siempre que el generation_timestamp sea el mismo en todos los fragmentos.

Ejemplo de 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"
        }
      ]
    }
  ]
}