1. Назва відео
Elasticsearch (Elasticsearch): Deep Dive для System Design Інтерв’ю
2. Ключова тема
Системний дизайн
3. Мета відео
Навчити кандидатів використовувати Elasticsearch у відповідях на технічних співбесідах з системного дизайну (для Full-Stack, Product Architecture та Infrastructure інтерв’ю), а також дати глибоке розуміння внутрішньої архітектури Elasticsearch – від високорівневого API до роботи Lucene, щоб кандидат міг аргументовано обґрунтовувати вибір цього інструменту та відповідати на питання про його дизайн.
4. Основні концепції / кроки
-
Як використовувати Elasticsearch в інтерв’ю (частина 1)
- Ключові терміни: document (JSON-об'єкт), index (колекція документів), mapping (схема полів для пошуку), field (поле з типом:
textдля повнотекстового пошуку,keywordдля точних фільтрів,nestedдля вкладених об'єктів). - RESTful API: Створення індексу (
PUT /books), додавання документів (POST /books/_docз тілом), оновлення (повнеPUTз версіонуванням або часткове через_update). Особливість – optimistic concurrency control через номер версії. - Пошук: Використання
_searchз match, range, bool запитами. Можливість фільтрації та сортування (за полем, за релевантністю через_score). - Сортування та релевантність: Пояснення TF-IDF (Term Frequency – Inverse Document Frequency) як базового алгоритму для ранжування.
- Пагінація: Два підходи –
from/size(stateful, поганий на великій глибині) таsearch_after(статистично ефективніший, використовує точки відліку). ТакожPoint in Timeдля консистентності сторінок при змінах. - Практичні поради для інтерв’ю: Elasticsearch не є primary database – його варто використовувати разом з основною БД (PostgreSQL, DynamoDB) через Change Data Capture (CDC). Працює найкраще для read-heavy workloads, потребує denormalization (flatten даних), відсутність join-ів. Не використовуйте, якщо достатньо простого пошуку в наявній БД.
- Ключові терміни: document (JSON-об'єкт), index (колекція документів), mapping (схема полів для пошуку), field (поле з типом:
-
Внутрішня архітектура Elasticsearch (частина 2)
- Типи нод у кластері: Master-eligible (елекція одного master для адміністративних рішень), Coordinating (API-шлюз, розподіл запитів), Data (зберігання даних та виконання пошуку), Ingest (передобробка документів), Machine Learning (для ML-задач). Кожен тип потребує різних характеристик обладнання (CPU, RAM, disk I/O, мережа).
- Шарди та репліки: Shard – логічна частина індексу, яка містить документи (взаємовиключні). Replica – копія шарду для збільшення пропускної здатності на читання та відмовостійкості. Кожен шард – це один Lucene-індекс.
- Lucene сегменти: Документи додаються в імутабельні сегменти. Оновлення реалізується через soft delete (видалення зі старого сегмента + додавання в новий). Імутабельність дозволяє ефективне кешування та паралельне читання без блокувань.
- Інвертований індекс (Inverted Index): Словник "термін → список документів" для швидкого пошуку за текстом. Доповнюється токенізацією, стемінгом, фільтрацією стоп-слів.
- Doc Values: Колонкоподібне зберігання значень полів (наприклад, ціна, дата) для швидкого сортування та агрегації. Це альтернатива рядковому зберіганню (row-oriented) в SQL-базах.
- Планування запитів (Query Planning): Coordinating node аналізує статистику (наприклад, кількість документів, що містять слово "Bill" – 1 млн, "NY" – 1000) і обирає найефективніший план: почати з менш частого терміну, використати ідентифікатори замість повного тексту, щоб мінімізувати передачу даних.
- Повний флоу:
- Клієнт → Ingest node → Data node (створення документа, додавання в Lucene-сегмент).
- Клієнт → Coordinating node → аналіз запиту → план → Data nodes (паралельне виконання пошуку в шардах та сегментах) → часткові результати → Coordinating node → злиття → відповідь клієнту.
5. Висновки / Headline
Elasticsearch – це потужний інструмент для складного пошуку та аналітики в розподілених системах, але його використання в інтерв’ю вимагає чіткого розуміння компромісів: він не є заміною основної БД, потребує eventual consistency, денормалізації та оптимізації під read-heavy навантаження. Для інтерв’ю найголовніше – вміти аргументовано пояснити, коли Elasticsearch доречний (геопросторовий, векторний або складний повнотекстовий пошук на великому об’ємі даних), а також продемонструвати знання внутрішніх механізмів (інвертований індекс, сегменти Lucene, планування запитів), щоб показати глибину системного мислення.