A seconda del tuo inventario, lo sharding (o la suddivisione dei feed in più file) potrebbero essere necessari.
Quando utilizzare lo sharding
Il feed supera i 200 MB per 1 file (dopo la compressione gzip).
- Esempio: il feed di disponibilità generato è di 1 GB. Dovrebbe essere con sharding in più di 5 file separati (o shard).
L'inventario dei partner è distribuito tra sistemi e/o regioni causando difficoltà nella riconciliazione dell'inventario.
- Esempio: il partner ha un inventario per gli Stati Uniti e l'UE che risiedono in servizi
sistemi diversi. Il feed può essere generato con 2 file (o shard), uno per gli Stati Uniti
e 1 per UE con lo stesso
nonce
egeneration_timestamp
.
- Esempio: il partner ha un inventario per gli Stati Uniti e l'UE che risiedono in servizi
sistemi diversi. Il feed può essere generato con 2 file (o shard), uno per gli Stati Uniti
e 1 per UE con lo stesso
Regole generali
- Ciascun shard non può superare i 200 MB per 1 file (dopo la compressione gzip).
- Consigliamo di non superare i 20 shard per feed. Se hai una giustificazione aziendale che richiede un importo superiore, contatta l'assistenza per ulteriori istruzioni.
-
I singoli record (ad esempio un oggetto
Merchant
) devono essere inviati in uno shard, non possono essere suddivisi in più shard. Tuttavia, non devono essere inviati nello shard con lo stessoshard_number
per i feed futuri. - Per ottenere prestazioni migliori, i dati devono essere suddivisi equamente tra in modo che tutti i file con sharding abbiano dimensioni simili.
Come eseguire lo sharding dei feed
Per ogni file (o shard), imposta FeedMetadata
su
seguenti:
processing_instruction
impostato suPROCESS_AS_COMPLETE
.shard_number
impostato sullo shard corrente del feed (a partire da 0 atotal_shards
- 1 senza discontinuità)total_shards
impostato sul numero totale di shard per feed (a partire da 1).nonce
impostato su un identificatore univoco uguale in tutti gli shard dello stesso feed, ma diverso dal valore di altri feed.nonce
deve essere un numero intero positivo (uint64
).generation_timestamp
è il timestamp in unix ed EPOCH formato. Dovrebbe essere uguale per tutti gli shard del feed.
Consigliato: per ogni file (o shard), imposta il nome file in modo da indicare il tipo di feed, il timestamp, il numero di shard e il numero totale o shard. Gli shard dovrebbero avere più o meno le stesse dimensioni e vengono elaborati una volta vengono caricati shard.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Esempio di feed di disponibilità con sharding
Shard 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" } ] } ] }
Shard 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" } ] } ] }
Shard 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" } ] } ] }
Utilizzare lo sharding per l'inventario distribuito dai partner
Può essere difficile per i partner consolidare l'inventario distribuito in più sistemi e/o regioni in un unico feed. Lo sharding può essere utilizzate per risolvere le sfide della riconciliazione impostando ogni shard in modo che l'inventario di un sistema distribuito.
Ad esempio, supponiamo che l'inventario di un partner sia separato in due regioni (Stati Uniti e UE dell'inventario), che risiedono in due sistemi separati.
Il partner può suddividere ogni feed in 2 file (o shard):
- Feed dei commercianti: 1 shard per gli Stati Uniti, 1 shard per l'UE
- Feed di servizi: 1 shard per gli Stati Uniti, 1 shard per l'UE
- Feed di disponibilità: 1 shard per gli Stati Uniti, 1 shard per l'UE
Per assicurarti che i feed vengano elaborati correttamente:
- Decidi una pianificazione dei caricamenti e configura ogni istanza dell'inventario per seguite il programma.
- Assegna numeri di shard univoci per ogni istanza (ad es. US = N, EU = N + 1).
Imposta
total_shards
sul numero totale di shard. - A ogni orario di caricamento pianificato,
generation_timestamp
enonce
. NellaFeedMetadata
, imposta tutte le istanze in modo che conservino gli stessi valori per questi due campi.generation_timestamp
deve essere attuale o recente (possibilmente, il timestamp del database di lettura del partner)
- Dopo aver caricato tutti gli shard, Google li raggruppa tramite
generation_timestamp
enonce
.
Google elaborerà il feed come un feed unico anche se ogni shard rappresenta un
regione diversa dell'inventario del partner e potrebbero essere caricati a un
a un'ora del giorno diversa purché l'generation_timestamp
è lo stesso per tutti gli shard.
Esempio di feed di disponibilità con sharding per regione
Shard 0 - Inventario Stati Uniti
{ "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 - Inventario 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" } ] } ] }