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
etgeneration_timestamp
- 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
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êmeshard_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.
Comment segmenter des flux
Pour chaque fichier (ou segment), définissez FeedMetadata
sur la
suivantes:
processing_instruction
définie surPROCESS_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.nonce
doit être un entier positif (uint64
).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é: 1 segment pour les États-Unis, 1 segment pour l'UE
Suivez les étapes ci-dessous pour vous assurer que vos flux sont correctement traités:
- Choisissez un calendrier d'importation et configurez chaque instance de l'inventaire suivre le calendrier.
- 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. - À chaque mise en ligne planifiée,
generation_timestamp
etnonce
. DansFeedMetadata
, 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)
- La valeur du champ "
- 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 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" } ] } ] }