フィード ファイルのシャーディング

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

シャーディングを使用するタイミング

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

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

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

一般規則

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

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

ファイル(またはシャード)ごとに、FeedMetadata を次のように設定します。

  • processing_instructionPROCESS_AS_COMPLETE に設定します。
  • shard_number をフィードの現在のシャードに設定します(0 ~total_shards - 1(中断なし))。
  • フィードにシャードの総数が設定されている total_shards(1 から開始)。
  • nonce は、同じフィードのすべてのシャードで同一であるが、他のフィードの値と異なる一意の識別子に設定されている。
  • generation_timestamp は UNIX と EPOCH 形式のタイムスタンプです。これは、フィードのすべてのシャードで同じ値にする必要があります。

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

  • Example:“availability_feed_1574117613_001_of_002.json.gz”

シャーディングされた在庫状況のフィードの例

シャード 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"
        }
      ]
    }
  ]
}

シャード 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"
        }
      ]
    }
  ]
}

シャード 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"
        }
      ]
    }
  ]
}

パートナーの分散インベントリへのシャーディングの使用

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

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

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

  • 販売者フィード: 米国でシャード 1、EU で 1 つ
  • サービス フィード: 米国でシャード 1 個、EU で 1 個のシャード
  • 空き状況フィード: 米国でシャード 1 個、EU で 1 個のシャード

フィードが適切に処理されるようにする手順は次のとおりです。

  1. アップロード スケジュールを決定し、スケジュールに沿って広告枠の各インスタンスを構成します。
  2. インスタンスごとに一意のシャード番号を割り当てます(例: US = N、EU = N + 1)。total_shards をシャードの総数に設定します。
  3. スケジュール設定されたアップロードの時刻ごとに、generation_timestampnonce を決定します。FeedMetadata で、すべてのインスタンスがこの 2 つのフィールドに対して同じ値を保持するように設定します。
    • generation_timestamp は、現在または最近の日付(理想的には、パートナーの読み取り可能データベースのタイムスタンプ)です。
  4. すべてのシャードがアップロードされると、Google は generation_timestampnonce によってシャードをグループ化します。

各シャードは、パートナーの広告枠の異なる地域を表し、すべてのシャードで generation_timestamp が同一である限り、異なる時間帯にアップロードされますが、フィードは 1 つとして処理されます。

地域によるシャーディングされた在庫状況フィードの例

シャード 0 - 米国のインベントリ

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

シャード 1 - EU の在庫

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