Кейсы / Database Optimization

Как мы ускорили поиск по большому объёму данных с помощью Elasticsearch

Как мы решили проблему медленного поиска по большому объёму контента: перенос поисковых операций на Elasticsearch и оптимизация архитектуры проекта.

Технологии: Elasticsearch

Проблема: поиск перестал справляться с объёмом данных

По мере роста проекта встроенный поиск начал заметно замедляться. Контента становилось больше, а обработка поисковых запросов по-прежнему выполнялась в основной базе данных. Пользователи ждали выдачу всё дольше, и это уже мешало пользоваться сайтом.

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

Решение: перенос поисковых операций в Elasticsearch

После разбора архитектуры мы вынесли поисковые операции в Elasticsearch. Это специализированный движок: он работает с поисковым индексом, тогда как основная база продолжает хранить и обрабатывать контент проекта. У каждого компонента появилась своя задача.

Раньше поисковый запрос требовал работы непосредственно с основной базой. В новой схеме поиск выполняется по индексу Elasticsearch. Такое разделение сняло с базы поисковую работу и позволило использовать инструмент, рассчитанный на большой объём индексированных данных.

Как изменилась архитектура
До
Приложение
↓ Поисковые запросы
Основная база данных
После
Приложение
↓
ElasticsearchПоисковый индекс
↔ Основная база данных

Схема по материалам кейса. Это иллюстрация архитектуры, а не тест производительности.

Результат: быстрый поиск даже при большом количестве контента

После перехода поиск стал работать быстрее с тем же объёмом контента. Пользователи могли быстрее находить нужную информацию, а проекту не пришлось сокращать коллекцию данных или урезать поиск ради скорости.

Что изменилось на практике
  • Поиск выполняется в Elasticsearch
  • Основная БД хранит контент
  • Объём контента не сокращали

В кейсе описано качественное улучшение; замеры времени ответа не опубликованы.

Схема по материалам кейса. Это иллюстрация архитектуры, а не тест производительности.

Вывод: каждой задаче — подходящий инструмент

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

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

Ваш сайт медленно работает с большими объёмами данных?

Если поиск на вашем сайте замедляется вместе с ростом контента, начнём с разбора запросов и текущей архитектуры. Выясним, где тратятся ресурсы и имеет ли смысл выделять поиск в отдельный сервис. После этого можно обоснованно выбирать решение и инфраструктуру под него.

Похожие кейсы

Database Optimization

Почему пять серверов не справлялись с нагрузкой: как мы перестроили архитектуру баз данных

Как мы устранили перегрузку Galera Cluster: 8 виртуальных машин на Proxmox, репликация MySQL и кеширование SELECT через ProxySQL без новых серверов.