Инструмент поиска на сайт с большой базой

156
22 мая 2019, 15:30

У меня есть сайт, который я написал на Yii2. Сайт использует очень большую базу данных. Есть таблицы по 100 млн строк и больше. При поиске используется много JOIN.

На сколько я смог - я оптимизировал базу. Но этой скорости все равно не хватает, сайт работает не совсем быстро.

Знаю и инструменте Sphinx, но не работал с ним, из-за этого не могу понять, подходит ли он для таких задач.

Может кто сталкивался с таким - подскажите в какую сторону смотреть.

P.S. База данных - MYSQL (innoDB). Если можно использовать какую то другую базу и можно быстро эту перевести и переписать запросы - буду благодарен за подсказку

Уточнения по вопросу:

размер базы примерно 250Gb

поиск по артикулях автозапчастей

запрос выполняется примерно 1-2 минуты

Answer 1

В процессе оптимизации никогда нету предела :). Проверьте по пунктам:

  • попробуйте денормализовать БД, чтобы избежать большого кол-ва джоинов
  • постройте составные индексы по постоянно фильтруемым полям
  • проверьте скорость диска на сервере, т.к. в работе с реляционными СУБД (прим. MySQL, Postgresql) SSD - это must have, это один из ключевых параметров в скорости БД в целом.
  • если к БД слишком много запросов на чтение и запись одновременно, добавьте отдельную реплику slave и выполняйте поиск только по данной реплике

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

READ ALSO
Как отрезать домен из строки

Как отрезать домен из строки

Надо получить test-url/other

160
Как пишутся сложные парсеры на php?

Как пишутся сложные парсеры на php?

Не является проблемой подменить заголовки, реферер, уникальный ип, куки

155
Запретить создание объектов вне класса

Запретить создание объектов вне класса

структура директории: libs - каталог indexphp - точка входа В каталоге libs лежит файл test

149
Как заполнить ассоциативный массив

Как заполнить ассоциативный массив

Подскажите как в PHP через foreach заполнить ассоциативный массив вида

168