En fonction de votre inventaire, il peut être nécessaire de segmenter (ou diviser les flux en plusieurs fichiers).
Quand utiliser la segmentation ?
Le flux dépasse 200 Mo pour 1 fichier (après compression au format gzip).
- Exemple:Le flux de disponibilité généré mesure 1 Go. Il doit être divisé en plus de cinq fichiers (ou segments) distincts.
L'inventaire des partenaires est réparti entre les systèmes et/ou les régions, ce qui entraîne des difficultés pour le rapprochement.
- Exemple : Le partenaire dispose d'inventaires aux États-Unis et dans l'UE qui résident 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 attributs
nonce
etgeneration_timestamp
.
- Exemple : Le partenaire dispose d'inventaires aux États-Unis et dans l'UE qui résident 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 attributs
Règles générales
- Chaque partition ne peut pas dépasser 200 Mo pour 1 fichier (après compression au format gzip).
- Nous vous recommandons de ne pas dépasser 20 segments par flux. Si votre justification commerciale nécessite un montant plus élevé, veuillez contacter l'assistance pour obtenir des instructions.
-
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 qu'elles soient envoyées dans le segment avec le mêmeshard_number
pour les futurs flux. - Pour de meilleures performances, vos données doivent être réparties équitablement entre les partitions afin que la taille de tous les fichiers segmentés soit similaire.
Segmenter des flux
Pour chaque fichier (ou segment), définissez FeedMetadata
sur ce qui suit:
processing_instruction
défini surPROCESS_AS_COMPLETE
.shard_number
défini sur la partition actuelle du flux (de 0 àtotal_shards
- 1 sans discontinuité)total_shards
défini sur le nombre total de segments pour le flux (à partir de 1).nonce
défini sur un identifiant unique identique dans toutes les partitions d'un même flux, mais différent de la valeur d'autres flux.generation_timestamp
est l'horodatage au format unix et EPOCH. Il doit être identique à tous les segments du flux.
Recommandé:pour chaque fichier (ou segment), définissez le nom de fichier pour indiquer le type de flux, l'horodatage, le numéro de segment et le nombre total de segments. La taille des segments doit être à peu près égale. Ils 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é
Segment 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" } ] } ] }
Segment 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" } ] } ] }
Segment 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é du partenaire
Il peut être difficile pour les partenaires de regrouper l'inventaire réparti sur plusieurs systèmes et régions dans un seul flux. La segmentation peut permettre de résoudre les problèmes de rapprochement en définissant chaque segment de sorte qu'il corresponde à l'ensemble d'inventaire de chaque système distribué.
Par exemple, supposons que l'inventaire d'un partenaire soit divisé en deux régions (inventaires américain et européen), qui résident dans deux systèmes distincts.
Le partenaire peut diviser chaque flux en deux (ou segments) distincts :
- Flux marchands: 1 segment pour les États-Unis, 1 segment pour l'UE
- Flux de services: un segment pour les États-Unis, un segment pour l'UE
- Flux de disponibilité: 1 segment pour les États-Unis, 1 segment pour l'UE
Pour vous assurer que les flux sont correctement traités, procédez comme suit:
- Définissez un calendrier d'importation, puis configurez chaque instance d'inventaire de manière à respecter le calendrier.
- Attribuez un numéro de partition unique à chaque instance (par exemple, US = N, EU = N + 1).
Définissez
total_shards
sur le nombre total de segments. - Pour chaque importation planifiée, définissez un
generation_timestamp
et unnonce
. DansFeedMetadata
, définissez toutes les instances de sorte qu'elles contiennent les mêmes valeurs pour ces deux champs.generation_timestamp
doit être actuel ou récent (idéalement, l'horodatage de la base de données de lecture du partenaire)
- Une fois toutes les partitions importées, Google les regroupe via
generation_timestamp
etnonce
.
Google traite le flux comme s'il s'agissait d'un segment distinct qui représente une région différente de l'inventaire du partenaire et qui peut être importé à une heure différente de la journée, à condition que les valeurs generation_timestamp
soient identiques dans tous les segments.
Exemple de flux de disponibilité segmenté par région
Segment 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" } ] } ] }
Segment 1 – Inventaire dans 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" } ] } ] }