Итерация по предопределенному курсору против генерации курсора в цикл [duplicate]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

11
задан shenzhi 4 August 2014 в 20:52
поделиться

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 не может переопределить внутренние ограничения MongoDB на количество данных, которое оно вернет клиенту в одной партии ( т.е. если вы установите размер партии до 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

17
ответ дан John Petrone 19 August 2018 в 02:27
поделиться
  • 1
    batch_size: The size of each batch of results requested. Размер партии, как в КБ, МБ или количестве документов? – akki 25 November 2016 в 13:57
  • 2
    @akki Количество документов. – quasarseeker 9 January 2017 в 20:13
Другие вопросы по тегам:

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