Скорость курсора PHP Mongo очень низкая - PullRequest
3 голосов
/ 11 февраля 2011

Этот код занимает ~ 0,1 с

// find
$benchmark = Profiler::start ('Testing', 'find()');
$cursor = MongoBG::getInstance ( )->setDatabase ('test')->setCollection ('testcoll')->find();
Profiler::stop ($benchmark);

$benchmark = Profiler::start ('Testing', 'cursor walk');
while ($cursor->hasNext()) {
    print_r($cursor->getNext());
}
Profiler::stop ($benchmark);

, поэтому «find ()» заняло всего 0,000017 секунд, но «перемещение курсора» 0,102812 секунд

Сбор составляет около 100 строк, скорость остаетсято же самое с 1000 или только 10 элементами в нем.

Некоторая информация о сервере: FreeBSD 8.1, PHP 5.3.5 с (mongo / 1.1.4), MongoDB версия 1.6.6-pre

1 Ответ

4 голосов
/ 11 февраля 2011

При таком быстром времени это звучит так, как будто find ничего не делал, только подготавливал объект (без связи с базой данных), и только при использовании курсора выполнялся фактический запрос и считывались результаты. Курсор выполняет работу, поэтому он медленнее.

Я знаю, что так работали драйверы mongodb для node.js. Если вы посмотрите на это так, скорость курсора неплоха для открытия соединения, аутентификации, отправки запроса, получения и буферизации ответа, а затем для анализа / загрузки его в объект, который вам возвращается.

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