Интернет-гипермаркет

Описание проекта

Интернет-гипермаркет Shopium позволяет веб-магазинам загружать свои товары в общий каталог и обрабатывать заказы. Система получает информацию из большого количества интернет магазинов в автоматическом режиме. Удобный пользовательский интерфейс и интеграция с социальными сетями стремительно привлекает к системе новых клиентов, как среди интернет магазинов, так и среди покупателей.

Возможности

  • Автоматическая регулярная загрузка YML файлов товаров магазина
  • Богатые возможности для изменения настроек магазина и редактирования каталога магазина
  • Автоматическая привязка категорий и товаров магазина к категориям и товарам центрального каталога (ЦК)
  • Полнотекстовый поиск по названиям товаров
  • Сравнение нескольких товаров по параметрам, список желаний
  • Отображение оригинального каталога магазина, фильтр по категориям каталога магазина
  • Интеграция с социальными сетями (СС), логин через СС, кнопка like, share.
  • Возможность редактирования результатов автоматической привязки категорий магазинов к категориям ЦК

Технологии

  • Java, Grails
  • PostgreSQL

 

Интервью

Shopium: интервью с руководителем проекта

Исполнительный директор компании Анатолий Филин решил выяснить у руководителя проекта Shopium Ивана Вельдяксова – как эволюционировала и во что превратилась платформа за два года, и с чем пришлось столкнуться в процессе разработки системы.

Анатолий Филин: Добрый день, Иван! Давай поговорим о проекте Shopium (далее — также Шопиум), который с нашей помощью развивается и растет уже два года. Мы многому научились в процессе создания этой системы. Цель разговора – понять, что из себя представляет построенная нами платформа — как с точки зрения бизнес-функционала, так и с точки зрения технических деталей и каких-то проблем, с которыми мы встретились. Кроме того, хотелось бы какими-то крупными «мазками» набросать фичи, блоки, модули самой системы.

Сколько сейчас магазинов и товаров в системе Shopium?

Иван Вельдяксов: Восемьсот магазинов и порядка трех с половиной миллионов товаров (на 20/01/13 — ред.).

Анатолий: Отлично! Что является основным функционалом системы, каковы его основные типы клиентов? Для чего вообще создан Shopium?

Иван: У нас в системе два типа клиентов – это продавец, который хочет реализовывать свои товары, и размещать предложения о них на сайте Шопиума и — покупатель, основная «функция» которого – просмотр и покупка товара, оформление заказа.

Анатолий: То есть, фактически интернет-гипермаркет Shopium является гигантской витриной товаров. Для магазинов, он — дополнительный источник лидов и продаж. Правильно?

Иван: Да.

Анатолий: Получается, что, если мы рассматриваем модели B2B и B2C, то Shopium — это и не B2C и не B2C. B2C– это одиночный магазин. А B2B – это чистый business-to business, например дистрибьютор электроники. В случае Шопиума, мы имеем что-то вроде B2B2C. То есть, Shopium – это один бизнес, магазины – другой, а клиенты, то есть конечные покупатели – приходят как на Shopium, так и на товары конкретных магазинов.

Иван: Согласен. С точки зрения «общения» Шопиума с магазинами, это B2B. А когда отдельный магазин общается с покупателем – это B2C.

Анатолий: Хорошо. Какой у нас основной функционал и основные модели системы? То есть, что система умеет делать на данный момент?

Иван: Начнем с отдельного магазина или — «мерчанта» . Магазин может, во-первых, загружать свои товары и цены. Мы поддерживаем формат YML. YML — это формат описания товаров для Яндекс.Маркета; у нас — точно такой же, мы его читаем и загружаем товар в систему.

Понятно, что большая часть из пришедших к нам магазинов присутствует на Яндекс.Маркете, и поэтому владельцы магазинов эти YML-файлы умеют готовить, они отдают их Яндексу, и поэтому ничего не мешает им отдавать их, также и Шопиуму.

Есть понятие центрального каталога товаров. Все товары магазинов в идеале попадают в какую-либо категорию нашего центрального каталога. Пользователю это облегчает поиск товара.

И что еще из таких, самых главных функций? Есть возможность создавать товары вручную, обрабатывать заказы покупателей.

Для магазина, наверное, это — основные функции.

Для покупателя у нас есть система поиска, т.е. работает полнотекстовый поиск по всем товарам магазинов, и есть центральный каталог, который также облегчает поиск товаров. Есть список желаний, страница сравнения товара, есть понятие «карточка товара»; это — специальная сущность, которую редакторы создают руками заполняют характеристиками товара и вставляют в нее изображения. Это — сущность, которая группирует одинаковые предложения магазинов.

Еще есть функция оформления заказов, корзины. Т.е. для покупателя сайт гипермаркета Shopium похож на обычный веб-магазин. Только магазинов в данном случае — много.

Анатолий: Хорошо. Получается, что если мы говорим о ролях, то у нас – основная роль — это покупатель; кроме того, есть роли администраторов и редакторов, да?

Иван: Есть роли покупателя, администратора Шопиума, администратора магазина, и есть роль контент-менеджера. Контент-менеджер — это редактор, который создает карточки товаров, пишет статьи и новости. Всего получается — есть 4 роли.

Анатолий: Давай сначала осветим роль клиента, покупателя на сайте Shopim.

Иван: В системе Shopium клиент может создавать заказы, оставлять комментарии к магазинам и отзывы о товарах. Кроме того, он пишет комментарии к статьям и новостям, появляющимся на сайте. А также — ставит своеобразный рейтинг товарам и магазинам.

Анатолий: А если посмотреть на деятельность магазина и его администратора, то в чем она заключается? У магазина есть своя админка? Что может делать администратор магазина?

Иван: Во-первых, администратор магазина может менять настройки мерчанта, загружать его логотип, вводить реквизиты и настраивать свою собственную витрину, т.е. магазин, которым он руководит. Он может редактировать способы доставки, создавать товары вручную. Кроме того, он видит появившиеся заказы, обрабатывает их, меняет статус заказа, к примеру: Новый заказ» — «В обработке», «В обработке» — «Доставлен», «Оплачен» . Есть функция редактирования сопоставления своих категорий с категориями центрального каталога.

Анатолий: Про категории мы еще поговорим; это очень интересный момент. Скажи, а как происходит «добавление» товаров на сайт если смотреть на вещи реально? То есть, ты упомянул, что есть две возможности получить товары – это через загрузку файла, и ручным способом? На самом деле, кто-нибудь вообще использует ручной способ создания товаров? Или все — грузят файлы? Или, может быть, половина на половину?

Иван: Интересный вопрос. В реальной жизни оказалось, что функцию создания товаров вручную почти никто не использует; все «грузят» товары через YML. И более того, функция сопоставления категорий магазина с категориями центрального каталога – достаточно интересная и сложная, на которую было много времени потрачено, так вот – ей тоже никто не пользуется. Максимум, чего можно добиться от магазина, это то, что он регистрируется и вводит свой YML. Дальше — он про систему Shopium забывает. То есть, никто не заходит и не редактирует сопоставление своих категорий с категориями центрального каталога (ЦК). Почему – это другой вопрос.

Анатолий: Я думаю, что объяснение-то этому есть.

Иван: Пока что идет мало заказов в магазины с Шопиума, и их владельцы, соответственно, не заинтересованы в процессе редактирования соответствия своих категорий с категориями ЦК. Они не видят от этого реальной пользы.

Анатолий: Да, действительно, я думаю, что причина состоит в том, что владельцы магазинов, особенно небольших, всегда «перегружены»; многие из них сами принимают звонки, обрабатывают заказы, и так далее. То есть, в общем-то, они ни на что больше «не способны».

Для того, чтобы мы уже закрыли вопрос с YML – были ли какие-то проблемы с загрузкой файлов? Возникали ли какие-либо вопросы, связанные с нагрузками, или с чем-то еще?

Иван: С YML были определенные сложности.

Например, однажды к нам пришел книжный магазин, у которого было сто тысяч товаров. Появилась техническая проблема, состоящая в том, что мы изначально использовали xml парсер, который грузит сначала весь файл в оперативную память. Естественно, он сразу нам не подошел, потому что он завис, когда пришел большой файл на 100.000 товаров. Чтобы решить проблему, мы переделали имеющийся xml парсер на тот, который читает файл постепенно, и не грузит его целиком в память.

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

Анатолий: А что с точки зрения формата YML? Все работает так как описано?

Иван: Да.

