gpt4 book ai didi

node.js - Node JS mongodb : use global connection or local connection

转载 作者:可可西里 更新时间:2023-11-01 09:30:16 26 4
gpt4 key购买 nike

我有一组 nodejs 脚本,可以对 mongodb 进行大量查询、插入和更新。我面临选择是使用全局数据库连接对象并将其传递给不同的函数,还是在每个函数中获取自己的数据库连接对象并在完成后将其关闭。

  • 全局数据库连接对象。 优点是连接只需要建立一次。通过节省连接数据库的时间,后续函数调用将再次享受性能。 问题 是很难确定何时关闭连接。我的脚本很复杂并且有几层函数调用。有些函数即使在回调函数被触发后也需要执行进一步的任务。 如果不关闭连接,父脚本将不知道何时退出

  • 在每个单独的函数中建立一个新的数据库连接对象。这种方法最大的担忧是性能。我测试了每个连接大约需要 60ms 才能建立。在所有函数调用中添加它可能会导致性能大幅下降。

我倾向于第一种方法,但需要找出一种方法让父脚本在完成所有任务后退出。

添加伪代码来说明我的脚本高级结构。

//db is a global connection object. 
function entry_point(db) {
task1(db, callback){
loop {
sub_task(db, callback2){
dosomething
callback2
dosomeotherthings
}
callback
}
dosomethingagain
}

task2(db, callbac) //Similar call trees, maybe with more levels.
task3....
....
}

最佳答案

您可以使用 async运行您的异步作业...最后关闭全局 mongodb 连接。例如:

async.auto( {
'mongo': [ function( callback ) {
/// initiate mongodb and call: callback( null );
} ],
'task1': [ 'mongo', function( callback ) {
// this task wait for 'mongo' to be initiated
// run your functions/code and call: callback( null );
} ],
'task2': [ 'mongo', function( callback ) {
/// same as task1
} ],
'task3': [ 'mongo', 'task1', function( callback ) {
/// will run after 'mongo' and 'task1' has completed
} ],
},
function( err, rets ) {
/// all task are done
/// now you can close your mongodb connection / process.exit( 0 );
}
);

关于node.js - Node JS mongodb : use global connection or local connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com