2015-04-01 65 views
0
// first approach 
for (var i = 0; i < 1000000; i++) { 
    db.testdata.insert({number: i}); 
} 

// second approach 
for (var i = 0, arr = []; i < 1000000; i++) { 
    arr.push({number: i}); 
} 
db.testdata.insert(arr); 

哪種方式更有效率?第二種方法是否向數據庫發出單一請求?MongoDB中的Milti插入。哪種方式更有效率?

+0

底部的方式應該會更好,它使用更少的查詢。這似乎是一個測試查詢,我認爲你應該採用「第二種方法」 – Abhishek 2015-04-01 07:09:32

+1

兩種方式都不應該使用bulkinset API:http://blog.mongodb.org/post/84922794768/mongodbs-new-bulk-api – Sammaye 2015-04-01 07:30:11

回答

2

對於大量的插入,絕對會更快。這是因爲你只會做一個數據庫調用。

但是你自己不難測試。

var X = 100000; 
var start = new Date(); 
for (var i = 0; i < X; i++) { 
    db.coll1.insert({number: i}); 
} 
var time1 = new Date() - start; 

,第二個

var start = new Date(); 
for (var i = 0, arr = []; i < X; i++) { 
    arr.push({number: i}); 
} 
db.coll2.insert(arr); 
var time2 = new Date() - start; 

而且因爲它是在該意見提出,可以嘗試bulk插入(這在我看來是做一樣的2,但我可能是錯的) :

var start = new Date(); 
var bulk = db.coll3.initializeUnorderedBulkOp(); 
for (var i = 0; i < X; i++) { 
    bulk.insert({number: i}); 
} 
bulk.execute(); 
var time3 = new Date() - start; 

這裏是我的機器time1 = 33846time2 = 2191time3 = 2203結果。正如你所看到的,2和3之間的差異可以忽略不計,但是1差不多延長了15倍(如果你將增加X,它會變得更大)。如果我是你,我會使用記錄的批量插入。

+1

看來方法2和3已經在MongoDB的更高版本中統一了。之前的方法2用於執行批量插入,這是一種比BulkInsert遜色的傳統API,但似乎現在已經被刪除 – Sammaye 2015-04-02 07:32:24