Формат YML описан на сайте Yandex.ru в разделе «Техпомощь». Инструкцию мы брали оттуда. Единственное, было несколько интересных моментов: в описании формата YML, например, написано, что разделителем цены должна быть точка. Однако, допустим какой-то магазин присылает YML, где разделителем цены стоит запятая; с точки зрения указанного документа-инструкции на сайте «Яндекса», YML — не валидный. Но владелец магазина говорит, что на «Яндекс» у него все успешно загружается. В таком случае, нам приходилось подстраиваться под Яндекс, то есть мы проводили проверку файла, и точку меняли на запятую. «Яндекс» был для нас как бы аргументом – раз грузится на «Яндекс», значит, должно грузиться и у нас. И мы делали исправления.

Анатолий: Хорошо. Давай поговорим о том, как, собственно, происходит процесс оформления заказа; ведь Shopium это не просто Интернет-магазин, это гипермаркет, в него входит много мерчантов. Как этот факт влияет на создание заказа?

Иван: Я вижу два самых вероятных сценария, начинающихся в тот момент, когда клиент заходит на сайт Шопиума. Первый вариант — в строке «поиск» на сайте клиент вводит название товара — «iPhone», и попадает на страницу результатов поиска. На ней он сможет увидеть либо карточку ЦК, либо конкретное предложение магазина. Если он нажмет на карточку ЦК, он увидит наше описание с предложениями магазинов, и сможет выбрать самый дешевый. Если же он «нажмет» на конкретный магазин, он попадает, соответственно, на страницу мерчанта с описанием указанного товара. Везде, где отображено предложение магазина, есть кнопки «Положить в корзину», то есть, на Шопиуме присутствует стандартная функциональность веб-магазина.

Анатолий: А когда покупатель приобретает товар на Шопиуме, он видит, из какого конкретно он магазина, или для него каждый товар выглядит как товар Шопиума?

Иван: Покупатель видит магазин. На карточке с товаром всегда присутствует название магазина и его логотип, а также – телефон конкретного мерчанта. Когда покупатель «кладет» товар в корзину, все товары внутри корзины группируются в блоки одинаковых магазинов. Мы даем покупателю понять, что покупка идет не в Шопиуме, а именно в каком-то стороннем магазине.

Анатолий: Ты сказал, покупатель может выбрать самый дешевый товар. Насколько я помню, когда мы на начальных стадиях разработки системы обсуждали проект, речь шла как раз о том, что надо каким-то образом – не то чтобы избежать ценовой конкуренции, это, конечно, невозможно – но увеличить, по крайней мере, число параметров, по которым покупатель может выбирать. То есть, в некоторых случаях, он, возможно, выберет более дорогой продукт.

Иван: На карточках товаров в блоке, где перечислены предложения магазинов, они по умолчанию отсортированы не по цене. Сортировка выполнена при помощи алгоритма, который принимает во внимание несколько характеристик товара. В первую очередь, в алгоритме учитывается рейтинг магазина, потом регион, затем — количество уже сделанных заказов и т.п. Как видите, цена товара у нас сейчас не является первым приоритетом. Когда мы ищем товары в глобальном полнотекстовом поиске, то они по умолчанию тоже отсортированы этим алгоритмом. Конечно, возможность отсортировать товары только по цене остается.

Анатолий: Ты упомянул сортировку «по региону». То есть, у нас сейчас присутствует определенное сопоставление регионов покупателя и продавца?

Иван: Да. По IP-адресу определяется регион каждого пользователя, и по умолчанию регион отображается в заголовке сайта, например, Ваш регион — Москва. Клиент может поменять свой регион. У магазина также существует возможность задать регион в настройках. И, если магазин не из вашего региона, у него будет соответствующая пометка в интерфейсе.

Анатолий: Итак, покупатель, допустим, выбрал несколько товаров из разных магазинов и положил их в корзину. Что происходит дальше?

Иван: Дальше — он нажимает кнопку «Оформить заказ», выбирает способ доставки и вводит адрес. Затем – подтверждает заказ и ждет, когда приедет курьер; оплачивает и получает товар. Первоначально планировалось, что мы в Шопиуме будем объединять заказы от разных магазинов; т.е., курьер будет приезжать один раз от всех магазинов в рамках одного нашего заказа на Шопиуме. Но этого сделать нам не удалось по причине сложностей со службами доставки. Пока что, заказы разбиваются на отдельные части по каждому мерчанту, и к клиенту приезжают отдельно курьеры из каждого магазина.

Анатолий: Скажи, а существует ли у нас в системе определенный инструментдля обработки проблем с заказами, или же просто для их отслеживания?

