对 Feed 文件进行分片

根据您的商品目录,您可能需要进行分片(或将 Feed 拆分为多个文件)。

何时使用分片

  • 1 个文件的 Feed 超过 200 MB(gzip 压缩后)。

    • 示例:生成的可用性 Feed 为 1 GB。此数据应分片到 5 个以上的单独文件(或分片)。
  • 合作伙伴广告资源分布在多个系统和/或地区,导致难以对广告资源进行对账。

    • 示例:合作伙伴的美国和欧盟广告资源位于不同的系统中。该 Feed 可以使用 2 个文件(或分片)生成,1 个用于美国,1 个用于欧盟,并且具有相同的 noncegeneration_timestamp

一般规则

  • 对于 1 个文件,每个分片不得超过 200 MB(gzip 压缩后)。
  • 我们建议每个 Feed 的分片数量不超过 20 个。如果您有业务理由需要超过此数量,请与支持团队联系,获取进一步的说明。
  • 各个记录(例如一个 Merchant 对象)必须在一个分片中发送,不能拆分到多个分片中。不过,在未来的 Feed 中,不必在具有相同 shard_number 的分片中发送记录。
  • 为实现更好的性能,您应将数据平均分到各个分片,使所有分片文件的大小相近。

如何对 Feed 进行分片

您可以通过将单个 JSON 拆分为包含不重叠事件的单独 JSON 文件,并使用 JSON 文件名列表更新文件描述符 JSON,对事件 Feed 进行分片。

建议:对于每个文件(或分片),请设置文件名以指明 Feed 类型、时间戳和分片编号。分片的大小应大致相同,并且会在所有分片上传完后处理。

分片示例

文件描述符 - 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",
      ...
    }
  ]
}

合作伙伴分发的广告资源的分片

将分布在多个系统和/或区域的商品目录整合到单个 Feed 中可能并非易事。通过将每个分片设置为与每个分布式系统的广告资源集匹配,分片可用于解决协调问题。

例如,假设合作伙伴的商品目录分为 2 个区域(美国和欧盟商品目录),分别位于 2 个单独的系统中。

合作伙伴可以将每个 Feed 拆分为 2 个文件(或分片):

请按以下步骤操作,以确保 Feed 得到正确处理:

  1. 确定上传时间表,并将每个商品目录实例配置为遵循该时间表。
  2. 为每个实例分配唯一的分片编号(例如,美国 = N,欧洲 = N + 1)。 将 total_shards 设置为分片总数。
  3. 在每次安排的上传时间,确定一个 generation_timestamp。在 descriptor 文件中,将所有文件名设置为包含这两个字段的相同值,并在 descriptor 文件中列出所有预期文件名。
    • generation_timestamp 应为当前时间或最近的过去时间(最好是合作伙伴的数据库读取时间戳)
  4. 所有分片上传完毕后,Google 会使用 generation_timestampnonce 对分片进行分组。

即使每个分片都代表合作伙伴广告资源的不同区域,并且可能在一天中的不同时间上传,只要所有分片的 generation_timestamp 相同,Google 也会将 Feed 作为一个 Feed 进行处理。