За все свое время я делал разного рода сложности сайты на платформе Битрикс, но тут прилетела задача "Создать интернет магазин с 4,5 млн товарных позиций". Я подумал, еще раз подумал... Посмотрел что пишут люди о попытках загрузить в Битрикс свыше 1млн товаров. Все их попытки обвенчались провалом. И тут я натыкаюсь на статью 2013 года где пару разработчиков сделали новостной сайт со свыше 3млн новостных публикаций что-то вроде "онлайн газеты".
Та статья очень сильно меня подтолкнула.
Я принялся за работу, сделал верстку, натянул верстку на стандартные компоненты, проверил работу и вроде бы все было хорошо.
И так есть готовый шаблон, но нет товаров ну что - подумал я
буду писать скрипт который зальет все товары.
В этот же день я начал опробовать свой скрипт.
Запускаю и смотрю за какое время добавится первые 100 товаров.
На мое удивление среднее время добавления одного товара было 3 секунды
И тут я подался в расчеты 3*4,5млн=13500000 дальше я считать не стал т.к. понимал что это слишком долго.
Хорошо, докупили железа и теперь наш сервер имеет 32 гб оперативы + 2 SSD.
Далее переписываю скрипт используя ядро D7 и снова делаю. замер.
Теперь среднее время 0,5 сек. Я подумал это фиаско, но деваться некуда нужно очень быстро решить эту проблему чтобы загрузить товары хотя бы за 7 дней.
И так я начал убирать добавления свойств оставив только артикул и бренд и попробовал снова.
Ура!! Теперь я даже не стал считать т.к. 100 товаров добавились менее чем за 10 секунд.
Я запустил скрипт и пошел процесс загрузки...
Через пару дней все товары были загружены, осталось подгрузить характеристики, но тут я уже принял решение на свой страх и риск загрузить напрямую обращением в базу данных чего делать не желательно.
Написал скрипт, проверил, запустили через пару часов я уже начал тестировать как себя ведет битрикс.
В административную панель именно в сам каталог первое время было попасть затруднительно т.к. она грузилась минуты две, но потом все запросы стали кэшироваться и каталог в административной панели заработал хорошо.
Дальше я начал смотреть как ведет себя публичная версия.
К моему сожалению каждый раздел открывался за 5-6 минут без кэша.
Чтож делать? подумал я.
Благодаря панели битрикса я узнал где и какие запросы сильно нагружают сайт и тормозят открытие. Вся проблема была в объедении таблиц.
Переписал компонент catalog.section который как раз таки подготавливал этот очень долгий запрос в базу данных и после этого все страницы сайта начали открываться менее чем за 3 секунды с интернетом 1мбит/секунду. С высокоскоростным интернетом страницы открывались за 1 секунду.
Супер подумал я и включил супер-пупер умный фильтр битрикса.
Все, сайт снова стал медленным и тяжелым.
Ок, создаю фасетный индекс (он создавался 3 дня) и пробую снова.
Помогло, но не значительно. И так начинаю опять рыть исходные файлы. Наткнулся на интересную запись где перебираются все свойства и готовятся к выводу.
Нет подумал я. Так дело не пойдет. Начал кастомизировать умный фильтр битрикса. После этого сайт снова стал быстро работать.
К своему завершению хочу сказать. Если Вам разработчики говорят что на какой либо CMS не возможно вести несколько млн товарных позиций, то эти товарищи просто не умеют решать задачи с оптимизацией исходных кодов этой CMS.