Файлы фида фрагментов

В зависимости от вашего инвентаря может потребоваться сегментирование (или разбиение каналов на несколько файлов).

Когда использовать шардинг

  • Размер фида превышает 200 МБ на 1 файл (после сжатия gzip).

    • Пример: размер созданного канала доступности составляет 1 ГБ. Его следует разбить на 5+ отдельных файлов (или осколков).
  • Ресурсы партнеров распределены по системам и/или регионам, что затрудняет их сверку.

    • Пример. У партнера есть ресурсы в США и ЕС, которые находятся в разных системах. Фид может быть сгенерирован из двух файлов (или фрагментов): 1 для США и 1 для ЕС с одинаковыми номером nonce и generation_timestamp .

Общие правила

  • Размер каждого шарда не может превышать 200 МБ для 1 файла (после сжатия gzip).
  • Мы рекомендуем не более 20 шардов на фид. Если у вас есть деловое обоснование, требующее сумму, превышающую эту сумму, обратитесь в службу поддержки для получения дальнейших инструкций.
  • Отдельные записи (например, один объект Merchant ) должны отправляться в одном сегменте, их нельзя разделить на несколько сегментов. Однако их не обязательно отправлять в сегменте с тем же shard_number для будущих фидов.
  • Для повышения производительности ваши данные должны быть равномерно распределены по сегментам, чтобы все сегментированные файлы были одинаковыми по размеру.

Как сегментировать каналы

Вы можете сегментировать канал событий, разделив один JSON на отдельные файлы JSON с неперекрывающимися событиями и обновив дескриптор файла JSON списком имен файлов JSON.

Рекомендуется: для каждого файла (или сегмента) установите имя файла, чтобы указать тип канала, метку времени и номер сегмента. Осколки должны быть примерно одинакового размера и обрабатываются после загрузки всех осколков.

Шардированный пример

Дескриптор файла — 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",
      ...
    }
  ]
}

Осколки для партнерского распределенного инвентаря

Партнерам может быть сложно объединить инвентарь, распределенный по нескольким системам и/или регионам, в единый канал. Сегментирование можно использовать для решения проблем согласования, настраивая каждый сегмент в соответствии с набором инвентаря каждой распределенной системы.

Например, предположим, что инвентарь партнера разделен на два региона (инвентарь в США и ЕС), которые находятся в двух отдельных системах.

Партнер может разбить каждый фид на 2 файла (или осколка):

Чтобы обеспечить правильную обработку каналов, выполните следующие действия:

  1. Определите график загрузки и настройте каждый экземпляр инвентаря так, чтобы он следовал этому расписанию.
  2. Назначьте уникальные номера шардов для каждого экземпляра (например, US = N, EU = N + 1). Установите total_shards на общее количество осколков.
  3. Для каждого запланированного времени загрузки выберите параметр generation_timestamp . Установите для всех имен файлов одинаковые значения для этих двух полей и перечислите все ожидаемые имена файлов в файле дескриптора.
    • generation_timestamp должно быть текущим или недавним прошлым (в идеале — временная метка чтения базы данных партнера).
  4. После того, как все фрагменты загружены, Google группирует их, используя generation_timestamp и nonce .

Google будет обрабатывать фид как один, даже если каждый фрагмент представляет собой отдельный регион инвентаря партнера и может быть загружен в разное время суток, если параметр generation_timestamp одинаков для всех сегментов.