MongoDB find: Оптимизация batchSize для запросов

Изменение размера страницы (batch size) влияет на взаимодействие клиента MongoDB с сервером. Рассмотрим это на примере.

Запрос find и размер пакета по умолчанию

Выполним запрос find:

db.cursor.find()

cursor — коллекция, содержащая 100 документов. Запрос возвращает 20 документов. Метод find по умолчанию возвращает курсор, итерация по которому осуществляется пакетами по 20 документов.

Анализ сетевого трафика с помощью Wireshark показывает, что несмотря на возврат 20 документов, сервер отправляет все 100 документов в одном TCP-сегменте. Это объясняется размером пакета по умолчанию (101 документ).

Изменение размера пакета с помощью pageSize

Изменим размер пакета методом pageSize:

db.cursor.find().pageSize(20)

Размер пакета установлен в 20 документов. Анализ сетевого трафика теперь показывает несколько TCP-сегментов меньшего размера. Документы возвращаются пакетами по 20, за исключением последнего пакета, содержащего оставшиеся 10 документов.

Анализ результатов

В первом случае (размер пакета по умолчанию 101) все 100 документов получены в одном пакете. Во втором (размер пакета 20) сделано четыре запроса, и документы получены в четырех пакетах. Размер итератора остался равен 20 документам.

Важные замечания

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

Пример демонстрирует влияние параметра batchSize (или pageSize) на взаимодействие клиента и сервера MongoDB при выполнении запроса find. Понимание этого механизма важно для оптимизации производительности.

Что будем искать? Например,программа