我应该在每次查询/插入后打开/关闭数据库连接吗



大家好,我在最近几天使用nodejs开发了一个简单的应用程序,并创建了这个函数来从mongodb 返回客户端实例

const mongodb = require("mongodb");
const { db } = require("../config/env");
const conection = async () => {
try {
const client = await mongodb.MongoClient.connect(db.uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
return client;
} catch (error) {
throw error;
}
};
module.exports = conection;

我为acess数据层制作了这个简单的函数,并在中返回记录

const index = async ({ limit = 10, offset = 0, filter = {} }) => {
const client = await conection();
if (filter._id) {
filter._id = mongodb.ObjectID(filter._id);
}
try {
const collection = client.db("api").collection("user");
const data = await collection
.find({ ...filter })
.skip(offset)
.limit(limit)
.toArray();
return data;
} catch (error) {
throw new Error(error);
} finally {
await client.close();
}
};

我想知道我是否真的需要建立连接并用每个查询关闭它,或者我应该保持连接打开

注意:在这种情况下,我使用的是一个简单的Atlas集群(免费(,但我想知道在使用postgres 等sql库时是否也应该这样做

除非退出应用程序,否则不要关闭连接,然后确保关闭。确保在返回执行更多I/O时使用相同的连接。数据库连接是资源密集型的,应尽可能少地建立并尽可能多地共享。如果您不选择现有的连接,并且出现连接池耗尽等奇怪错误,那么ODBC等连接也可能会出现中间件问题。了解您的连接器以及如何最有效地使用它,这将是一项有益的活动:-(

您可以使用mongoose模块来管理MongoDB。

  • 安装

    npm install mongoose

  • 使用

    mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true });
    

我相信Mongoose可以帮助您解决问题。

这样做是一种很好的做法。这样,在每次操作(插入etc(之后,您都会关闭连接,在每次执行操作(插入etc(之前,您会重新打开连接。

最新更新