我有一组nodejs脚本,用于对mongodb进行大量的查询、插入和更新操作。我面临一个选择,是使用全局的db连接对象并将其传递给不同的函数,还是在每个函数中获取自己的db连接对象并在完成后关闭它。
1. 全局的db连接对象。优点是只需要建立一次连接即可,后续的函数调用将通过节省连接到数据库所需的时间来提高性能。问题在于很难确定何时关闭连接。我的脚本很复杂,有几层函数调用。有些函数在回调函数触发后仍需要执行进一步的任务,如果不关闭连接,则父脚本无法知道何时退出。
2. 在每个函数中建立一个新的db连接对象。这种方法最大的担忧是性能。我测试了每个连接大约需要60毫秒才能建立。如果在所有函数调用中添加这个连接,可能会导致巨大的性能下降。
我倾向于采用第一种方法,但需要找出一种方法使父脚本在完成所有任务后退出。
以下是伪代码,以说明脚本的高级结构。
1. 全局的db连接对象。优点是只需要建立一次连接即可,后续的函数调用将通过节省连接到数据库所需的时间来提高性能。问题在于很难确定何时关闭连接。我的脚本很复杂,有几层函数调用。有些函数在回调函数触发后仍需要执行进一步的任务,如果不关闭连接,则父脚本无法知道何时退出。
2. 在每个函数中建立一个新的db连接对象。这种方法最大的担忧是性能。我测试了每个连接大约需要60毫秒才能建立。如果在所有函数调用中添加这个连接,可能会导致巨大的性能下降。
我倾向于采用第一种方法,但需要找出一种方法使父脚本在完成所有任务后退出。
以下是伪代码,以说明脚本的高级结构。
//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....
....
}