0
我正在使用mongodb和nodejs。我的MongoDB程序具有以下代碼nodejs中的MongoDB連接字符串
在mongodbUtil.js:
var MongoClient = require('mongodb').MongoClient
var state = {
db: null,
}
exports.connect = function(url, done) {
if (state.db) return done()
MongoClient.connect(url, function(err, db) {
if (err) return done(err)
state.db = db
done()
})
}
exports.get = function() {
return state.db
}
/* 1 : when is close called */
exports.close = function(done) {
if (state.db) {
state.db.close(function(err, result) {
state.db = null
state.mode = null
done(err)
})
}
}
在app.js我有以下代碼
var async = require("async");
var express = require("express");
var app = express();
var db = require("./mongodbUtil");
db.connect('mongodb://localhost:27017/mydatabase', function(err) {
if (err) {
console.log('Unable to connect to Mongo.')
process.exit(1)
} else {
app.listen(3000, function() {
console.log('Listening on port 3000...')
})
}
})
app.get('/',function(req,res){
res.send("routes :/insert ")
})
app.get('/insert',function(req,res){
var collection = db.get().collection('insertcollection');
collection.drop();
var obj = {};
for (i=0; i <100000 ; i++){
obj=({id: i, square:i*i,sum:i+i,subtract:i-1,data:"data part 2014"});
collection.insert(obj.table, function (err, result) {
if(err) {
console.log(err);
} else {
console.log(i);
}
});
}
})
我在這個以下代碼查詢
- 什麼時候應該關閉mongodb中的連接?這是由nodejs mongodb驅動程序隱式處理還是僅在此場景中創建連接 池?
- 我應該使用讀取首選項和寫入首選項設置連接字符串還是應該將其保留爲默認值?
- 在插入路由中,只有約60000條記錄被插入集合中。我在mongodb插入回調中也沒有看到任何錯誤。爲什麼只有部分數據被轉儲是否有特定的原因? (我知道批量插入的性能更好,但我很好奇爲什麼沒有錯誤報告,只有部分數據被丟棄)
所以如果我有一個高流量的要求,使用連接池,這是否意味着我不需要的NodeJS應用程序的生命週期內,收於任意點的連接。 – baiduXiu
我不會建議關閉連接,但我會建議您打開連接的方式,確保存在打開的連接,如果不重新打開一個或多個連接並將其添加到池中。 –
如果在nodejs應用程序的生命週期中打開的連接失敗,那麼重新生成mongodb連接的最佳方式是什麼。同樣,如果/ insert路由的代碼是同步的,爲什麼它能夠轉儲60k記錄並且不會在錯誤回調 – baiduXiu