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, который перестал работать три дня назад, — классическая проблема. Настройте алерты на отсутствие свежего импорта.