批量插入的正确方法


在操作数据库时要注意两个能力:

  • 第一个是快速存储能力。
  • 第二个是方便迅速查询能力。

批量插入

批量数据插入是以数组的方式进行的(如果写错,可以3个回车可以切出来)。我们现在命令行中敲入下面的代码,我们可以看到数据顺利插入了。

db.test.insert([
    {"_id":1},
    {"_id":2},
    {"_id":3}
])

老版本MongoDB(3.2以前的版本基本都需要)是需要在Insert前加一个batch单词的,如下代码。

db.test.batchInsert([
    {"_id":1},
    {"_id":2},
    {"_id":3}
])

注意一次插入不要超过48M,像.zip和大图片什么的尽量用静态存储,MongoDB存储静态路径就好,这也算是一个规则。

批量插入性能测试

循环插入快还是批量插入快?试着写一个小Shell,来验证一下结果。
先写一个循环插入方法:

var startTime = (new Date()).getTime(); //得到开始时间
var  db = connect('log');  //链接数据库
//开始循环
for(let i=0;i<1000;i++){
    db.test.insert({num:i});
}
var runTime = (new Date()).getTime()-startTime; //计算时间差
print ('This run this is:'+runTime+'ms'); //打印出来

我测试的时间509ms,这个速度虽然和电脑性能有关,但还是不太理想,1000条数据用了将近半秒。

批量插入代码:

var startTime = (new Date()).getTime();
var  db = connect('log');
var tempArray = []              //声明一个数组
for(let i=0;i<1000;i++){        //循环向数组中放入值
    tempArray.push({num:i});
}
db.test.insert(tempArray)       //批量一次插入
var runTime = (new Date()).getTime()-startTime;
print ('This run this is:'+runTime+'ms');

这次用了18ms,性能远远超过循环插入。

总结:在工作中一定要照顾数据库性能,这也是你水平的体现,一个技术会了很简单,但是要作精通不那么简单。在工作中如果在循环插入和批量插入举棋不定,那就选批量插入吧,它会给我们更优的性能体验。


文章作者: 技术潘
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 技术潘 !
 上一篇
update常见错误 update常见错误
update的详细操作和常见错误,以及解决方案。
2019-04-28
下一篇 
用js文件写mongo命令 用js文件写mongo命令
在命令行中写mongo的命令(shell)实在是太麻烦了,急需一种更好的方式来进行工作,我们就可以用JS文件来写shell命令和执行。在JS里写mongo的Shell命令大部分是相同的,只有小部分不一样。
2019-04-26
  目录