Fichiers de flux segmentés (anciens)

En fonction de votre inventaire, la segmentation (ou la division des flux en plusieurs fichiers) peut être nécessaire.

Quand utiliser la segmentation ?

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

    • Exemple:La taille du flux disponibilité généré est de 1 Go. Il doit être segmenté en cinq fichiers (ou segments) distincts ou plus.
  • L'inventaire du partenaire est réparti sur plusieurs systèmes et/ou régions, ce qui rend son rapprochement difficile.

    • Exemple:Le partenaire dispose d'un inventaire pour les États-Unis et l'UE, qui se trouve dans des systèmes distincts. Le flux peut être généré avec deux fichiers (ou segments), un pour les États-Unis et un pour l'UE, avec les mêmes valeurs nonce et generation_timestamp.

Règles générales

  • La taille d'un fichier par segment ne peut pas dépasser 200 Mo (après compression gzip).
  • Nous vous recommandons de ne pas dépasser 20 segments par flux. Si le motif de votre activité nécessite un montant supérieur à ce montant, veuillez contacter l'assistance pour en savoir plus.
  • Les enregistrements individuels (un objet Merchant, par exemple) doivent être envoyés dans une seule partition. Ils ne peuvent pas être répartis sur plusieurs segments. Toutefois, ils n'ont pas besoin d'être envoyés dans le segment avec le même shard_number pour les futurs flux.
  • Pour améliorer les performances, vous devez répartir équitablement vos données entre les segments, de sorte que la taille de tous les fichiers segmentés soit similaire.

Segmenter les flux

Pour chaque fichier (ou segment), définissez FeedMetadata sur ce qui suit:

  • processing_instruction défini sur PROCESS_AS_COMPLETE.
  • shard_number défini sur le segment actuel du flux (de 0 à total_shards - 1 sans discontinuités)
  • total_shards défini sur le nombre total de segments pour le flux (à partir de 1).
  • nonce défini sur un identifiant unique identique sur tous les segments du même flux, mais différent de la valeur des autres flux.
  • generation_timestamp est l'horodatage au format Unix et EPOCH. Cette valeur doit être identique sur tous les segments du flux.

Recommandé:Pour chaque fichier (ou segment), définissez le nom de fichier pour indiquer le type de flux, le code temporel, le numéro de segment et le nombre total de segments. Les segments doivent être à peu près de la même taille et sont traités une fois tous les segments importés.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Exemple de flux de disponibilité segmenté

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

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

Partition 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 regrouper dans un seul flux l'inventaire réparti sur plusieurs systèmes et/ou régions. La segmentation peut être utilisée pour résoudre les problèmes de rapprochement en définissant chaque segment de sorte qu'il corresponde à l'ensemble d'inventaires de chaque système distribué.

Par exemple, supposons que l'inventaire d'un partenaire soit divisé en deux régions (inventaire américain et de l'UE), qui se trouvent dans deux systèmes distincts.

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

  • Flux marchands: 1 segment pour les États-Unis et 1 segment pour l'UE
  • Flux de services: 1 segment pour les États-Unis et 1 segment pour l'UE
  • Flux de disponibilité: 1 segment pour les États-Unis et 1 segment pour l'UE

Pour vous assurer que les flux sont correctement traités, procédez comme suit:

  1. Définissez un calendrier d'importation et configurez chaque instance de l'inventaire afin qu'elle suive le calendrier.
  2. Attribuez des numéros de segment uniques à chaque instance (par exemple, US = N, EU = N + 1). Définissez total_shards sur le nombre total de segments.
  3. À chaque heure d'importation planifiée, définissez des valeurs generation_timestamp et nonce. Dans FeedMetadata, configurez toutes les instances pour qu'elles contiennent les mêmes valeurs pour ces deux champs.
    • generation_timestamp doit correspondre à un passé actuel ou récent (idéalement, l'horodatage de lecture de la base de données du partenaire).
  4. Une fois que tous les segments sont importés, Google les regroupe via generation_timestamp et nonce.

Google traite le flux comme un seul segment, même si chaque segment représente une région différente de l'inventaire du partenaire et peut être importé à un autre moment de la journée, à condition que le generation_timestamp soit le même dans tous les segments.

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

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