Эта статья была вдохновлена, когда я последовал вместе с MongoDB Performance Course, проводимым Университетом MongoDB. Курс дал мне глубокое понимание того, где я могу улучшить и как оптимизировать запросы в реальных производственных проектах.
В этой статье я поделюсь простым, распространенным, но практичным вариантом использования для повышения производительности MongoDB.
Прежде чем я начну, есть несколько инструментов, которые я буду использовать в этой статье:
Прежде чем я начну, я хочу сделать несколько заявлений об отказе от ответственности:
История начинается, когда я забронировал рейс в Корею в ноябре следующего года через AirAsia. Однако я должен был отменить рейс по личным причинам, и отмена должна была быть выполнена через AVA чатбот,
Для возврата средств требуется, чтобы пользователь предоставлял определенную информацию последовательно:
Я также предоставил скриншот ниже.
Теперь мы понимаем поток возврата и какую информацию он требует. Давайте разработаем и макет базы данных.
В этом разделе объясняется, как я подготавливаю модель базы данных и загружаю фиктивные данные в нашу коллекцию для оптимизации производительности на более позднем этапе. Если вы пришли из SQL-фона, коллекция может быть известна также по таблице.
Что мне нужно?
Без дальнейших церемоний, давайте погрузимся в шаг.
Шаг 1. Загрузите инструменты из библиотеки генерации данных. выпуск страница
Пожалуйста, загрузите библиотеку в соответствии с операционной системой вашей рабочей станции. Вы увидите исполняемый файл mgodatagen после извлечения. Скриншот предоставлен ниже.
Шаг 2. Создайте config.json
В соответствии с библиотекой генерации данных, существует некоторая обязательная конфигурация, которую мы должны указать, например, имя базы данных, имя коллекции, сколько документов вы хотите сгенерировать и т. Д.
Вот сутьconfig.json
который я создал на том же уровне каталога.
Суть в основном говорит нам:
Теперь у нас есть все настройки, давайте выполним генерацию данных. Для генерации данных нам просто нужно выполнить следующую команду.
./mgodatagen -f config.json
Потребовалосьconfig.json
мы определили ранее и сгенерировали данные. Ниже приведены скриншоты процесса генерации данных и результата успешной генерации данных.
Шаг 3. Проверьте генерацию данных
Теперь давайте проверим, что база данных и коллекция генерируются в вашей локальной MongoDB через Compass. Обратитесь к скриншоту ниже.
В этом разделе описывается, с какими проблемами производительности мы столкнулись. Мы должны знать, с какими проблемами производительности мы столкнулись, прежде чем оптимизировать производительность.
Давайте попробуем следующие сценарии:
Давайте посмотрим, что у них общего
Есть три ключевых момента, которые мы должны рассмотреть здесь для производительности MongoDB.
В этом разделе описывается, как мы улучшаем производительность запросов с помощью индексов.
Если у вас есть поток стандартных операционных процедур (SOP), то оптимизировать запрос к базе данных очень просто. Если ваш вариант использования тоже выглядит так, возможно, вы могли бы реализовать такое же решение, как и здесь.
В этом сценарии мы знали, что AirAsia всегда имеет следующий SOP, когда приходит в поток возврата. Они будут запрашивать информацию последовательно, а именно:
Шаг 1: Создать индекс для бронирования №.
Давайте создадим индекс для поля booking_no. Если ваш индекс включает только одно поле, мы называем это однополевый индекс, Создать индекс легко с помощью MongoDB Compass. Вы можете следовать пошаговой инструкции на скриншоте ниже.
Напишите имя индекса и настройте, какое поле является определением индекса. В этом случае мы настраиваем booking_noв качестве поля индекса. Порядок мы ставим в порядке возрастания первым
Готовы ли вы увидеть, насколько улучшается производительность запросов после этой простой конфигурации? (Ад да!)
Значительно улучшена производительность запросов благодаря простой настройке индексации.
Шаг 2. Создайте составной индекс, используя фамилию и имя
Теперь мы улучшили производительность запроса, если пытаемся сделать запрос, используя booking_no,Но предположим, что Служба поддержки сообщает, что большинство наших клиентов не могут вспомнить номер своего бронирования. Вместо этого они предлагают использовать имя клиента.
Если вы сейчас пытаетесь сделать запрос, используя поле фамилии, вы увидите следующий снимок экрана.
С какими проблемами мы сталкиваемся здесь?
Давайте попробуем создать составной индекс, чтобы решить проблемы, с которыми мы сталкиваемся.
Создание составного индекса так же просто, как и в случае индекса с одним полем. Все, что вам нужно сделать, это просто добавить еще одно поле в компас MongoDB. Вы можете следовать на скриншоте ниже.
Теперь наш составной индекс для имени создан. Давайте проверим производительность запроса.
Как показано на втором снимке экрана выше, мы смогли оптимизировать производительность запроса, близкую к 0 мс, используя в запросе как фамилию, так и имя.
Мы оптимизировали случай, когда запросы включают в себя:
Однако есть еще одна вещь, о которой следует быть осторожным. Если вы запрашиваете только имя, производительность не оптимизируется. Обратитесь к скриншоту ниже.
Это связано с тем, что составной индекс учитывает порядок полей при создании индекса. Мы ставим фамилию перед именем, когда создаем этот индекс.
Таким образом, фамилию всегда нужно указывать первой, если вы хотите использовать составной индекс, который вы только что создали.
Ключевым выводом из этой статьи является то, что производительность базы данных может быть легко улучшена, если вы понимаете поток бизнес-процессов В частности, в MongoDB мы можем улучшить производительность запросов, используя:
В MongoDB есть еще много разных типов индексов, но пока это все.
Приятной оптимизации и спасибо за чтение.