atis2345
@atis2345
PHP developer

Почему MongoDB очень медленно извлекает документы?

Всем привет.

Такая штука. Монго выполняет запрос очень быстро но вот обход данных foreach -ем занимает очень много времени. Измеряю время функцией microtime()
Результат вывода функции
microtime(true)
// 1464330248.2163
$MongoCollection = (new \MongoClient())->selectCollection('db', 'coll');
$MongoCursor     = $MongoCollection->find($where, $fields)->sort($sort)->limit(50)->skip($this->offset);
// 1464330248.2165

foreach($MongoCursor as $doc) {

}

// 1464330253.6667


Как видно на примере цикл длится аж три секунды. Это даже в том случае если в цикле ничего не происходит.
Иcпользую MongoDB v3.2.6
  • Вопрос задан
  • 665 просмотров
Решения вопроса 1
@lega
Монго выполняет запрос очень быстро но вот обход данных foreach -ем занимает очень много времени.

1) Запрос выполняется в момент когда вы начали тащить данные, а команда find просто готовит запрос.
2) Запрос работает медленно потому что у вас нет нужного индекса, и монга тут не причем, любая БД без индексов тормозит, т.к. сканируются и сортируются все данные в момент запроса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@spotifi
Ну для начала посмотри
https://docs.mongodb.com/manual/reference/method/d...

Во вторых - а зачем тебе курсоры? Они всегда были тормозным местом во всех СУБД по сравнению с прямыми запросами.

Их применение оправдано при хитрой-сложной обработке на сервере - чего в данном случае не наблюдается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы