インベントリによっては、シャーディング(またはフィードを複数のファイルに分割)が必要になる場合があります。
シャーディングを使用するタイミング
フィードが 1 ファイルあたり 200 MB を超えています(gzip 圧縮後)。
- 例: 生成される在庫状況フィードが 1 GB の場合、5 つ以上のファイル(シャード)にシャーディングする必要があります。
パートナーのインベントリが複数のシステムやリージョンに分散されているため、インベントリの調整が困難です。
- 例: パートナーは、米国と EU の在庫が別々のシステムに存在しています。フィードは、
nonce
とgeneration_timestamp
が同じである 2 つのファイル(シャード)で生成できます。1 つは米国用、もう 1 つは EU 用です。
- 例: パートナーは、米国と EU の在庫が別々のシステムに存在しています。フィードは、
一般規則
- 各シャードは、1 ファイルあたり 200 MB を超えることはできません(gzip 圧縮後)。
- シャードはフィードあたり 20 個までにすることをおすすめします。この金額を超えるビジネス上の正当な理由がある場合は、サポートにお問い合わせください。
-
個々のレコード(たとえば 1 つの
Merchant
オブジェクト)は 1 つのシャードで送信する必要があります。複数のシャード間で分割することはできません。ただし、今後のフィードのために同じshard_number
を使用してシャードで送信する必要はありません。 - パフォーマンスを向上させるには、データをシャード間で均等に分割し、シャーディングされたすべてのファイルのサイズが類似するようにします。
フィードをシャーディングする方法
ファイル(またはシャード)ごとに、FeedMetadata
を次のように設定します。
processing_instruction
をPROCESS_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 個のシャード
次の手順に沿って、フィードが適切に処理されていることを確認します。
- アップロード スケジュールを決定し、そのスケジュールに合わせて広告枠の各インスタンスを設定します。
- インスタンスごとに一意のシャード番号を割り当てます(例: US = N、EU = N + 1)。
total_shards
をシャードの合計数に設定します。 - スケジュール設定したアップロード時間ごとに、
generation_timestamp
とnonce
を決定します。FeedMetadata
で、この 2 つのフィールドに同じ値を保持するようにすべてのインスタンスを設定します。generation_timestamp
は、現在または最近の過去である必要があります(理想的には、パートナーの読み取り時点のデータベース タイムスタンプ)。
- すべてのシャードがアップロードされると、Google は
generation_timestamp
とnonce
でシャードをグループ化します。
各シャードがパートナーのインベントリの異なるリージョンを表す場合でも、Google はフィードを 1 つとして処理します。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" } ] } ] }