对 Feed 文件进行分片

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

<ph type="x-smartling-placeholder">

何时使用分片

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

    • 示例:生成的库存状况 Feed 为 1 GB。此值应为 分片为 5 个以上单独的文件(或分片)。
  • 合作伙伴广告资源分布在多个系统和/或区域 因此难以对广告资源进行对账

    • 示例:合作伙伴在美国和欧盟广告资源分属不同的版本 系统。生成 Feed 时可使用 2 个文件(或分片),1 个用于美国, 针对欧盟,具有相同 noncegeneration_timestamp
。 <ph type="x-smartling-placeholder">

一般规则

  • 对于 1 个文件(经过 gzip 压缩后),每个分片不得超过 200 MB。
  • 我们建议每个 Feed 不要超过 20 个分片。如果您有正当的业务理由 要求超过该金额,请联系支持部门以获取进一步说明。
  • 每条记录(例如一个 Merchant 对象)必须在一个分片中发送, 它们不能拆分为多个分片。但是,也不一定要在分片中发送 并使用相同的shard_number
  • 为了获得更好的效果,您应该将数据平均分配给 以便所有分片文件的大小相近。
。 <ph type="x-smartling-placeholder">

如何将 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 得到正确处理:

  1. 确定上传时间表,并对每个清单实例进行配置, 遵循时间表
  2. 为每个实例分配唯一的分片编号(例如 US = N,EU = N + 1)。 将 total_shards 设置为分片的总数。
  3. 在每个预定的上传时间,决定 generation_timestampnonce。在 FeedMetadata,将所有实例都设置为保持相同的值 这两个字段中
    • generation_timestamp”应为当前或过去的时间 (理想情况下,应提供合作伙伴的读取数据库时间戳)
  4. 上传完所有分片后,Google 会通过以下方式对分片进行分组: generation_timestampnonce
。 <ph type="x-smartling-placeholder">

即使每个分片代表一个 Feed,Google 也会将其作为一个 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"
        }
      ]
    }
  ]
}