Selon votre inventaire, le fractionnement (ou la division des flux en plusieurs fichiers) peut être nécessaire.
Quand utiliser le sharding
Le flux dépasse 200 Mo pour un fichier (après compression gzip).
- Exemple:Le flux de disponibilité généré est de 1 Go. Il doit être divisé en cinq fichiers (ou fragments) ou plus.
L'inventaire des partenaires est réparti entre des systèmes et/ou des régions, ce qui rend la réconciliation de l'inventaire difficile.
- Exemple:Le partenaire dispose d'un inventaire aux États-Unis et dans l'Union européenne qui se trouve dans des systèmes distincts. Le flux peut être généré avec deux fichiers (ou fragments), un pour les États-Unis et un pour l'Union européenne, avec les mêmes
nonce
etgeneration_timestamp
.
- Exemple:Le partenaire dispose d'un inventaire aux États-Unis et dans l'Union européenne qui se trouve dans des systèmes distincts. Le flux peut être généré avec deux fichiers (ou fragments), un pour les États-Unis et un pour l'Union européenne, avec les mêmes
Règles générales
- Chaque segment ne peut pas dépasser 200 Mo pour un fichier (après compression gzip).
- Nous vous recommandons de ne pas utiliser plus de 20 segments par flux. Si vous avez une justification commerciale qui nécessite un montant supérieur, 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, ils n'ont pas besoin d'être envoyés dans le segment avec le mêmeshard_number
pour les futurs flux. - Pour de meilleures performances, répartissez les données de manière égale entre les segments, afin que la taille de tous les fichiers segmentés soit la même.
Segmenter des flux
Pour chaque fichier (ou fragment), définissez FeedMetadata
sur les valeurs suivantes:
processing_instruction
défini surPROCESS_AS_COMPLETE
.shard_number
défini sur le segment actuel du flux (à partir de 0 jusqu'à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 qui est identique pour 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 pour tous les segments du flux.
Recommandation: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é fractionné
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é par les partenaires
Il peut être difficile pour les partenaires de consolider l'inventaire distribué sur plusieurs systèmes et/ou régions dans un seul flux. Le fractionnement peut être utilisé pour résoudre les problèmes de réconciliation en définissant chaque fragment pour qu'il corresponde à l'ensemble d'inventaire de chaque système distribué.
Par exemple, imaginons que l'inventaire d'un partenaire soit divisé en deux régions (inventaire des États-Unis et de l'UE), qui se trouvent dans deux systèmes distincts.
Le partenaire peut diviser chaque flux en deux fichiers (ou fragments):
- 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'Union européenne
Suivez les étapes ci-dessous pour vous assurer que les flux sont correctement traités:
- Définissez un calendrier d'importation et configurez chaque instance d'inventaire pour qu'elle suive ce calendrier.
- Attribuez des numéros de segment uniques à chaque instance (par exemple, États-Unis = N, Europe = N + 1).
Définissez
total_shards
sur le nombre total de segments. - À chaque heure d'importation planifiée, choisissez un
generation_timestamp
et unnonce
. DansFeedMetadata
, définissez toutes les instances pour 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 tous les fragments importés, Google les regroupe via
generation_timestamp
etnonce
.
Google traitera le flux comme un seul flux, même si chaque segment représente une région différente de l'inventaire du partenaire et qu'il peut être importé à une heure différente de la journée, à condition que le generation_timestamp
soit le même pour tous les segments.
Exemple de flux de disponibilité segmenté par région
Fragment 0 : inventaire aux États-Unis
{ "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" } ] } ] }
Shard 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" } ] } ] }