Изменение размера страницы (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. Понимание этого механизма важно для оптимизации производительности.