Je nach Inventar kann es erforderlich sein, Feeds zu teilen, d. h. in mehrere Dateien aufzuteilen.
Wann sollte Sharding verwendet werden?
Der Feed überschreitet 200 MB für eine Datei (nach GZIP-Komprimierung).
- Beispiel:Der generierte Verfügbarkeitsfeed hat eine Größe von 1 GB. Dieser sollte in mindestens fünf separate Dateien (oder Shards) aufgeteilt werden.
Das Inventar des Partners ist auf Systeme und/oder Regionen verteilt, was die Inventarabstimmung erschwert.
- Beispiel:Der Partner hat Inventar in den USA und in der EU, das sich in separaten Systemen befindet. Der Feed kann mit zwei Dateien (oder Shards) generiert werden, einer für die USA und einer für die EU, mit denselben
nonce
- undgeneration_timestamp
-Werten.
- Beispiel:Der Partner hat Inventar in den USA und in der EU, das sich in separaten Systemen befindet. Der Feed kann mit zwei Dateien (oder Shards) generiert werden, einer für die USA und einer für die EU, mit denselben
Allgemeine Regeln
- Jeder Shard darf maximal 200 MB für eine Datei betragen (nach GZIP-Komprimierung).
- Wir empfehlen nicht mehr als 20 Shards pro Feed. Wenn Sie aus geschäftlichen Gründen mehr als diesen Betrag benötigen, wenden Sie sich bitte an den Support, um weitere Informationen zu erhalten.
-
Einzelne Datensätze (z. B. ein
Merchant
-Objekt) müssen in einem Shard gesendet werden. Sie können nicht auf mehrere Shards aufgeteilt werden. Für zukünftige Feeds müssen sie jedoch nicht im Shard mit derselbenshard_number
gesendet werden. - Für eine bessere Leistung sollten Ihre Daten gleichmäßig auf die Shards aufgeteilt werden, sodass alle fragmentierten Dateien eine ähnliche Größe haben.
Feeds fragmentieren
Legen Sie für jede Datei (oder jeden Shard) FeedMetadata
auf Folgendes fest:
processing_instruction
aufPROCESS_AS_COMPLETE
gesetzt.shard_number
auf den aktuellen Shard des Feeds festgelegt ist (ohne Unterbrechungen von 0 bistotal_shards
– 1)total_shards
auf die Gesamtzahl der Shards für den Feed (beginnend mit 1) festgelegt ist.nonce
muss auf eine eindeutige Kennung festgelegt sein, die in allen Shards desselben Feeds identisch ist, sich aber von den Werten anderer Feeds unterscheidet.nonce
muss eine positive Ganzzahl (uint64
) sein.generation_timestamp
ist der Zeitstempel im Unix- und EPOCH-Format. Dieser Wert sollte für alle Shards des Feeds identisch sein.
Empfohlen:Legen Sie für jede Datei (oder jeden Shard) den Dateinamen so fest, dass er den Feedtyp, den Zeitstempel, die Shard-Nummer und die Gesamtzahl der Shards angibt. Die Shards sollten ungefähr gleich groß sein und werden verarbeitet, sobald alle Shards hochgeladen wurden.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Beispiel für einen geShardeten Verfügbarkeitsfeed
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" } ] } ] }
Sharding für von Partnern verteiltes Inventar verwenden
Es kann für Partner schwierig sein, Inventar, das auf mehrere Systeme und/oder Regionen verteilt ist, in einem einzigen Feed zusammenzuführen. Mit dem Sharding können Sie Probleme bei der Abgleichung beheben, indem Sie jeden Shard so festlegen, dass er dem Inventarsatz jedes verteilten Systems entspricht.
Angenommen, das Inventar eines Partners ist in zwei Regionen (USA und EU) aufgeteilt, die in zwei separaten Systemen gespeichert sind.
Der Partner kann jeden Feed in zwei Dateien (oder Shards) aufteilen:
- Händlerfeed: 1 Shard für die USA, 1 Shard für die EU
- Dienstleistungsfeed: 1 Shard für die USA, 1 Shard für die EU
- Verfügbarkeitsfeed: 1 Shard für die USA, 1 Shard für die EU
Führen Sie die folgenden Schritte aus, um sicherzustellen, dass die Feeds ordnungsgemäß verarbeitet werden:
- Legen Sie einen Uploadzeitplan fest und konfigurieren Sie jede Inventarinstanz so, dass sie dem Zeitplan folgt.
- Weisen Sie jeder Instanz eindeutige Shard-Nummern zu (z.B. USA = N, EU = N + 1).
Legen Sie
total_shards
auf die Gesamtzahl der Shards fest. - Legen Sie für jeden geplanten Uploadzeitpunkt einen
generation_timestamp
und einennonce
fest. Legen Sie inFeedMetadata
für alle Instanzen dieselben Werte für diese beiden Felder fest.generation_timestamp
muss aktuell oder in der jüngeren Vergangenheit liegen (idealerweise der Datenbankzeitstempel des Partners für das Lesen).
- Nachdem alle Shards hochgeladen wurden, gruppiert Google sie über
generation_timestamp
undnonce
.
Google verarbeitet den Feed als einen einzelnen Feed, auch wenn jeder Shard eine andere Region des Inventars des Partners darstellt und zu einer anderen Tageszeit hochgeladen werden kann, solange generation_timestamp
für alle Shards gleich ist.
Beispiel für einen geShardeten Verfügbarkeitsfeed nach Region
Shard 0 – US-Inventar
{ "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 – EU-Inventar
{ "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" } ] } ] }