Вступление(ленивым можно пропускать до следующего подзаголовка)

Я человек с не очень богатым опытом создания интернет магазинов: что-то около 10-15 штук. Чаще всего приходилось пользоваться уже готовыми решениями, кои перечислять здесь не буду, дабы не создавать рекламы.
Но вот внезапно возникла одна задача: нужно реализовать магазин с базой в 2-3 млн товаров, в перспективе, может, даже 5. После долгих размышлений было принято решение воспользоваться уже готовым решением — одной платной CMS. Сумма была уплачена, CMS развернули, начали лить туда товары, но тут возникла дилемма: эта CMS работает только с грубой структурой товаров и с ограниченным набором параметров во время загрузки. Стало очевидно, что нам необходимо переписывать загрузчик товаров в базу. Уже была дана отмашка, чтобы я начинал писать, но возникла идея протестировать эту CMS на стрессоустойчивость — посмотреть, как она будет работать на базе с 100 тысячами товаров. CMS себя проявила с худшей стороны, и стало понятно, что пришло время отказываться от нее и что необходимо вообще всё писать своими силами.
Отсюда один из главных выводов по разработке подобных магазинов:
НИКОГДА НЕ ПОЛЬЗУЙТЕСЬ ГОТОВЫМИ РЕШЕНИЯМИ!
Вопрос о том, что лучше использовать для разработки подобных проектов, я поднял в уютном чате
сообщества MODX в Беларуси. В процессе обсуждения мы пришли к мнению, что необходимо использовать NoSQL-базу для хранения товаров и их параметров. Послом MODX в Беларуси Иваном Климчуком
Alroniks было предложено решение, используемое во многих проектах, а именно Redis. Изучив эту систему, я столкнулся с одной из проблем, а именно: отсутствие удобного способа получения данных для фильтра — хотя, возможно, я плохо изучил вопрос. И после этого внезапно мне подсунули под нос такую вещь как ElasticSearch — о том, что это за зверь, я и решил написать цикл статей, в которых будут описаны общие принципы, т.е. чисто PHP и запросы к ElasticSearch, но, возможно, будут и некоторые особенности, т.к. я использовал REVO-ветку.
Краткое описание последующего цикла статей
Я опишу этот цикл с точки зрения использования его для создания Интернет-магазина.
- ElasticSearch — формирование базы товаров и общая информация по ElasticSearch (установка, настройка).
- Общая архитектура.
- Параметры и типы параметров.
- Прочее.
- Тонкости в формировании и парсинге файлов XML/CSV.
- Пример структуры файлов на CSV и ее разбор для записи в ElasticSearch.
- Пример структуры файла XML и его разбор для записи в ElasticSearch.
- Мои личные наработки для разбора больших файлов.
- ElasticSearch — выборка необходимых параметров товара.
- Выбираем все параметры для формирования фильтров.
- Выбираем необходимые параметры.
- Сортировка товаров и прочие обобщённые операции.
- Формирование категорий товаров на основе MODX и Wayfinder. Тонкости работы с многоуровневым каталогом.
- Пример моего опыта использования Ресурсов для формирования каталога.
- Особенности многоуровневого древа документов.
- Решение проблем многоуровневого древа.
- ElasticSearch — формирование поиска по всей базе.
- Хранение заказов на базе ElasticSearch, обновление/удаление. Подведение общего итога.
- Возможная статья: Особенность создания гибкого магазина с неограниченным количеством параметров.
p.s. Время написания последующих статей будет варьироваться от 7 до 10 дней, т.к. именно в данный момент происходит сдача в эксплуатацию этого сайта.