Nodejs Mongoose是如何管理与mongodb的连接的?是单一长连接,还是连接池啊?

Nodejs Mongoose是如何管理与mongodb的连接的?是单一长连接,还是连接池啊?

Mongoose是如何管理与mongodb的连接的?是单一长连接,还是连接池啊?

4 回复

Node.js Mongoose 如何管理与 MongoDB 的连接?

在 Node.js 中使用 Mongoose 连接 MongoDB 时,默认情况下,Mongoose 使用的是连接池而不是单一的长连接。连接池可以提高性能和资源利用率,因为它允许同时处理多个请求。

单一长连接 vs 连接池

  • 单一长连接:这种模式下,只有一个持久连接保持打开状态,用于处理所有请求。这种方式简单但效率较低。
  • 连接池:连接池是一种更高效的机制,它预先创建一组连接,并在需要时复用这些连接。这样可以减少建立新连接的时间,从而提高整体性能。

示例代码

下面是一个简单的示例代码,展示如何使用 Mongoose 创建一个连接到 MongoDB 的应用:

const mongoose = require('mongoose');

// 设置 Mongoose 连接选项
const options = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    autoIndex: false, // 不启用索引
    poolSize: 10,     // 连接池大小
    serverSelectionTimeoutMS: 5000, // 等待服务器选择的超时时间
    socketTimeoutMS: 45000,         // 连接超时时间
    family: 4                        // 使用 IPv4,忽略 IPv6
};

// 连接到 MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', options)
    .then(() => console.log('Connected to MongoDB'))
    .catch(err => console.error('Failed to connect to MongoDB', err));

// 监听连接错误
mongoose.connection.on('error', err => {
    console.error('MongoDB connection error:', err);
});

// 监听连接成功
mongoose.connection.on('open', () => {
    console.log('MongoDB connection opened');
});

解释

  • poolSize:设置连接池的大小,即同时可以维护的活动连接数量。
  • serverSelectionTimeoutMSsocketTimeoutMS:这些选项分别设置了等待服务器选择的超时时间和连接的超时时间,确保在连接失败时能够及时处理。
  • family:指定使用 IPv4 或 IPv6。

通过上述配置,Mongoose 将会使用连接池来管理与 MongoDB 的连接,从而提高应用程序的性能和稳定性。


下面内容在db.js里 var mongoose = require(‘mongoose’); mongoose.connect(‘mongodb://localhost/test’); exports.DB=momgoose; 那是不是意味着我n个controller就要require(’./DB’); 意思就是打开了N个mongodb链接?

require 不会重新加载, 缓存了. 一直都是一个mongodb连接

Mongoose 使用连接池来管理与 MongoDB 的连接。默认情况下,Mongoose 会创建一个连接池,以提高性能和效率。这意味着 Mongoose 不仅仅使用单一的长连接,而是维护一组连接以便于复用。

示例代码

const mongoose = require('mongoose');

// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    serverSelectionTimeoutMS: 5000, // 设置服务器选择超时时间(毫秒)
});

const db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function () {
    console.log('Connected to MongoDB');
});

解释

  • mongoose.connect() 方法用于连接 MongoDB 数据库。它接受一个 URI 字符串作为参数,并可传递选项对象以进行配置。
  • useNewUrlParser: trueuseUnifiedTopology: true 是为了确保使用最新的 URL 解析器和拓扑监控系统。
  • serverSelectionTimeoutMS 参数用于设置服务器选择的超时时间(以毫秒为单位)。
  • mongoose.connection 返回一个 MongoClient 实例,可以监听其事件(如错误和打开连接事件)来处理连接状态。

连接池配置

Mongoose 默认使用连接池,您可以通过传递特定选项来自定义连接池的行为。例如:

mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    poolSize: 10, // 连接池大小
    bufferMaxEntries: 0, // 禁用队列缓冲
});

在这个例子中,poolSize 设置了连接池的最大连接数为 10。您可以根据需要调整这些参数。

总之,Mongoose 默认使用连接池来管理与 MongoDB 的连接,从而提高性能和可靠性。

回到顶部