Cómo fragmentar los archivos de feeds

Según tu inventario, puedes fragmentar (o dividir los feeds en varias 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 ser fragmentada en más de 5 archivos separados (o fragmentos).
  • El inventario de socios se distribuye entre los sistemas o las regiones lo que dificultaba conciliar el inventario.

    • Ejemplo: Un socio tiene inventario de EE.UU. y la UE que se encuentra en de la seguridad de la información. El feed se puede generar con 2 archivos (o fragmentos), 1 para EE.UU. y 1 para la UE con el mismo nonce y generation_timestamp

Reglas Generales

  • Cada fragmento no puede superar los 200 MB en 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 si el monto es superior, comunícate con el equipo de asistencia para recibir más instrucciones.
  • Los registros individuales (un objeto Merchant, por ejemplo) deben enviarse en un fragmento. no se pueden dividir en múltiples fragmentos. Sin embargo, no es necesario que se envíen en el fragmento. con el mismo shard_number para los feeds futuros.
  • Para obtener un mejor rendimiento, los datos se deben dividir de manera uniforme entre los fragmentos para que todos los archivos particionados tengan un tamaño similar.

Cómo fragmentar feeds

Para cada archivo (o fragmento), establece el FeedMetadata en la lo siguiente:

  • processing_instructionse estableció en PROCESS_AS_COMPLETE
  • Se estableció shard_number en el fragmento actual del feed. (comienza de 0 a total_shards - 1 sin discontinuidades)
  • total_shards se estableció en la cantidad total de fragmentos del (a partir de 1).
  • nonce se estableció en un identificador único igual en todos los fragmentos del mismo feed, pero son diferentes del valor de otros feeds. nonce debe ser un int positivo (uint64).
  • generation_timestamp es la marca de tiempo en Unix y EPOCH. de un conjunto de datos tengan un formato común. Debería ser igual 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 el número total de fragmentos. Los fragmentos deben tener aproximadamente el mismo tamaño y se procesan una vez que todos se suben fragmentos.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

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

Usa la fragmentación para el inventario distribuido por socios

Puede ser difícil para los socios consolidar el inventario distribuido en varios sistemas o regiones en un solo feed. La fragmentación puede tener las siguientes características: que se usa para resolver desafíos de conciliación configurando cada fragmento para que coincida conjunto de inventario de un sistema distribuido.

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

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

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

Sigue estos pasos para asegurarte de que los feeds se procesen correctamente:

  1. Define un programa de cargas y configura cada instancia de inventario para seguir el cronograma.
  2. 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.
  3. En cada momento de carga programada, decide generation_timestamp y nonce. En la FeedMetadata, configura todas las instancias para que tengan los mismos valores para estos dos campos.
    • generation_timestamp debe ser actual o reciente. (idealmente, la marca de tiempo de la lectura de la base de datos del socio)
  4. Después de que se suben todos los fragmentos, Google los agrupa mediante generation_timestamp y nonce.

Google procesará el feed como uno solo, aunque cada fragmento represente un región diferente del inventario del socio y podrían subirse a una a una hora diferente del día, siempre y cuando generation_timestamp es el mismo en todos los shards.

Ejemplo del feed de disponibilidad fragmentada 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"
        }
      ]
    }
  ]
}