2016-11-25 25 views
0

1.synchronousnodejs:數據庫連接成本是否重要?

mongo.conn(function(err,db){ 
db.collection('pet').find({},function(err, result){ 
    db.collection('petviewcount').updateOne({}, {$inc:{viewcount:+1}}, function(err, result){ 
     // db.collection('more').find({},function(err, result){ 
      // db.collection('insert').find({},function(err, result){ 
       // db.collection('update').find({},function(err, result){ 
       db.close(); 
       cb(err, result); 
    });      
}); 

});

2.asynchronous

mongo.conn(function(err,db){ 
    db.collection('pet').find({},function(err, result){ 
       db.close(); 
       cb(err, result); 
    }); 
}); 
countUp(); 
// more + insert + update() 

function countUp(){ 
    mongo.conn(function(err,db){ 
    db.collection('petviewcount').updateOne({}, {$inc:{viewcount:+1}}, function(err, result){ 
     db.close(); 
    }); 
    }); 
} 


據我知道發送單個請求到服務器(節點)時
第一個是保存服務器和數據庫之間的連接成本。
第二個是比前一個更快的響應。

哪個更適合現實世界?
(1小數據延遲是可以接受的
    2.我不知道該如何處理服務器和數據庫性能瓶頸之間。)

+0

你誤會同步和異步過程的概念。你的兩個示例代碼都是異步運行的。出於性能考慮,重新使用連接比每次請求創建新連接要好,因爲連接需要資源和開銷。 – iKoala

+0

如果在上面的例子中沒有回調,它是同步的嗎?或者在使用睡眠函數或節點同步庫時是同步的嗎?我感到困惑。 – user2655470

回答

1

出於性能方面的智慧,再利用連接比創造一個更美好每個請求都有一個新的連接,因爲建立連接需要資源和開銷

我認爲他是一個更好的辦法:

//global connection reference 
var dbConnection; 

//remember to wait for connection established before using the connection 
mongo.conn(function(err,db){ 
    dbConnection = db; 
    start(); //now you can run all query with one connection 
}); 

function start() { 
    findPet(); 
    countUp(); 
} 

function findPet() { 
    dbConnection.collection('pet').find({},function(err, result){ 
    }); 
} 

function countUp(){ 
    dbConnection.collection('petviewcount').updateOne({}, {$inc:{viewcount:+1}}, function(err, result){ 
    }); 
} 
+0

謝謝你的體貼:) – user2655470