您可能需要进行分片(或将 Feed 拆分为多个文件),具体取决于您的广告资源。
何时使用分片
1 个文件的 Feed 大小超过 200 MB(Gzip 压缩后)。
- 示例:生成的可用性 Feed 为 1 GB。应将其拆分为 5 个以上文件(或多个分片)。
合作伙伴广告资源会分布在系统和/或区域中,从而导致对帐难以进行。
- 示例:合作伙伴在美国和欧盟的广告资源位于不同的系统中。使用相同的
nonce
和generation_timestamp
时,可以生成 2 个文件(或分片)、1 个用于美国,1 个用于欧盟(1 个)。
- 示例:合作伙伴在美国和欧盟的广告资源位于不同的系统中。使用相同的
一般规则
- 1 个文件的每个分片不能超过 200 MB(Gzip 压缩后)。
- 我们建议每个 Feed 的分片不超过 20 个。如果您有业务理由需要超过该数量,请联系支持团队以获取进一步说明。
-
单条记录(例如一个
Merchant
对象)必须在一个分片中发送,而不能将其拆分为多个分片。但是,不必在将来的 Feed 中使用同一shard_number
在分片中发送这些 Feed。 - 为了改善性能,您应将数据平均分布在分片之间,这样所有分片文件的大小都相近。
如何将 Feed 分片
对于每个文件(或分片),请将 FeedMetadata
设置为以下内容:
processing_instruction
设置为PROCESS_AS_COMPLETE
。- 将
shard_number
设置为 Feed 的当前分片(从 0 到total_shards
- 1,不连续) - 将
total_shards
设置为 Feed 的分片总数(从 1 开始)。 - 将
nonce
设置为唯一标识符,即在同一 Feed 的所有分片中相同,但与其他 Feed 的值不同。 generation_timestamp
是 Unix 和 EPOCH 格式的时间戳。Feed 中的所有分片应该相同。
建议:为每个文件(或分片)设置文件名,以指明 Feed 类型、时间戳、分片编号和分片总数。分片应大致相同,会在所有分片上传后进行处理。
Example:
“availability_feed_1574117613_001_of_002.json.gz”
分片可用性 Feed 示例
分片 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" } ] } ] }
对合作伙伴分布式资产使用分片
对于合作伙伴来说,将分布在多个系统和/或区域中的广告资源整合到一个 Feed 中并非易事。分片可用于解决对帐方面的难题,方法是将每个分片设置为与每个分布式系统的广告资源集匹配。
例如,假设某个合作伙伴的广告资源分为 2 个独立的区域(美国和欧盟),这些区域位于 2 个独立的系统中。
合作伙伴可以将每个 Feed 拆分为 2 个文件(或分片):
- 商家 Feed:美国为 1 个分片,欧盟为 1 个分片
- 服务 Feed:美国为 1 个分片,欧盟为 1 个分片
- 库存状况 Feed:1 个分片(美国)和 1 个分片(欧盟)
为了确保 Feed 得到正确处理,请按以下步骤操作:
- 确定上传时间表,并根据该时间表配置每个产品目录实例。
- 为每个实例分配唯一分片编号(例如 US = N、EU = N + 1)。
将
total_shards
设置为分片总数。 - 在每个预定的上传时间,确定
generation_timestamp
和nonce
。在FeedMetadata
中,为所有实例设置这两个字段的相同值。generation_timestamp
必须是当前或最近(最好是合作伙伴的读取数据库时间戳)
- 上传所有分片后,Google 会通过
generation_timestamp
和nonce
对分片进行分组。
即使每个分片表示合作伙伴商品目录的不同区域,Google 也会将 Feed 视为一个 Feed,并且可以在一天中的不同时间上传,只要所有分片的 generation_timestamp
相同即可。
分片可用性 Feed 示例(按区域)
分片 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 - 欧盟广告资源
{ "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" } ] } ] }