Як ми прискорили пошук у великому обсязі даних за допомогою Elasticsearch
Як ми розв’язали проблему повільного пошуку у великому обсязі контенту: перенесення пошукових операцій на Elasticsearch та оптимізація архітектури проєкту.
Технології: Elasticsearch
Проблема: пошук перестав справлятися з обсягом даних
У міру розвитку проєкту вбудований пошук почав відчутно сповільнюватися. Контенту ставало більше, а пошукові запити, як і раніше, обробляла основна база даних. Користувачі довше чекали на результати, і це вже заважало користуватися сайтом.
Потрібно було зберегти всю накопичену колекцію та повернути швидкий пошук. Тому ми зосередилися на тому, як застосунок знаходить інформацію і яку роботу при цьому виконує база.
Рішення: перенесення пошукових операцій в Elasticsearch
Після розбору архітектури ми перенесли пошукові операції в Elasticsearch. Цей спеціалізований рушій працює з пошуковим індексом, а основна база продовжує зберігати й обробляти контент проєкту. Кожен компонент отримав своє завдання.
Раніше пошуковий запит потребував роботи безпосередньо з основною базою. У новій схемі пошук виконується за індексом Elasticsearch. Це зняло з бази пошукову роботу та дало застосунку інструмент, розрахований на великі обсяги індексованих даних.
Схема за матеріалами кейсу. Це ілюстрація архітектури, а не тест продуктивності.
Результат: швидкий пошук навіть за великої кількості контенту
Після переходу пошук став швидшим на тому самому обсязі контенту. Користувачі могли швидше знаходити потрібну інформацію, а проєкту не довелося скорочувати колекцію чи обмежувати можливості пошуку заради продуктивності.
- Пошук виконується в Elasticsearch
- Основна БД зберігає контент
- Обсяг контенту не скорочували
У кейсі описано якісне покращення; виміри часу відповіді не опубліковані.
Схема за матеріалами кейсу. Це ілюстрація архітектури, а не тест продуктивності.
Висновок: для кожного завдання — відповідний інструмент
Для цього проєкту ключовим стало розділення зберігання контенту та пошуку. Основна база залишилася на своєму місці, а ресурсоємну функцію отримав окремий компонент. Так вдалося прибрати обмеження, яке проявилося зі зростанням колекції.
Перед розширенням сервера варто з’ясувати, які операції створюють навантаження. Якщо вузьке місце пов’язане з конкретною функцією застосунку, відповідний спеціалізований сервіс може змінити ситуацію без скорочення даних.
Ваш сайт повільно працює з великими обсягами даних?
Якщо пошук на вашому сайті сповільнюється разом зі зростанням контенту, почнемо з аналізу запитів та архітектури. З’ясуємо, куди витрачаються ресурси й чи варто виділяти пошук в окремий сервіс. Після цього можна обґрунтовано обирати рішення та інфраструктуру.