提问者:小点点

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


大家好,我在最后几天使用 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;

我用这个简单的函数访问数据层并返回记录

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库时是否也应该这样做


共3个答案

匿名用户

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

匿名用户

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

>

  • 安装

    npm安装猫鼬

    用法

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

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

  • 匿名用户

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