Иван: Да, существует понятие «проблемный заказ». Проблемным мы считаем заказ, по которому не было реакции в течение одного дня. Реакция в данном случае – это перевод клиентом заказа в новый статус или написание по нему сообщения (жалобы). За этими процессами следит как раз администратор системы Shopium. У администратора есть специальная страница проблемных заказов и есть фильтры заказов. Инструментов много. Когда администратор системы видит, что заказ проблемный, он связывается с магазином и выясняет — почему он не обрабатывает заказ.

Есть возможность «пожаловаться» на заказ. Пользователь может в рамках своего заказа открыть специальное окошко и написать администратору какое-либо сообщение. Администратор видит жалобы и связывается с конкретным магазином.

Прямой связи «пользователь – администратор магазина» в Шопиуме нет. Общение происходит через администратора системы Shopium. Он отправляет полученное от пользователя сообщение в конкретный магазин. Когда владелец магазина отвечает на сообщение, он отвечает, прежде всего, администратору Шопиума, а тот уже полученное сообщение ретранслирует пользователю.

Интересный момент, связанный с заказами: многие магазины, получая заказы от Шопиума, забывают менять статус заказа в административной панели магазина на нашем сайте, т.е. не используют функционал обработки заказов на нашем сайте. Когда они получают заказ от Шопиума, они начинают его обрабатывать в своих бизнес-процессах, в обход платформы. Это — серьезная проблема, и администраторам системы Shopium приходится напоминать мерчантам о необходимости обработки заказа (перевода его в актуальный статус) в нашей системе.

Для упрощения обработки заказа администратором магазина была сделана функция обработки заказа из специального письма (рассылка), приходящего магазину в момент создания заказа. Когда пользователь создает заказ, магазину автоматически присылается письмо. И для того, чтобы администратору магазина было совсем удобно обновлять статус заказа, в этом письме мы создали табличку со сменами статуса. Можно поменять статус заказа нажав на ссылку нужного статуса в этой таблице.

Анатолий: Это действительно удобно.

Очевидно, что у каждого магазина есть свои бизнес-процессы — какие-то лучше, какие-то — хуже. Сложно автоматически перейти на новую систему.

Хорошо, с покупателем все понятно. Теперь я хочу узнать — какие возможности есть у администратора самой платформы? То есть — что он видит, когда входит в систему? Какие инструменты у него имеются?

Иван: У администратора есть большая административная панель со множеством страниц.

По порядку:

Администратор видит все карточки центрального каталога (ЦК), может их смотреть и редактировать; также — одобрять карточки, которые редактировал конкретный контент-менеджер.

Администратор видит дерево центрального каталога и может его редактировать – изменять название категории, добавлять дочерние категории, менять это дерево любым образом.

Администратор видит все заказы, и среди них — проблемные заказы.

Администратор видит список магазинов. Он может «забанить» магазин, может посмотреть на заказы магазина.

Он может также войти в админку магазина под лицом администратора этого магазина. Это — очень удобная функция, ведь бывают ситуации, когда магазин не может разобраться в какой то ситуации в своей админке, в данном случае удобство заключается в том, что наш администратор может посмотреть на административный интерфейс магазина глазами администратора этого магазина.

У администратора есть функции обработки жалоб, уже упомянутой переписки между клиентом и конкретным магазином, он модерирует комментарии к статьям и к новостям. Еще администратор видит общий список пользователей системы.

Недавно мы сделали фичу, состоящую в том, что администратор создает рекламные блоки с товарами. Кроме того, он может создавать рассылки с рекламой по покупателям Шопиума.

Анатолий: Отслеживается ли администратором общая статистика по системе?

Иван: На главной странице админки есть статистика по всем заказам – сколько новых, сколько проблемных, сколько выполненных; есть общая сумма по заказам.

Анатолий: Хочу спросить про SEO .

Изначально на Шопиуме предполагался широкий функционал SEO, позволяющий удобно и недорого оптимизировать сайт. Поскольку основная функция Шопиума – это витрина для покупателей, то и SEO в системе должно быть организовано правильно.

Иван: SEO у нас занималась специальная сторонняя компания. В результате их работы появился SEO-отчет. Что было в этом отчете?

