Feeddateien fragmentieren

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- und generation_timestamp-Werten.

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 derselben shard_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

Du kannst den Ereignisfeed in Shards aufteilen, indem du eine einzelne JSON-Datei in separate JSON-Dateien mit nicht überlappenden Ereignissen aufteilst und die JSON-Datei mit dem Dateideskriptor mit der Liste der JSON-Dateinamen aktualisierst.

Empfohlen:Legen Sie für jede Datei (oder jeden Shard) den Dateinamen so fest, dass er den Feedtyp, den Zeitstempel und die Shard-Nummer angibt. Die Shards sollten ungefähr gleich groß sein und werden verarbeitet, sobald alle Shards hochgeladen wurden.

Beispiel für eine Sharded-Datenstruktur

Dateideskriptor – event.feeddata.v1_1728306001.filedescriptor.json

{
  "generation_timestamp": 1728306001,
  "name": "event.feeddata.v1",
  "data_file": [
    "event.feeddata.v1_1728306001_001.json",
    "event.feeddata.v1_1728306001_002.json"
  ]
}

Shard 0 – event.feeddata.v1_1728306001_001.json

{
  "data": [
    {
      "id": "event-1",
      ...
    },
    {
      "id": "event-2",
      ...
    }
  ]
}

Shard 1 – event.feeddata.v1_1728306001_002.json

{
  "data": [
    {
      "id": "event-3",
      ...
    },
    {
      "id": "event-4",
      ...
    }
  ]
}

Shards für von Partnern bereitgestelltes Inventar

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 Probleme bei der Abstimmung behoben werden, indem jeder Shard 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:

So sorgen Sie dafür, dass die Feeds ordnungsgemäß verarbeitet werden:

  1. Legen Sie einen Uploadzeitplan fest und konfigurieren Sie jede Inventarinstanz so, dass sie dem Zeitplan folgt.
  2. 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.
  3. Legen Sie für jeden geplanten Uploadzeitpunkt einen generation_timestamp fest. Legen Sie für alle Dateinamen dieselben Werte für diese beiden Felder fest und listen Sie alle erwarteten Dateinamen in der Deskriptordatei auf.
    • generation_timestamp muss aktuell oder in der jüngeren Vergangenheit liegen (idealerweise der Datenbankzeitstempel des Partners für das Lesen)
  4. Nachdem alle Shards hochgeladen wurden, gruppiert Google sie mithilfe von generation_timestamp und nonce.

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 identisch ist.