MongoDB - медленные параллельные ответы и огромная разница в скорости для разных размеров ответов - PullRequest
0 голосов
/ 21 апреля 2019

Я пытался смоделировать реальный вариант использования, создав сотни обещаний запросить MongoDB с одинаковыми запросами (хотя и не реальными, поскольку запросы в реальном времени будут отличаться в одно и то же время), а затем запустить Promise.all. Я заметил 2 интересных поведения:

  1. Первый возврат может быть намного быстрее, чем последний (обычно вдвое больше, чем последний). Для этого блокирует ли MongoDB коллекцию, поэтому запросы должны были ждать в очереди?
  2. Если уменьшить размер возвращаемого значения с 40 до 1 поля, запрос будет выполняться в 10 раз быстрее.

Кто-нибудь может объяснить эти 2 поведения? Благодаря.

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Монго не ставит в очередь и не блокирует запросы.

попробуйте посмотреть на производительность вашей машины, Promise.all / map должен использоваться для повышения эффективности процесса, но вы явно ограничены доступностью вашего ЦП / ОЗУ, я подозреваю, что ответ на оба ваших вопроса лежит здесь.

вы должны попытаться найти наилучшее место с помощью Promise.map и {concurrency: x}, если запросы слишком тяжелые, я обнаружил, что моя машина не в состоянии обрабатывать сотни сложных запросов, находящихся в очереди одновременно время, однако, когда я распределил их с меньшим параллелизмом, я мог бы эффективно использовать доступность ОЗУ / ЦП без перегрузки.

1 голос
/ 21 апреля 2019

1) Я полагаю, что наиболее трудоемкой задачей является передача данных между MongoDB и NodeJS, и, поскольку это происходит через ограниченное количество сокетов, запросы будут помещаться в очередь в сети.

2) Потому что тогда нужно передавать меньше данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...