iNeedHelp
@iNeedHelp

Нужен ли пул запросов?

Здравствуйте. Работаю с mongo-native-driver для Node.js. Вот так начинаю работу с БД:

const Db = require('mongodb').Db,
          MongoClient = require('mongodb').MongoClient,
          Server = require('mongodb').Server;

const db = new Db('users', new Server('localhost', 27017));
db.open(function(err, connect) {
  let users = connect.collection('users');
}


Далее я везде при любой манипуляции с БД использую эту переменную users. Собственно, вопросы:

1) по умолчанию у моей БД есть свойство poolSize = 5. Я правильно понимаю, что если одновременно пять пользователей пошлют запрос в БД, то всё будет хорошо, если больше, то будут проблемы? То есть предусмотрен стандартный пул запросов?

2) правильно ли запоминать переменную users, а потом везде её использовать? Или надо запоминать только переменную connect, а при каждом действии с БД выполнять connect.collection('users')?

всем спасибо за помощь
  • Вопрос задан
  • 997 просмотров
Решения вопроса 1
@napa3um
1) Пул коннектов фактически обозначает, сколько одновременно с данного инстанса ноды (в скрипте которого вы описываете подключение) может быть отправленно конкурентных (одновременных) запросов к базе данных. Но это число - не единственное ограничение, у самой монги есть настройка в конфиге, сколько она может принимать коннектов, плюс не все запросы могут обрабатываться одновременно (если претендуют на общие ресурсы - https://docs.mongodb.com/manual/faq/concurrency/ ). Плюс можно запускать несколько инстансов ноды в кластере (тогда размер пула, фактически, умножится на количество инстансов ноды - https://nodejs.org/api/cluster.html ). Потому полагаться на параллельность монги не принято, принято архитектурить приложение так, чтобы запросы пользователей не требовали от монги "мощных" операций ("мощные" операции обычно помещают в очередь, сразу "отпустив" клиента). Значение по-умолчанию 5 на инстанс ноды вполне годится для большинства случаев.

2) Если архитектура приложения позволяет - используйте закешированную в переменную ссылку на коллекцию для выполнения запросов. Это немного (незначительно) ускорит обращение к коллекции за счёт избегания нескольких простых проверок, а так же потенциально немного систематизирует код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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