フィード ファイルをシャーディングする

在庫によっては、シャーディング(フィードを複数のファイルに分割)が必要になる場合があります。

シャーディングを使用する場合

  • 1 つのファイルでフィードが 200 MB を超える(gzip 圧縮後)。

    • 例: 生成された可用性フィードは 1 GB です。これは、5 つ以上の個別のファイル(またはシャード)にシャーディングする必要があります。
  • パートナーの広告枠がシステムやリージョンに分散しているため、広告枠の調整が困難です。

    • 例: パートナーが米国と EU の広告枠を別々のシステムに保持している場合。フィードは、2 つのファイル(またはシャード)で生成できます。1 つは米国用、もう 1 つは EU 用で、noncegeneration_timestamp は同じです。

一般規則

  • 各シャードのサイズは、1 ファイルあたり 200 MB(gzip 圧縮後)を超えてはなりません。
  • フィードあたりのシャード数は 20 個以下にすることをおすすめします。この金額を超える費用が必要なビジネス上の理由がある場合は、サポートにお問い合わせのうえ、詳細な手順をご確認ください。
  • 個々のレコード(1 つの Merchant オブジェクトなど)は 1 つのシャードで送信する必要があります。複数のシャードに分割することはできません。ただし、今後のフィードでは、同じ shard_number のシャードで送信する必要はありません。
  • パフォーマンスを向上させるには、シャード間でデータを均等に分割し、シャーディングしたすべてのファイルを同じくらいのサイズにする必要があります。

フィードをシャーディングする方法

イベントフィードをシャーディングするには、1 つの JSON を重複しないイベントを含む個別の JSON ファイルに分割し、ファイル記述子 JSON を JSON ファイル名のリストで更新します。

推奨: ファイル(またはシャード)ごとに、フィードタイプ、タイムスタンプ、シャード番号を示すファイル名を設定します。シャードのサイズはほぼ同じで、すべてのシャードがアップロードされると処理されます。

シャーディングされた例

ファイル記述子 - 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"
  ]
}

シャード 0 - event.feeddata.v1_1728306001_001.json

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

シャード 1 - event.feeddata.v1_1728306001_002.json

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

パートナーが配信する広告枠のシャーディング

複数のシステムやリージョンに分散された広告枠を 1 つのフィードに統合することは、パートナーにとって難しい場合があります。シャーディングを使用すると、各分散システムのインベントリセットと一致するように各シャードを設定することで、調整の問題を解決できます。

たとえば、パートナーの在庫が 2 つのリージョン(米国と EU の在庫)に分かれており、それぞれが 2 つのシステムに存在するとします。

パートナーは、各フィードを 2 つのファイル(シャード)に分割できます。

フィードが正しく処理されるようにするには、次の手順を行います。

  1. アップロード スケジュールを決定し、スケジュールに従うようにインベントリの各インスタンスを構成します。
  2. 各インスタンスに固有のシャード番号を割り当てます(例: US = N、EU = N + 1)。total_shards をシャードの合計数に設定します。
  3. スケジュール設定されたアップロード時間ごとに、generation_timestamp を決定します。これらの 2 つのフィールドに同じ値を保持するようにすべてのファイル名を設定し、デスクリプタ ファイルに想定されるすべてのファイル名を一覧表示します。
    • generation_timestamp は現在の日時または最近の過去の日時(理想的には、パートナーのデータベースの読み取りタイムスタンプ)にする必要があります。
  4. すべてのシャードがアップロードされると、Google は generation_timestampnonce を使用してシャードをグループ化します。

各シャードがパートナーの広告枠の異なる地域を表していても、generation_timestamp がすべてのシャードで同じであれば、Google はフィードを 1 つとして処理します。また、シャードごとにアップロード時間が異なる場合でも同じです。