根据您的商品目录,您可能需要进行分片(或将 Feed 拆分为多个文件)。
何时使用分片
1 个文件的 Feed 超过 200 MB(gzip 压缩后)。
- 示例:生成的可用性 Feed 为 1 GB。这应分片为 5 个以上的单独文件(或分片)。
合作伙伴广告资源分布在多个系统和/或地区,导致难以对广告资源进行对账。
- 示例:合作伙伴的美国和欧盟广告资源位于不同的系统中。该 Feed 可以使用 2 个文件(或分片)生成,1 个用于美国,1 个用于欧盟,并且具有相同的
nonce和generation_timestamp。
- 示例:合作伙伴的美国和欧盟广告资源位于不同的系统中。该 Feed 可以使用 2 个文件(或分片)生成,1 个用于美国,1 个用于欧盟,并且具有相同的
一般规则
- 对于 1 个文件,每个分片不得超过 200 MB(gzip 压缩后)。
- 我们建议每个 Feed 的分片数量不超过 20 个。如果您有业务理由需要超过此数量,请与支持团队联系,获取进一步的说明。
-
各个记录(例如一个
Merchant对象)必须在一个分片中发送,不能拆分到多个分片中。不过,在未来的 Feed 中,不必在具有相同shard_number的分片中发送记录。 - 为实现更好的性能,您应将数据平均分到各个分片,使所有分片文件的大小相近。
如何对 Feed 进行分片
对于每个文件(或分片),请将 FeedMetadata 设置为以下值:
processing_instruction设置为PROCESS_AS_COMPLETE。shard_number设为 Feed 的当前分片(从 0 开始,到total_shards- 1 无间断)total_shards设置为 Feed 的分片总数(从 1 开始)。nonce设置为一个唯一标识符,该标识符在同一 Feed 的所有分片中相同,但与其他 Feed 的值不同。nonce必须为正整数 (uint64)。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 得到正确处理:
- 确定上传时间表,并将每个商品目录实例配置为遵循该时间表。
- 为每个实例分配唯一的分片编号(例如,美国 = N,欧洲 = N + 1)。
将
total_shards设置为分片总数。 - 在每次安排的上传时间,确定
generation_timestamp和nonce。在FeedMetadata中,将所有实例设置为包含这两个字段的相同值。generation_timestamp应为当前时间或近期时间(最好是合作伙伴的数据库读取时间戳)
- 所有分片上传完毕后,Google 会通过
generation_timestamp和nonce对分片进行分组。
即使每个分片都代表合作伙伴商品目录的不同区域,并且可以在一天中的不同时间上传,只要所有分片的 generation_timestamp 相同,Google 也会将该 Feed 作为一个 Feed 进行处理。
按地区划分的已分片播出信息 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"
}
]
}
]
}