Feeddateien fragmentieren

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 und generation_timestamp.
<ph type="x-smartling-placeholder">

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 derselben shard_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.
<ph type="x-smartling-placeholder">

Feeds fragmentieren

Lege für jede Datei (oder jeden Shard) die FeedMetadata auf den Folgendes:

  • processing_instructionfestgelegt auf PROCESS_AS_COMPLETE.
  • shard_number ist auf den aktuellen Shard des Feeds festgelegt (beginnend von 0 bis total_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:

  1. Legen Sie einen Uploadzeitplan fest und konfigurieren Sie jede Instanz des Inventars, den Zeitplan einhalten.
  2. 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.
  3. Entscheiden Sie sich für jeden geplanten Upload-Zeitpunkt generation_timestamp und nonce. Im FeedMetadata, 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)
  4. Nachdem alle Shards hochgeladen wurden, gruppiert Google sie über generation_timestamp und nonce.
<ph type="x-smartling-placeholder">

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"
        }
      ]
    }
  ]
}