Каким образом PHP-драйвер драйвера MongoDB буферизует набор результатов? - PullRequest
5 голосов
/ 05 мая 2011

Когда запросы выполняются к mongodb, как курсор работает с набором результатов в памяти?Получает ли курсор все документы, которые соответствуют запросу, одновременно?или он получает 1 документ за один раз?или они забуферены?или есть другое решение, о котором я не знаю?

Если это буферизованное решение, как они хранятся на сервере / клиенте?Сколько данных клиент хранит локально?

1 Ответ

5 голосов
/ 06 мая 2011

Протокол MongoDB содержит спецификации для размера пакета при выдаче запроса.

Основная предпосылка заключается в том, что драйвер клиента выдает запрос с флагом numberToReturn. Если запрос совпадает с numberToReturn, клиенту возвращается только это число.

Таким образом, сервер эффективно отправляет один «пакет» клиенту. Если клиент циклически проходит через весь пакет, он выдает запрос getmore и получает следующий пакет. Между тем, серверу не нужно загружать все результаты в память, достаточно только для удовлетворения запроса клиента.

Драйвер PHP абстрагирует большую часть этой сложности. Все, что вы делаете с драйвером, это запрашивает следующий элемент, и драйвер обрабатывает getmore, где это необходимо.

Что касается размера, вы получите меньший размер Max BSON или numberToReturn. Поэтому, если документы слишком большие, вы можете выбрать максимальный размер BSON, чтобы предотвратить отправку слишком большого количества данных одновременно.

Лучшее место для получения более подробной информации - фактический код .

...