В MongoDB открыто более одного соединения с использованием NodeJS и Mongoose - PullRequest
0 голосов
/ 28 августа 2018

Я новичок в Node и MongoDB, поэтому, пожалуйста, прости меня, если я звучу слишком наивно.

У меня есть класс БД, который создает соединение с MongoDB

db.service.js

const mongoose = require("mongoose");
const fs = require("fs");
const dbConfigs = JSON.parse(fs.readFileSync("/configs.json"));
const dbHost = dbConfigs.DB_HOST;
const dbName = dbConfigs.DB_NAME;
const dbPort = dbConfigs.DB_PORT;
const dbUrl = "mongodb://" + dbHost + ":" + dbPort + "/" + dbName;
const dbOptions = {
    useNewUrlParser: true
};

let dbConnection = mongoose.createConnection(dbUrl, dbOptions);
exports.getConnection = () => {
    if (dbConnection)
        return dbConnection;
}

exports.closeConnection = () => {
    if (dbConnection)
        return dbConnection.close();
}

Далее у меня есть другой модуль, который создает схему для MongoDB

schema.js

const connection = require("./db.service").getConnection();
const Schema = require("mongoose").Schema;

const SampleSchema = new Schema({...})

exports.Sample = connection.model("Sample", SampleSchema);

Тогда у меня есть другой модуль, который использует эту схему для сохранения объектов

logger.js

const Sample = require("./schema").Sample;

exports.log = () => {

let body = {....};
let sampleObj = new Sample(body);
return sampleObj.save(sampleObj);

Основной модуль

Main.js

const logger = require("./logger");

for (let i=0; i < 100; i++) {
    logger.log();
}

Когда я запускаю node Main.js, все сохраняется, но когда я проверяю MongoDB с помощью команды db.serverStatus.connections, я вижу 6 открытых соединений.

Я не знаю, как там дела. Я знаю, что команда mongo сама поддерживает соединение открытым, но откуда поступают остальные 5 соединений?

Я проверил это , что, по-видимому, говорит о том, что Mongoose открывает 5 соединений для приложения, но мое приложение запускает только одну транзакцию, где тогда нужно открывать 5 соединений? Разве это не может быть сделано только с одним?

1 Ответ

0 голосов
/ 28 августа 2018

Mongoose самостоятельно управляет соединениями; он пытается оптимизировать скорость запроса.

Вы видите, что используете только одну транзакцию, но за кулисами мангуст, вероятно, делает гораздо больше, чем вы ожидаете.


Вы можете изменить количество соединений, которые может открыть mongoose, используя параметр poolSize.


Пример :

const dbOptions = {
    useNewUrlParser: true,
    poolSize: 1,
};

Попробуйте с poolSize, равным 1, и посмотрите, сколько времени потребуется для выполнения вашей транзакции, у вас будет ответ.

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