Статьи

MongoLab представляет Dex, индексный бот


Приветствую искателей приключений!
MongoLab рада представить 
Dex ! Мы надеемся, что он поможет вам в ваших квестах.


Dex — это инструмент настройки производительности MongoDB, с открытым исходным кодом под лицензией MIT, который сравнивает зарегистрированные запросы с доступными индексами в запрашиваемой коллекции (коллекциях) и генерирует предложения по индексам на основе простого практического правила. Чтобы использовать Dex, вы указываете путь к файлу журнала MongoDB и URI соединения для вашей базы данных. Dex также зарегистрирован в PyPi , так что вы можете легко установить его с помощью pip.

Быстрый старт

pip install dex

ЗАТЕМ

dex -f mongodb.log mongodb://localhost

Dex предоставляет вывод времени выполнения в STDERR, поскольку находит рекомендации:

{
 
"index": "{'simpleIndexedField': 1, 'simpleUnindexedFieldThree': 1}",
 
"namespace": "dex_test.test_collection",
 
"shellCommand": "db.test_collection.ensureIndex(
  {'simpleIndexedField': 1, 'simpleUnindexedFieldThree': 1},
  {'background': true})"
 
}

А также сводная статистика:


Всего прочитано строк: 7
 

Разобраны строки запроса: 7
 

Уникальные рекомендации: 5
 

Линии, на которые влияют рекомендации: 5

Просто скопируйте и вставьте каждое значение shellCommand в оболочку MongoDB, чтобы создать предложенные индексы.

Декс также предоставляет полный анализ STDOUT, когда он завершен, поэтому вы увидите, что эта информация повторяется до выхода из Dex. Вывод в STDOUT является полностью JSON-версией вышеупомянутого, поэтому Dex может быть частью автоматизированной цепочки инструментов.

Для получения дополнительной информации ознакомьтесь с README.md и ознакомьтесь с исходным кодом по адресу  https://github.com/mongolab/dex . Или, если вы испытываете дополнительные приключения, возитесь с источником самостоятельно!

git clone https://github.com/mongolab/dex.git

Мотивация Dex

MongoLab управляет десятками тысяч баз данных MongoDB, повышая нашу чувствительность к медленным запросам и их влиянию на процессор. Что началось как наборОперативная эвристика была представлена ​​как автоматизированный инструмент. Например, «Создайте индексы с этим порядком:  сначала укажите точные значения. Сортировка полей следующая. Дальние поля после этого . Он очень хорошо сработал для нас, и мы надеемся, что он будет работать и для ваших собственных баз данных MongoDB, даже если вы никогда не размещаете его у нас. Мы продолжим улучшать Dex — смотрите дальнейшие указания ниже — и будем рады вашим отзывам, предложениям и запросам.

Как это работает

На высоком уровне Декс читает журнал MongoDB и выполняет три шага:

  1. Разобрать запрос
  2. Оценить существующие индексы по запросу
  3. Рекомендовать индекс (если необходимо)

Шаг 1: Разбор запроса

Каждый запрос анализируется во внутреннем представлении, которое классифицирует каждый термин запроса в одно из:

  • EQUIV — стандартная проверка эквивалентности; пример: {a: 1}
  • SORT — предложение sort / orderby; пример: .sort ({a: 1})
  • RANGE — проверка диапазона или набора: в
    частности: «$ ne», «$ gt», «$ lt», «$ gte», «$ lte», «$ in», «$ nin», «$ all», «не $»
  • НЕ ПОДДЕРЖИВАЕТСЯ

    • Композитный ($ and, $ or, $ nor)
    • Вложенные «операторы», не включенные в ДИАПАЗОН выше.

Шаг 2: Оценка существующих индексов по запросу 


Запрос оценивается по каждому индексу по двум критериям:
  • Покрытие (нет, частичное, полное) — менее детальное описание покрытых полей. Ничто не соответствует Полям, Покрытым 0 и указывает, что индекс не используется запросом. Полный означает, что количество покрытых полей равно количеству полей в запросе. Частичное описание любого значения поля, охватываемого значением между None и Full.
  • Порядок (идеальный или нет) — описывает, является ли индекс частично упорядоченным в соответствии с представлением Декса об идеальном порядке индекса. Это понятие порядка:
    Эквивалентность ○ Сортировка ○ Диапазон
    Это упорядочение представляет собой синтез традиционного подхода к индексированию и практического правила, разработанного во избежание дорогостоящих операций MongoDB scanAndOrderoperations при выполнении запросов с сортированным диапазоном. Примечание: геопространственные запросы и индексы не поддерживаются. Оценка индекса выполнена, но Dex не даст рекомендаций для геопространственных запросов. Анализ продолжается, но индекс больше не рассматривается для рекомендаций.

Шаг 3: Рекомендовать индекс (при необходимости)

Когда оценка завершена, Декс считает идеальный индекс таким, чтобы охват был «полным», а идеальный порядок — истинным. Если эти условия не выполняются, а сам запрос не содержит условий UNSUPPORTED, Декс рекомендует идеальный индекс (с порядком индекса 1 для всех полей).

Примечание: Dex на самом деле не нужно смотреть на существующие индексы, чтобы предложить идеальный индекс для данного запроса. Но Dex рассматривает существующие индексы как любезность для пользователей, у которых они уже есть — как для анализа частичных индексов (в подробном режиме), так и для того, чтобы не предлагать индексы, которые уже существуют.

Будущие направления

  • Анализаторы строк: лучший охват строк журнала с целью полного охвата всех индексируемых запросов.
  • Проанализируйте коллекцию system.profile с опцией -p
  • Ограничить анализ временным диапазоном с параметром -t
  • Добавьте собственный Dex «SLOW_MS», чтобы при желании сузить результаты
  • Поддержка геопространственных запросов
  • Улучшено кэширование рекомендаций, хранение запросов по маске и суммирование:

    • Количество похожих запросов
    • Время потрачено
    • Мин. / Макс. Временной диапазон
    • Мин. / Макс.
  • Улучшенные рекомендации:

    • Объединять похожие рекомендации (или генерировать рекомендации из нескольких похожих запросов)
    • Измерьте количество элементов (структура агрегации yay) в коллекции, чтобы указать рекомендуемый порядок ключей индекса.

Вывод

Мы очень рады Dex в MongoLab и с нетерпением ждем многих улучшений, которые возможны в области автоматизации MongoDB. Сегодня, 19 июня, я представляю Dex на июньской группе пользователей MongoDB в Сан-Франциско. Если вы можете сделать это в такой короткий срок, ознакомьтесь с подробностями  здесь . Мы свяжемся со ссылкой на слайды презентации через некоторое время.

Наконец, для тех, кто интересуется знаниями в области индексирования, которые мы накопили при создании Dex, посетите мой блог Cardinal $ ins  здесь .

Как всегда, удачи там!