Segmenter les fichiers des flux

Selon votre inventaire, vous pouvez segmenter (ou diviser les flux en plusieurs fichiers) peuvent s'avérer nécessaires.

<ph type="x-smartling-placeholder">

Quand utiliser la segmentation

  • La taille du flux dépasse 200 Mo pour 1 fichier (après compression gzip).

    • Exemple:Le flux disponibilité généré fait 1 Go. Il doit s'agir segmentés en au moins cinq fichiers (ou segments) distincts.
  • L'inventaire des partenaires est réparti entre les différents systèmes et/ou régions ce qui compliquait le rapprochement de l'inventaire.

    • Exemple:Le partenaire dispose d'un inventaire pour les États-Unis et l'autre pour l'UE qui se trouvent dans des emplacements distincts systèmes. Le flux peut être généré avec deux fichiers (ou segments), un pour les États-Unis, et 1 pour l'UE avec les mêmes valeurs nonce et generation_timestamp
<ph type="x-smartling-placeholder">

Règles générales

  • La taille de chaque segment ne peut pas dépasser 200 Mo par fichier (après compression gzip).
  • Nous vous recommandons de ne pas ajouter plus de 20 segments par flux. Si vous avez une justification métier dépasse ce montant, veuillez contacter l'assistance pour en savoir plus.
  • Les enregistrements individuels (un objet Merchant, par exemple) doivent être envoyés dans un segment. ils ne peuvent pas être répartis sur plusieurs segments. Toutefois, il n'est pas nécessaire de les envoyer dans le segment avec le même shard_number pour les futurs flux.
  • Pour de meilleures performances, vos données doivent être réparties équitablement les segments afin que tous les fichiers segmentés aient une taille similaire.
<ph type="x-smartling-placeholder">

Comment segmenter des flux

Pour chaque fichier (ou segment), définissez FeedMetadata sur la suivantes:

  • processing_instructiondéfinie sur PROCESS_AS_COMPLETE
  • shard_number défini sur la partition actuelle du flux (commençant de 0 à total_shards - 1 sans discontinuité)
  • total_shards défini sur le nombre total de segments pour le (à partir de 1).
  • nonce défini sur un identifiant unique identique sur tous les segments du même flux, mais avec une valeur différente d'autres flux.
  • generation_timestamp est le code temporel dans Unix et EPOCH. . Elle doit être identique pour tous les segments du flux.

Recommandation:Pour chaque fichier (ou segment), indiquez un nom de fichier le type de flux, le code temporel, le numéro de segment et le nombre total segments. Les segments doivent avoir une taille à peu près égale et sont traités une fois segments sont importés.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Exemple de flux disponibilité segmenté

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

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

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

Utiliser la segmentation pour l'inventaire distribué des partenaires

Il peut s'avérer difficile pour les partenaires de consolider l'inventaire distribué sur plusieurs systèmes et/ou régions en un seul flux. La segmentation peut être pour résoudre les problèmes de rapprochement en définissant chaque segment l'ensemble d'inventaire du système distribué.

Supposons, par exemple, que l'inventaire d'un partenaire soit divisé en deux régions (États-Unis et UE). dans deux systèmes distincts.

Le partenaire peut diviser chaque flux en deux fichiers (ou segments):

  • Flux marchands: 1 segment pour les États-Unis, 1 segment pour l'UE
  • Flux services: 1 segment pour les États-Unis, 1 segment pour l'UE
  • Flux disponibilité: un segment pour les États-Unis, un segment pour l'Union européenne

Suivez les étapes ci-dessous pour vous assurer que vos flux sont correctement traités:

  1. Choisissez un calendrier d'importation et configurez chaque instance de l'inventaire suivre le calendrier.
  2. Attribuez des numéros de segment uniques à chaque instance (ex. US = N, EU = N + 1). Définissez total_shards sur le nombre total de segments.
  3. À chaque mise en ligne planifiée, generation_timestamp et nonce. Dans FeedMetadata, définissez toutes les instances de sorte qu'elles contiennent les mêmes valeurs pour ces deux champs.
    • La valeur du champ "generation_timestamp" doit être actuelle ou passée (idéalement, l'horodatage de la base de données "read-at" du partenaire)
  4. Une fois toutes les partitions importées, Google les regroupe via generation_timestamp et nonce.
<ph type="x-smartling-placeholder">

Google traite le flux comme s'il s'agissait d'un flux unique, même si chaque segment représente dans une région différente de l'inventaire du partenaire et peuvent être importées à un autre moment de la journée, à condition que generation_timestamp est le même pour tous les segments.

Flux de disponibilité segmenté par région

Partition 0 - Inventaire américain

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

Fragment 1 - Inventaire de l'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"
        }
      ]
    }
  ]
}