我应该在每次 query/insert 之后 open/close 数据库连接吗?

Should I open/close database connection after every query/insert?

大家好,我最近几天使用 nodejs 开发了一个简单的应用程序,并将此函数创建到来自 mongodb

的 return 客户端实例
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;

我为访问数据层和 return 记录创建了这个简单的函数

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 集群(免费),但我想知道在使用 sql 像 postgres

这样的银行时是否也应该这样做

除非您要退出您的应用程序,否则不要关闭您的连接,然后确保您这样做了。确保您回来做更多事情时使用相同的连接 I/O。数据库连接是resource-intensive,应该尽量少建立,尽量共享。如果您不选择现有连接并出现连接池 运行 等奇怪错误,您也可能会遇到像 ODBC 这样的连接的中间件问题。了解您的连接器以及如何最有效地使用它,这将是有益的 activity :-)

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

  • 安装

    npm install mongoose

  • 用法

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

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

这样做是个好习惯。以便在每次操作(插入等)后关闭连接,并在每次操作(插入等)之前重新打开连接。