Batch vs. потоковая передача

Две основные парадигмы обмена данными в интеграциях:

Параметр Batch-импорт Потоковая передача
Задержка актуализации Минуты–часы (зависит от расписания) Секунды
Нагрузка на систему Пиковая в момент загрузки Распределённая
Подходит для Исторические данные, каталог Поведенческие события в реальном времени
Обработка ошибок Проще — весь файл доступен для анализа Сложнее — события в потоке

Большинство интеграций платформ персонализации используют гибридный подход: batch для инициализации и обновления каталога, событийный API для поведенческих данных.

Типичная схема первоначального импорта

При запуске платформы персонализации последовательность обычно такая:

1. Batch: каталог товаров (все SKU с атрибутами, ценами, стоком)
2. Batch: история заказов за 6–12 месяцев
3. Batch: история просмотров за 1–3 месяца (если доступна)
4. Переключение: Event API начинает принимать события в реальном времени
5. Планировщик: инкрементальный batch каталога — ежедневно

Важно: история покупок — критически важный ввод для рекомендательных алгоритмов. Без исторических данных система «холодная» и первые несколько недель работает на менее точных стратегиях (popularity, trending).

Форматы файлов

CSV — наиболее распространён для каталогов:

sku,name,category,price,stock
ABC123,Кроссовки Nike,Спорт,4990,50

NDJSON — удобен для вложенных структур:

{"sku": "ABC123", "name": "Кроссовки Nike", "attributes": {"color": "white", "size": [40,41,42]}}
{"sku": "DEF456", "name": "Рюкзак Adidas", "attributes": {"color": "black"}}

Типичные ошибки

  • Отсутствие идемпотентности. Повторный запуск импорта не должен создавать дубликаты. Реализуйте upsert-логику по уникальному идентификатору (sku, order_id, user_id).
  • Слишком редкое обновление каталога. Если цены и остатки обновляются раз в сутки, а в реальности меняются чаще — рекомендации могут показывать недоступные товары.
  • Нет мониторинга загрузки. Молчащий cron-job, который перестал работать три дня назад, — классическая проблема. Настройте алерты на отсутствие свежего импорта.