MongoDB skip () и limit () для сегментированного кластера - PullRequest
1 голос
/ 04 мая 2019

Если я выполняю следующий запрос на кластере с сегментированным mongodb, и запрос является типом разброса / сбора.

find({"product": "laptop"}).sort({"year": 1}).skip(15).limit(5)

Будут ли применены комбинации и SKIP + LIMITS (комбинация) к монго или к отдельным шардам (т. Е.mongod)?

или mongos отправляет ограничение (20) на каждый шард, т.е. сумму (skip + limit) для оптимизации запроса, а затем также применяет skip (15) .limit (5) к собранным результатам, прежде чем вернуться кклиент

1 Ответ

0 голосов
/ 04 мая 2019

Я думаю, что нашел ответ на ваши сомнения. Вы можете прочитать весь раздел документации здесь , но интересующая вас часть - это:

Как mongos обращается с модификаторами запросов

Сортировка

Если результат запроса не сортируется, экземпляр mongos открывает курсор результата, который «округляет Робинс »- результат всех курсоров на осколках.

Пределы

Если запрос ограничивает размер результирующего набора, используя limit() Метод курсора, экземпляр Mongos передает этот предел осколки, а затем повторно применяет ограничение на результат перед возвратом результат клиенту.

Кузов

Если в запросе указано количество записей, которые нужно пропустить, используя skip() метод курсора, mongos не может передать пропуск к осколкам, а скорее получает не пропущенные результаты от осколков и пропускает соответствующее количество документов при сборке готового результата.

При использовании вместе с limit(), mongos пройдет предел плюс значение skip() на осколки, чтобы улучшить эффективность этих операций.

Если вы беспокоитесь о производительности, лучшее, что вы можете сделать, это получить план запроса, используя explain. В этом же документе указано, что:

Для получения дополнительной информации о том, как работа агрегации распределяется между компоненты запроса кластерного кластера, используйте explain:true в качестве параметра на aggregation() вызов. Возвращение будет включать три объекта JSON. mergeType показывает, где происходит этап слияния («primaryShard», «AnyShard» или «монго»). splitPipeline показывает, какие операции в вашем трубопровод пробежал по отдельным осколкам. осколков показывает работу каждого осколок сделал.

...