Как правильно построить индексы на MongoDB, когда каждое поле будет доступно для поиска и сортировки? - PullRequest
2 голосов
/ 22 октября 2019

Я разрабатываю коллекцию MongoDB, в которой будет 50 миллионов документов, и каждое поле в документе будет доступно для поиска и сортировки. Логики поиска и сортировки будут отправляться с внешнего интерфейса, поэтому может быть много полей поиска и комбинации сортировки. Я провел несколько тестов и пришел к выводу, что при поиске и сортировке только в индексированных полях запрос выполняется очень быстро, но при поиске или сортировке неиндексированных полей запрос выполняется очень медленно.

Учитывая, чтомного возможных комбинаций поиска / сортировки, как я могу построить индексы в этой коллекции, чтобы получить лучшую производительность?

1 Ответ

0 голосов
/ 22 октября 2019

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

Создание индексов легко и просто, однако вам нужно учитывать компромиссы, в большинстве случаев это обычно чтение-пишите соотношение полей в ваших документах.

Если вы часто читаете (или сортируете) документы из очень большой коллекции (например, 50 миллионов примеров, которые вы упомянули), имеет смысл добавить индексирование ко всемполя, которые вы используете для идентификации (или сортировки) ваших документов, вам просто нужно убедиться, что в БД не осталось свободного места в памяти. Не индексировать поля было бы очень сложно, просто представьте, что если вам нужно получить последний документ по полю, которое не проиндексировано, вам придется поискать 49 999 999 документов, чтобы найти его.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...