Раздел 40 · Elasticsearch и ELK

ES против обычной БД и ClickHouse

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

У «Гонца» теперь три базы: PostgreSQL для заказов, ClickHouse для аналитики и Elasticsearch для поиска. Новички часто задают вопрос: зачем три, если Elasticsearch тоже хранит документы, тоже ищет и тоже считает агрегации? Нельзя ли держать всё в нём? Разберёмся, где проходят границы.

Что умеет каждая

PostgreSQLElasticsearchClickHouse
Главная работатранзакции приложенияпоиск по текстусводная аналитика
Поиск по словам с формами, опечатками и ранжированиемслабоотличнонет
Транзакции и ограниченияданетнет
Связи между таблицами (JOIN)дапочти нетда, с оговорками
Изменение отдельной записидёшеводорого: перезапись документадорого: перезапись части
Сводки по миллиардам строкмедленнохорошо, но дороже по памяти и дискулучше всех
Видимость записи сразудачерез refresh, около секундыда

Почему Elasticsearch не основная база

  • Нет транзакций. Записать заказ и списать бонусы одной транзакцией нельзя. _bulk не откатывается при ошибке, мы видели это в уроке про индексацию.
  • Почти реальное время. Записанный документ виден поиску не сразу. Для приложения, которое сразу после оплаты показывает статус заказа, это неудобно.
  • Нет связей. Связать блюдо и ресторан на лету, как JOIN, Elasticsearch не умеет. Вместо этого данные денормализуют: название ресторана копируют в каждое блюдо.
  • Схема на годы. Тип поля и число шардов не меняются без перестройки индекса.
  • Безопасность данных. Elasticsearch надёжен с репликами, но не задуман как единственный источник правды. Индекс обычно можно пересобрать из основной базы, и это хорошее свойство: если что-то сломалось, индекс просто строят заново.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.