Как ускорить получение результата от большой коллекции? - PullRequest
0 голосов
/ 23 января 2019

Я работаю с MongoDB и хочу отобразить последние 10 записей в коллекции, которые должны быть упорядочены по счету.Проблема в том, что существует около 2 миллионов записей, поэтому каждый запрос занимает 5-7 секунд.

Все работало довольно хорошо, когда база данных была меньше, но возникали проблемы с увеличением размера.Я проверил .explain('executionStats') и заметил, что в результате есть nReturened: 10 и totalDocsExamined: 1959933, что означает, что он проходит всю базу данных, чтобы вернуть последние 10 записей.(также totalKeysExamined: 0, если кому-то нужна эта информация)

Поисковый запрос выглядит следующим образом: db.logs.find({}).sort({"score":-1}).limit(10).toArray() Этапы запроса COLLSCAN, SORT_KEY_GENERATOR, SORT

Я знаю, что find({}) проходитвся БД, затем сортировка и получение последних 10 результатов.Но какой должен быть лучший способ ускорить процесс?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Создание индекса на {score: 1} очень поможет.Mongo определенно использует индекс для сортировки, если она доступна.После создания индекса вы должны увидеть этапы IXSCAN, FETCH и LIMIT.

0 голосов
/ 23 января 2019

Вам необходимо создать индекс по ключу, по которому вы выполняете поиск в mongodb.Индексирование поможет вам быстрее получать данные.

Использование: db.collection.createIndex(keys, options)

Для получения дополнительной информации, пожалуйста, прочитайте документ MongoDB create index

Надеюсь, что этопоможет.Удачи!

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