Каков размер пакета batchSize по умолчанию в pymongo?

Я использую pymongo для извлечения около 2M документов в одном запросе, каждый документ содержит только три строковых поля. запрос - это просто простая find(), без каких-либо ограничений() или batchSize().

При повторении курсора я заметил, что script ждет около 30-40 секунд после обработки около 25k документов.

Итак, я задаюсь вопросом, возвращает ли mongo все результаты 2M в одну партию? что такое batchSize() по умолчанию в pymongo?

Ответ 1

Курсор в MongoDB по умолчанию возвращает до 101 документа или достаточно, чтобы довести вас до 1 МБ. Вызывает итерацию через курсор после всплытия до 4 МБ. Количество возвращенных документов будет функцией того, насколько важны ваши документы:

Пакеты курсора

Сервер MongoDB возвращает результаты запроса пакетами. Размер партии не будет превышать максимальный размер документа BSON. Для большинства запросов первая партия возвращает 101 документ или достаточно документов, чтобы превысить 1 мегабайт. Последующий размер партии составляет 4 мегабайта. Чтобы переопределить размер пакета по умолчанию, см. раздел batchSize() и limit().

Для запросов, которые включают операцию сортировки без индекса, сервер необходимо загрузить все документы в памяти для выполнения сортировки и вернуть все документы в первую партию.

Когда вы перебираете курсор и доходите до конца возвращенного пакет, если есть больше результатов, cursor.next() будет выполнять getmore для получения следующей партии.

http://docs.mongodb.org/manual/core/cursors/

Вы можете использовать метод batch_size() в pymongo на курсоре, чтобы переопределить значение по умолчанию - однако он не будет превышать 16 МБ (максимальный размер документа BSON):

batch_size (batch_size)

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

Примечание

batch_size не может переопределить внутренние ограничения MongoDBs на количество данные будут возвращены клиенту в одной партии (т.е. если вы установите размер партии до 1 000 000 000, MongoDB в настоящее время будет возвращать только 4-16 МБ результатов за партию).

Повышает TypeError, если batch_size не является целым числом. Вызывает ValueError, если batch_size меньше 0. Увеличивает InvalidOperation, если этот Курсор имеет уже используется. Последний batch_size, примененный к этому курсору, принимает старшинство.      Параметры:

batch_size: размер каждой партии запрошенных результатов.

http://api.mongodb.org/python/current/api/pymongo/cursor.html