2015-12-04 22 views
0

我是mongodb和nodejs中的新手。如何在nodejs中加速與mongoose查詢mongdb

我編寫了一個示例應用程序來測量在mongoose中從nodejs中獲取mongodb數據的速度。

我收集了大約200000條記錄。 在我的代碼,我想通過查詢來獲取100000個第一行:

var query = db.myCollection.find().limit(100000); 
query.exec(function(err, data){ 
     // .... 
}); 

,並花了大約99秒,我覺得速度太慢。 任何人都可以有想法來提高查詢速度嗎?

非常感謝!

+0

嘗試創建一個索引您的收藏,因爲沒有索引,MongoDB中必須執行的集合掃描,即掃描每文檔集合中選擇那些匹配查詢語句的文檔,這會增加響應時間 – aitnasser

+1

我認爲id是mongoDB中的默認索引。 – user1697646

+0

是的,ObjectId默認使用mongo索引 –

回答

0

使用mongodb,您可以索引一些密鑰來提高查詢時的性能。但在這種情況下,這是行不通的。

你的99可能是由你的電腦造成的,它無法在一次處理這種重負載的數據(這是完全可以理解的)。

這是絕對不是與mongodb相關,但與您的測試機內存。

但你也許可以通過管道將結果改進:

// use our lame formatter 
var format = new ArrayFormatter; 

// first pipe the querystream to the formatter 
myCollection.find().stream().pipe(format); 

// then pipe the formatter to the response 
// (node 0.4x style pipe non-chaining) 
format.pipe(res); 

// In node 0.6 we can P.find().stream().pipe(format).pipe(res); 

隨着this gist

+0

感謝您的幫助。這很難理解,適用於我的測試。 – user1697646

+0

我讀了要點,真的不明白數據從數據庫返回的位置? – user1697646

+0

將管道視爲流。在這個例子中,這會生成一個連續的數據流從你的db到'res'。我建議你學習有關nodejs的'streams'。這是最重要的nodejs原則之一。 [這是管道貓鼬上的實現](http://mongoosejs.com/docs/2.7.x/docs/querystream.html) –