Рекомендации о мета-тегах. На каждую страницу с контентом (с описанием товара, страницу статьи, новости) нужно было добавить некоторые мета-теги: тег Keywords, Description и Title . В отчете были даны рекомендации — как заполнять теги, с помощью каких ключевых слов. Причем, если для главной страницы Шопиума этот был текст фиксированным, т.е. статический –«Shopium.ru: купить товары, сравнение цен в интернет-магазинах, отзывы» – то для товаров этот текст динамический – в тексте должны быть название товара и слова из описания.

Вторая рекомендация состояла в оформлении ссылок на страницы системы. Раньше ссылка на страницу просмотра сущности (товара, новости, статьи, категории) имела следующий вид – адрес и параметр — цифровой id сущности. 99% веб-магазинов были устроены когда-то подобным образом. Сейчас существует тенденция, что ссылки должны быть текстовыми. То есть, не «…/product/25080», а «…/product/i-Phone-4G» , например.

В конце концов, мы все имеющиеся в системе ссылки сделали текстовыми.

Еще одна фича, связанная с SEO, заключалась в том, что мы сделали возможность выгружать все наши товары в xml для всех сторонних систем и рекламных площадок .

Анатолий: А есть ли в административной панели инструменты, чтобы подредактировать, «подтюнить» SEO?

Иван: В админке можно редактировать мета-теги. Кроме того, есть возможности вычислять их по названию и описанию товаров автоматическим алгоритмом. А можно просто задать свои значения. Если кто-то вдруг придумает «супер-мета-тег» для определенного товара, его значение можно в любой момент ввести, и на странице товара отобразится этот мета-тег.

Анатолий: Итак, мы поговорили про глобальную админку системы Shopium. Мы что-то упустили из функционала?

Иван: Я могу сказать пару слов про административную панель контент-менеджера – она представляет собой подмножество админки главного администратора Шопиума. В ней контент-менеджер создает все то, что связано с контентом: статьи, новости, карточки ЦК. Присутствует редактор текста типа «WYSIWYG». Однако, изменения внесенные контент-менеджером, мгновенно не применяются, их должен утвердить администратор системы.

Анатолий: Давай пройдемся по сложным местам системы Shopium. Понятно, что любая веб-система имеет достаточно большую «надводную» часть, видимую конечным пользователям, в нашем случае – покупателям, или бизнес-пользователям. Это – администраторская панель и пользовательский интерфейс. «Под ватерлинией» находится база данных, и среднее звено (mid-tier), функционал которого обычно не слишком велик, особенно в случае интернет-магазина.

Однако, в веб-системах обычно есть некоторые сложные компоненты, продумывание, разработка, тестирование и оптимизация которых отнимает много времени и усилий. Были ли такие компоненты в системе Shopium?

Однако, в веб-системах есть некоторые сложные моменты, разработка, тестирование и оптимизация которых отнимает много времени и усилий. Были ли такие моменты на проекте Shopium?

Иван: Самая интересная и сложная задача на нашем проекте заключалась в матчинге (сопоставлении) категорий магазинов с категориями центрального каталога . К примеру, чтобы конкретные часы из категории «Часы» отдельного магазина попали в либо в категорию «Часы» центрального каталога, либо в какую-либо подходящую категорию, например – в «Подарки для мужчин».

Анатолий: Возможно, не всем понятно, что категории магазинов отличаются от категорий нашего центрального каталога. Этот момент – важный, и его стоит осветить, т.к. я думаю, что его не все понимают. Дерево категорий в каждом магазине совершенно произвольно и оно строится в соответствии с его товарами, бизнесом и брендом.

Иван: У магазинов обычно узкая специализация. Например, он торгует только автомобильными дисками. У него будут категории: «Диски 18-ти», «Диски 17-ти», «Диски 16-ти дюймов», или даже «НОВИНКИ», потому что магазину удобно товар таким образом распределять.

А в Шопиуме, естественно, такого подробного деления нет. У нас все указанные товары соответствуют ЦК «Шины и диски». Возникает несоответствие. Как предполагалось этот вопрос решать?

Во-первых, есть ручной инструмент сопоставления, на самый последний случай, которым, правда, все ленятся пользоваться.

Во-вторых – есть автоматический алгоритм сопоставления. Первая версия алгоритма работала по названиям категорий. Если в магазине была категория «Диски», и в ЦК системы Shopium была категория «Диски», алгоритм эти категории сопоставлял.

