2016-03-22 58 views
3

我试图从谷歌资源提供mongoDB(版本3.2.4)弧,但它需要太多的时间,即使有一个体面的配置(MBP中2014 ,2.2 GHz Intel Core i7,16GB)。MongoDB bulk.execute()花费太多的时间来插入无序

对于原始文件中890万行中的每一行,我创建了一个docbulk.insert(doc);它成无序的批量。

插入500个之后,我做了bulk.execute()并重复这个过程,直到它们全部被添加到DB中,这从来不会发生,因为每插入一千个文档需要超过一分钟的时间,我肯定不会有8,9k分钟等待它。

这里不用代码:

MongoClient.connect(url, function (err, db) { 
if (err) { 
    console.log('Unable to connect to the mongoDB server. Error:', err); 
} else { 
    //connected 
    console.log('Connection established to', url); 

    var bulk = db.collection('bigrams').initializeUnorderedBulkOp(); 

    const rl = readline.createInterface({ 
    input: fs.createReadStream(path+filename) 
    }); 

    rl.on('line', function (line) { 
     var stringArray = line.split("\t"); 
     var firstPart = stringArray[0]+'\t'+stringArray[1]+'\t'+stringArray[2]+"\t"; 

     var head_token = stringArray[0]; 
     var syntatic_ngram = stringArray[1].split(" "); 
     var total_count = stringArray[2]; 
     var counts_by_year = line.replace(firstPart,'').split("\t"); 

     var doc = { 
     "head token" : head_token, 
     "syntatic ngram" : syntatic_ngram, 
     "total count" : total_count, 
     "counts by year" : counts_by_year 
     }; 
     count++; 
     bulkCount++; 
     if (bulkCount == bulkSize) { 
     console.log("BulkSize reached. Executing..."); 
     bulk.execute(); 
     bulkCount = 0; 
     } 
     console.log("bulk inserted count:"+count); 
     bulk.insert(doc); 
    }); 

    rl.on('end', function(){ 
     bulk.execute(); 
     db.close(); 
    }); 

    } 
}); 

P.S.:The第一10K插入,即前20 bulk.execute()的过程非常快<1米。之后,处理时间增加。 ): 任何sugestions?谢谢。

+0

请在您的文章中提及MongoDB版本,硬件配置,MongoDB数据库类型 – Saleem

+0

您是否有任何额外的索引设置为上述集合? – woozyking

+0

代码就是我工作过的所有东西,其实我只是插入在构建DB之后,我将处理索引。 –

回答

0

我从mongoDB documentation得到了答案:“执行后,不能重新执行Bulk()对象而不重新初始化。”

我刚刚在bulk.execute();之后加了bulk = db.collection('bigrams').initializeUnorderedBulkOp();,插入时间是恒定的。几分钟,一切都被插入。

希望这可以帮助别人。 (:

相关问题