Кейс · Bitrix · импорт
Ежедневная выгрузка 80 000 товаров из CSV
Интернет-магазин «Офисная Служба»: 80 000 товаров и 9 000 разделов обновляются из CSV каждый день. Выгрузка идёт отдельным процессом и не мешает покупателям.
- товаров
- 80 000
- разделов
- 9 000
- полная выгрузка
- 45 мин
- цены и остатки
- 20 мин
О проекте
Общая информация
- Клиент
- «Офисная Служба» — канцтовары для офиса, Санкт-Петербург
- Сайт
- 3259404.ru
- Объём
- 80 000 товаров и 9 000 разделов
- Платформа
- Bitrix
- Стек
- Bitrix, PHP, MongoDB, CSV
- Частота
- Каталог — раз в день, цены и остатки — дважды в день
Задача
Каталог, который нужно обновлять каждый день
До проекта автоматической выгрузки не было вообще. Каталог на 80 000 товаров и 9 000 разделов нужно было обновлять из CSV ежедневно — вместе с ценами, остатками, скидками и свойствами, не останавливая магазин.
- Настроить выгрузку с нуля: раньше каталог обновлялся без автоматизации.
- Обновлять 80 000 товаров и 9 000 разделов раз в день, цены и остатки — дважды в день.
- Не блокировать сайт: загрузка не должна мешать посетителям оформлять заказы.
- Передавать изменения целиком: новые позиции, изменившиеся и исчезнувшие.
Как устроено
Пять этапов выгрузки
Нажмите на блок схемы или переключайтесь стрелками — покажу, что происходит на каждом этапе.
01 / 05
Шесть файлов в строгом порядке
Данные приходят набором CSV: разделы, свойства, теги ссылок, товары, цены и остатки, скидки. Следующий файл начинается только после завершения предыдущего.
- Порядок задан в конфигурации выгрузки.
- Если процесс остановился, он продолжается с места остановки.
Отдельный процесс
Выгрузка не выполняется внутри запроса посетителя: это отдельная задача, которая идёт параллельно с работой магазина.
- Сайт остаётся доступным, пока идёт загрузка.
- Во время выгрузки процессор загружен примерно на 40%.
Дельта в MongoDB
В MongoDB хранится дельта изменений: если товар не менялся, он не выгружается повторно.
- Обрабатывается только разница, а не весь каталог.
- Меньше работы — короче полная выгрузка.
Каталог в Bitrix
Товары и разделы обновляются в основном каталоге. Дублей нет: уникальность и целостность данных контролирует 1С.
- 80 000 товаров и 9 000 разделов.
- Новые позиции появляются, изменившиеся обновляются.
Цены и остатки
Цены и остатки живут в отдельном контуре и не перезаписывают инфоблок товаров. Обновляются дважды в день.
- После выгрузки агенты отключают разделы, товаров которых не было в файле.
- Полная выгрузка — около 45 минут, цены и остатки — около 20.
Порядок файлов
Строгая последовательность
Файлы идут в заданном порядке: каждый следующий шаг начинается только после завершения предыдущего.
- РазделыСтруктура каталога и вложенность разделов.
- СвойстваХарактеристики товаров для карточек и фильтров.
- Теги ссылокПривязки и теги, по которым товары собираются в подборки.
- ТоварыКарточки товаров и привязка к разделам.
- Цены и остаткиОтдельный контур: не перезаписывает основной инфоблок товаров.
- СкидкиАкционные правила и размер скидки.
Решения
Что оказалось важным
Три решения, без которых выгрузка на таком объёме либо роняла бы сайт, либо гоняла один и тот же каталог заново.
Отдельная задача
Выгрузка вынесена в отдельный процесс и не блокирует сайт: посетители продолжают работать с каталогом, пока идёт обновление. Во время выгрузки процессор загружен примерно на 40%.
Дельта в MongoDB
В MongoDB хранится дельта изменений: если товар не менялся, он не выгружается повторно. Это сокращает объём работы и время выгрузки.
Контроль на стороне 1С
Дублей нет: уникальность и целостность данных контролирует 1С, а выгрузка приходит уже согласованной.
Результат
Каталог под контролем
Ассортимент на сайте совпадает с выгрузкой: товары и разделы обновляются ежедневно, цены и остатки — дважды в день, а всё, чего нет в выгрузке, отключается автоматически.
Скорость
Полная выгрузка занимает около 45 минут, обновление цен и остатков — около 20 минут. И то и другое идёт в фоне и не останавливает магазин.
Управление ассортиментом
Каталогом можно управлять из выгрузки: новые позиции появляются, изменившиеся обновляются, исчезнувшие разделы отключаются.
Заказы
Выгрузка заказов — по событию
Заказы уходят не по расписанию, а в момент создания: событие фиксирует заказ целиком и выгружает его на сервер 1С со всей информацией по заказу.
Событие срабатывает при создании заказа в Bitrix, поэтому ждать ночной синхронизации не нужно.