Курсор MongoDB в PHP, доставляет ли он все записи клиенту при выполнении запроса или одну за другой при итерации курсора? - PullRequest
3 голосов
/ 21 февраля 2012

Я хотел бы оптимизировать свои запросы с MongoDB, и мне было интересно, как работает клиентский протокол PHP с курсором, возвращаемым из запроса find (), доставляет ли он большие куски результатов на клиентскую сторону или извлекает один запись за раз из удаленной базы данных и возврат ее в приложение?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Драйвер PHP (и любой другой, с которым я столкнулся) извлекает результаты в зависимости от размера пакета. Вы также можете увидеть это, если вы выполните прямой запрос поиска в оболочке JS, в конце первых 20 возвращенных результатов он скажет что-то вроде «имеет больше». Вызов функции итерации (it) загрузит следующий пакет и т. Д.

В PHP размер пакета настраивается, вплоть до ограничения на общий размер возвращаемых данных и некоторые другие предостережения относительно ограничений и т. Д., Как описано здесь:

http://php.net/manual/en/mongocursor.batchsize.php

2 голосов
/ 21 февраля 2012

Эта страница http://uk3.php.net/manual/en/class.mongocursor.php намекает на то, что она последняя - что объект-курсор не загружает все данные за один раз.Однако я не вижу никакой опции, которая позволила бы вам «настроить» скорость, с которой он это делает.

0 голосов
/ 01 августа 2017

Это работает для меня .. для большего понимания проверьте эту ссылку .

$criteria = array( 'geo.loc' => array('$exists' => 1) );

$total    = $collection->count($criteria);

$response = $collection->find($criteria)->limit($total)->batchSize(100);

foreach($response as $value){
  $name = $value['name'];
}

Спасибо @ AdamComerford

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