Но такой подход оказался не самый лучшим, ведь очень редко бывает, что названия категорий в произвольном магазине и в ЦК Шопиума совпадают слово в слово. Столкнувшись с указанной проблемой, мы попытались сделать неточное совпадение. Есть алгоритмы похожести строк, показывающие, что одна строка похожа на другую на столько-то процентов. Мы пробовали подключить указанные алгоритмы, но с ними возникла новая проблема — получилось много ложных срабатываний. Например – «часы» и «трусы». Слова — похожие по названию, и мы матчили их с точки зрения алгоритма, однако по смыслу они очень сильно различаются.

Дальше, мы внедрили алгоритм матчинга категорий «по ключевикам» . Как это работало? В каждой категории ЦК находилось некоторое количество эталонных товаров, которые были сматчены правильно (вручную, или по автоматическому алгоритму совпадения со 100% совпадением). По этим товарам, мы сгенерировали облако ключевых слов. Из всех названий и описаний товаров мы выкинули окончания, оставили только корни слов и посчитали в каждой категории первые сто самых популярных ключевых слов.

И теперь, когда мы сопоставляем категорию магазина, мы берем «ключевики» товаров этой категории магазина и «ключевики» каждой категории ЦК. Дальше, мы по определенной формуле с весами мы сравниваем два набора «ключевиков». Если нашлись совпадения выше порогового значения, мы сопоставляем категорию магазина с категорией ЦК. Этот алгоритм дал гораздо лучшие результаты, чем предыдущие версии на основе сравнения только названий категорий.

Матчинг (сопоставление) категорий магазинов с категориями Центрального Каталога

Анатолий: Понятно, что когда поисковая компания, вроде Яндекса, решает задачи матчинга товаров, она наверняка использует весь инструментарий алгоритмов, наработанных для основного поисковика. У нас же было ограниченное время и ограниченные ресурсы, не сравнимые с ресурсами Яндекса. Все, что мы разрабатываем, делается в рамках какого-то достаточно небольшого бюджета. И все же, я считаю, нам удалось достигнуть неплохих результатов, когда я ищу на Шопиуме, я вижу не так много ошибок матчинга.

Скажи, а как был реализован момент с загрузкой изображений и запросов в системе Shopium?

Иван: Тут есть о чем рассказать. Когда мы начали загружать YML с товарами, сначала мы решили забирать все «картинки» из YML-файлов в момент загрузки. Этот процесс оказался слишком долгим; ведь если сайт магазина отдает, например, одну картинку в полсекунды, на скачивание YML-файла со ста тысячами товаров уйдет несколько недель. Тогда, при разборе YML мы стали грузить в описание товара не саму картинку, а только ее URL. А когда уже пользователь добирается до определенного товара на сайте Шопиума, мы смотрим – скачана ли картинка; если нет, то отдаем ссылку на ее скачивание и пользователь сам скачивает картинку в отдельном потоке браузера. Скачанная картинка остается у нас, и последующие обращения к этой же картинки получат результат с нашего сервера. Эта функция называется LazyLoad . Пользователи у нас таким образом сами прокачивают картинки, которые им интересны. При загрузке YML файлов при вставке новых товаров в базу вместо команды «Insert», которая работает неприемлемо долго на больших объемах данных, мы используем команду PostgreSQL Copy . КомандаCopy нужна как раз для вставки большого объема данных. Нам она сильно помогла.

Анатолий: А как на проекте Shopium реализована бизнес-логика для выбора товара из категорий?

Иван: Для выбора товаров из категории ЦК выполняется SQL запрос с join трех-четырех таблиц плюс около десяти критериев. С ростом числа товаров такие запросы стали выполняться очень долго, около 10-15 секунд. Как мы решили эту проблему? Мы стали создавать индексы и делать кэширование .

Анатолий: Понятно. А какие инструменты кэширования у нас используются на проекте?

Иван: Кэширование осуществляется с помощью библиотеки для фреймворка Grails .

Анатолий: То есть, никакие дополнительные сервера для кэширования не используются?

Иван: Нет, в оперативной памяти просто записывается результат выполнения функции. Когда перезагружается сервер, этот результат, естественно, стирается, но когда сервер заново стартует, кэш обновляется; + кеш обновляется по расписанию.

Анатолий: А как у нас реализован полнотекстовый поиск ? По базе товаров, описаниям, магазинам, да?

Иван: Да. Все, что используется в фильтрах поиска, т.е. рейтинг, наличие и цена – мы кладем в индекс полнотекстового поиска, чтобы результат позже можно было ограничить по указанным критериям.

Анатолий: Спасибо большое за интервью, Иван!

Было очень интересно.