Je nach Inventar kann das Aufteilen (oder Aufteilen von Feeds in mehrere -Dateien) erforderlich sein.
<ph type="x-smartling-placeholder">Wann sollte die Fragmentierung verwendet werden?
Der Feed überschreitet 200 MB für eine Datei (nach der GZIP-Komprimierung).
- Beispiel: Der generierte Verfügbarkeitsfeed ist 1 GB groß. Dies sollte in mehr als fünf separate Dateien (oder Shards) fragmentiert.
Partnerinventar ist auf Systeme und/oder Regionen verteilt was dazu führt, dass das Inventar nicht abgeglichen werden konnte.
- Beispiel:Der Partner hat Inventar für die USA und die EU, das getrennt voneinander vertrieben wird.
Systeme. Der Feed kann mit 2 Dateien (oder Shards) generiert werden, 1 für die USA,
und 1 für EU mit denselben Werten für
nonce
undgeneration_timestamp
.
- Beispiel:Der Partner hat Inventar für die USA und die EU, das getrennt voneinander vertrieben wird.
Systeme. Der Feed kann mit 2 Dateien (oder Shards) generiert werden, 1 für die USA,
und 1 für EU mit denselben Werten für
Allgemeine Regeln
- Die einzelnen Shards dürfen für eine Datei maximal 200 MB groß sein (nach der gzip-Komprimierung).
- Wir empfehlen nicht mehr als 20 Shards pro Feed. Wenn es aus geschäftlichen Gründen erfordert mehr als diesen Betrag. Wenden Sie sich an den Support, um weitere Anweisungen zu erhalten.
-
Einzelne Datensätze (z. B. ein
Merchant
-Objekt) müssen in einem Shard gesendet werden, können sie nicht auf mehrere Shards aufgeteilt werden. Sie müssen jedoch nicht im Shard gesendet werden. mit derselbenshard_number
für zukünftige Feeds. - Um eine bessere Leistung zu erzielen, sollten Ihre Daten gleichmäßig zwischen den sodass alle Dateien eine ähnliche Größe haben.
Feeds fragmentieren
Lege für jede Datei (oder jeden Shard) die FeedMetadata
auf den
Folgendes:
processing_instruction
festgelegt aufPROCESS_AS_COMPLETE
.shard_number
ist auf den aktuellen Shard des Feeds festgelegt (beginnend von 0 bistotal_shards
bis 1 ohne Unterbrechungen)total_shards
ist auf die Gesamtzahl der Shards für die Feed (beginnend mit 1).nonce
wurde auf eine eindeutige Kennung festgelegt, die gleiche ID ist. in allen Shards desselben Feeds, aber anders als anderen Feeds.nonce
muss eine positive Ganzzahl (uint64
) sein.generation_timestamp
ist der Zeitstempel in Unix und EPOCH Format. Dieser Wert sollte für alle Shards des Feeds derselbe sein.
Empfohlen:Legen Sie für jede Datei (oder jeden Shard) den Dateinamen so fest, den Feedtyp, den Zeitstempel, die Shard-Nummer und die Gesamtzahl Shards. Shards sollten in etwa gleich groß sein und werden verarbeitet, Shards wurden hochgeladen.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Beispiel für einen Feed zur fragmentierten Verfügbarkeit
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" } ] } ] }
Fragmentierung für über Partner verteiltes Inventar verwenden
Es kann für Partner schwierig sein, Inventar zu konsolidieren, über mehrere Systeme und/oder Regionen hinweg in einem einzigen Feed zusammenfassen. Fragmentierung kann zur Lösung von Problemen beim Abgleich, indem die Shards jeweils Inventarsatz eines verteilten Systems.
Angenommen, das Inventar eines Partners ist in zwei Regionen unterteilt: USA und EU. Inventar), 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 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 Instanz des Inventars, den Zeitplan einhalten.
- Weisen Sie jeder Instanz eindeutige Shard-Nummern zu (z.B. US = N, EU = N + 1).
Legen Sie
total_shards
auf die Gesamtzahl der Shards fest. - Entscheiden Sie sich für jeden geplanten Upload-Zeitpunkt
generation_timestamp
undnonce
. ImFeedMetadata
, legen Sie fest, dass alle Instanzen dieselben Werte enthalten in diese beiden Felder ein.generation_timestamp
muss aktuell oder aktuell in der Vergangenheit sein (idealerweise der Zeitstempel des Einlesevorgangs der Datenbank)
- Nachdem alle Shards hochgeladen wurden, gruppiert Google sie über
generation_timestamp
undnonce
.
Google verarbeitet den Feed als einer, obwohl jeder Shard einen
in einer anderen Region des Partnerinventars und kann in einem
zu unterschiedlichen Tageszeiten, solange das generation_timestamp
ist für alle Shards gleich.
Beispiel für einen Feed zur fragmentierten Verfügbarkeit 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" } ] } ] }