В зависимости от объема ваших данных, может потребоваться сегментирование (или разбиение потоков на несколько файлов).
Когда использовать шардинг
Размер одного файла в ленте превышает 200 МБ (после сжатия gzip).
- Пример: Сгенерированный поток данных о доступности составляет 1 ГБ. Его следует разделить на 5 и более отдельных файлов (или сегментов).
Складские запасы партнеров распределены по различным системам и/или регионам, что затрудняет сверку данных о запасах.
- Пример: У партнера есть данные о наличии товаров в США и ЕС, которые хранятся в разных системах. Лента данных может быть сгенерирована из двух файлов (или сегментов): одного для США и одного для ЕС с одинаковым
nonceиgeneration_timestamp.
- Пример: У партнера есть данные о наличии товаров в США и ЕС, которые хранятся в разных системах. Лента данных может быть сгенерирована из двух файлов (или сегментов): одного для США и одного для ЕС с одинаковым
Общие правила
- Размер каждого сегмента не может превышать 200 МБ для одного файла (после сжатия gzip).
- Мы рекомендуем использовать не более 20 сегментов на один поток данных. Если для вашего бизнеса требуется большее количество, обратитесь в службу поддержки за дополнительными инструкциями.
- Отдельные записи (например, один объект
Merchant) должны отправляться в одном сегменте (шарде), их нельзя разделять на несколько сегментов. Однако для последующих потоков данных не обязательно отправлять их в сегменте с тем жеshard_number. - Для повышения производительности данные следует равномерно распределить между сегментами, чтобы все сегментированные файлы имели примерно одинаковый размер.
Как разделить ленты новостей на сегменты
Для каждого файла (или сегмента) установите для FeedMetadata следующее значение:
-
processing_instructionустановлен в значениеPROCESS_AS_COMPLETE. -
shard_numberустанавливается равным текущему сегменту ленты (от 0 доtotal_shards- 1 без разрывов). -
total_shardsустанавливается равным общему количеству шардов в ленте (начиная с 1). -
nonceустанавливается в уникальный идентификатор, который одинаков для всех сегментов одного и того же потока данных, но отличается от значения в других потоках. -
generation_timestamp— это метка времени в формате Unix и EPOCH. Она должна быть одинаковой для всех сегментов потока данных.
Рекомендуется: для каждого файла (или сегмента) укажите в имени файла тип ленты, метку времени, номер сегмента и общее количество сегментов. Размер сегментов должен быть примерно одинаковым, и они обрабатываются после загрузки всех сегментов.
-
Example:“availability_feed_1574117613_001_of_002.json.gz”
Пример ленты сегментированной доступности
Осколок 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"
}
]
}
]
}Использование сегментирования для распределенного инвентаря партнеров.
Для партнеров может быть непросто объединить данные об инвентаризации, распределенные по нескольким системам и/или регионам, в единый поток. Для решения проблем с согласованием можно использовать шардинг, настроив каждый шард таким образом, чтобы он соответствовал набору данных об инвентаризации каждой распределенной системы.
Например, предположим, что складские запасы партнера разделены на 2 региона (США и ЕС), которые хранятся в 2 отдельных системах.
Партнер может разбить каждый поток данных на 2 файла (или фрагмента):
- Лента данных для продавцов: 1 сегмент для США, 1 сегмент для ЕС.
- Канал сервисов: 1 сегмент для США, 1 сегмент для ЕС
- Информация о доступности: 1 сегмент для США, 1 сегмент для ЕС.
Выполните следующие действия, чтобы обеспечить надлежащую обработку кормов:
- Определите график загрузки данных и настройте каждый экземпляр инвентаризации в соответствии с этим графиком.
- Присвойте каждому экземпляру уникальные номера шардов (например, США = N, ЕС = N + 1). Установите
total_shardsравным общему количеству шардов. - При каждом запланированном времени загрузки задайте значение
generation_timestampиnonce. ВFeedMetadataустановите для всех экземпляров одинаковые значения для этих двух полей.-
generation_timestampдолжен быть текущим или недавно прошедшим (в идеале, это метка времени чтения из базы данных партнера).
-
- После загрузки всех фрагментов данных Google группирует их по параметрам
generation_timestampиnonce.
Google будет обрабатывать ленту как единое целое, даже если каждый сегмент представляет собой отдельный регион инвентаря партнера и может быть загружен в разное время суток, при условии, что значение generation_timestamp одинаково для всех сегментов.
Пример сегментированного потока доступности по регионам
Shard 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"
}
]
}
]
}Shard 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"
}
]
}
]
}