在操作数据库时要注意两个能力:
- 第一个是快速存储能力。
- 第二个是方便迅速查询能力。
批量插入
批量数据插入是以数组的方式进行的(如果写错,可以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,性能远远超过循环插入。
总结:在工作中一定要照顾数据库性能,这也是你水平的体现,一个技术会了很简单,但是要作精通不那么简单。在工作中如果在循环插入和批量插入举棋不定,那就选批量插入吧,它会给我们更优的性能体验。