Кейси / Database Optimization

Як ми прискорили пошук у великому обсязі даних за допомогою Elasticsearch

Як ми розв’язали проблему повільного пошуку у великому обсязі контенту: перенесення пошукових операцій на Elasticsearch та оптимізація архітектури проєкту.

Технології: Elasticsearch

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

У міру розвитку проєкту вбудований пошук почав відчутно сповільнюватися. Контенту ставало більше, а пошукові запити, як і раніше, обробляла основна база даних. Користувачі довше чекали на результати, і це вже заважало користуватися сайтом.

Потрібно було зберегти всю накопичену колекцію та повернути швидкий пошук. Тому ми зосередилися на тому, як застосунок знаходить інформацію і яку роботу при цьому виконує база.

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

Після розбору архітектури ми перенесли пошукові операції в Elasticsearch. Цей спеціалізований рушій працює з пошуковим індексом, а основна база продовжує зберігати й обробляти контент проєкту. Кожен компонент отримав своє завдання.

Раніше пошуковий запит потребував роботи безпосередньо з основною базою. У новій схемі пошук виконується за індексом Elasticsearch. Це зняло з бази пошукову роботу та дало застосунку інструмент, розрахований на великі обсяги індексованих даних.

Як змінилася архітектура
До
Застосунок
↓ Пошукові запити
Основна база даних
Після
Застосунок
↓
ElasticsearchПошуковий індекс
↔ Основна база даних

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

Результат: швидкий пошук навіть за великої кількості контенту

Після переходу пошук став швидшим на тому самому обсязі контенту. Користувачі могли швидше знаходити потрібну інформацію, а проєкту не довелося скорочувати колекцію чи обмежувати можливості пошуку заради продуктивності.

Що змінилося на практиці
  • Пошук виконується в Elasticsearch
  • Основна БД зберігає контент
  • Обсяг контенту не скорочували

У кейсі описано якісне покращення; виміри часу відповіді не опубліковані.

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

Висновок: для кожного завдання — відповідний інструмент

Для цього проєкту ключовим стало розділення зберігання контенту та пошуку. Основна база залишилася на своєму місці, а ресурсоємну функцію отримав окремий компонент. Так вдалося прибрати обмеження, яке проявилося зі зростанням колекції.

Перед розширенням сервера варто з’ясувати, які операції створюють навантаження. Якщо вузьке місце пов’язане з конкретною функцією застосунку, відповідний спеціалізований сервіс може змінити ситуацію без скорочення даних.

Ваш сайт повільно працює з великими обсягами даних?

Якщо пошук на вашому сайті сповільнюється разом зі зростанням контенту, почнемо з аналізу запитів та архітектури. З’ясуємо, куди витрачаються ресурси й чи варто виділяти пошук в окремий сервіс. Після цього можна обґрунтовано обирати рішення та інфраструктуру.

Схожі кейси

Database Optimization

Чому п’ять серверів не справлялися з навантаженням: як ми перебудували архітектуру баз даних

Як ми усунули перевантаження Galera Cluster: 8 ВМ на Proxmox, реплікація MySQL і кешування SELECT через ProxySQL без придбання нових серверів.