向mongodb里插入10万条记录的代码怎么写
2个回答
2016-07-05 · 百度知道合伙人官方认证企业
兄弟连教育
兄弟连教育成立于2006年,11年来专注IT职业教育,是国内专业的IT技术培训学校。2016年成功挂牌新三板(股票代码:839467)市值过亿。开设专注程序员培训专注php、Java、UI、云计算、Python、HTML5、
向TA提问
关注
展开全部
起初打算用Node.js去做这个性能 测试,碰了几次壁后,改用Python顺利完成任务,现在回过头来再看这个问题,发现里面似乎有坑。
先放上一段Node.js的插入10万条记录的代码:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/testdb';
var dataList = []
var globalCount = 0
console.time('insert,10w');
MongoClient.connect(url, {
server: {
poolSize: 50
}
},function(err, db) {
if(err) throw(err)
for(var i=0; i<100000; i++){
db.collection('test1').insert({
count:i
}, function(err, r) {
if(err) throw(err)
globalCount++
if(globalCount>=100000){
console.timeEnd('insert,10w');
process.exit(1);
}
});
}
});
测试结果慢的令人发指,Node.js版本是最新的0.12.2
E:\nodejs>node mongodb_error2.js
insert,10w: 9791ms
我用同样的Python脚本去做:
import pymongo
import json
import datetime,time
import copy
import sys, os
def getTimestampFromDatetime(d=None):
if d is None:
d = datetime.datetime.now()
return time.mktime(d.timetuple())
if __name__ == '__main__':
start = getTimestampFromDatetime()
client = pymongo.MongoClient("localhost", 27017, max_pool_size=50)
db = client.testdb
saveData = []
for i in range(0, 100000):
saveData.append({
'count':i
})
db.test2.insert(saveData)
end = getTimestampFromDatetime()
print('time: {0}s'.format(end-start))
测试结果如下:
E:\python>python save_10w.py
time: 1.0
我在想是不是Node.js代码写的太垃圾,于是我找了Mongodb包的另外一个insertMany方法,但是结果却报错了:
E:\nodejs\node_modules\mongodb\lib\utils.js:97
process.nextTick(function() { throw err; });
^
Error
at Object.<anonymous> (E:\nodejs\node_modules\mongodb\node_modules\mongodb-c
ore\lib\error.js:42:24)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (E:\nodejs\node_modules\mongodb\node_modules\mongodb-core\index.js:2:17)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
先放上一段Node.js的插入10万条记录的代码:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/testdb';
var dataList = []
var globalCount = 0
console.time('insert,10w');
MongoClient.connect(url, {
server: {
poolSize: 50
}
},function(err, db) {
if(err) throw(err)
for(var i=0; i<100000; i++){
db.collection('test1').insert({
count:i
}, function(err, r) {
if(err) throw(err)
globalCount++
if(globalCount>=100000){
console.timeEnd('insert,10w');
process.exit(1);
}
});
}
});
测试结果慢的令人发指,Node.js版本是最新的0.12.2
E:\nodejs>node mongodb_error2.js
insert,10w: 9791ms
我用同样的Python脚本去做:
import pymongo
import json
import datetime,time
import copy
import sys, os
def getTimestampFromDatetime(d=None):
if d is None:
d = datetime.datetime.now()
return time.mktime(d.timetuple())
if __name__ == '__main__':
start = getTimestampFromDatetime()
client = pymongo.MongoClient("localhost", 27017, max_pool_size=50)
db = client.testdb
saveData = []
for i in range(0, 100000):
saveData.append({
'count':i
})
db.test2.insert(saveData)
end = getTimestampFromDatetime()
print('time: {0}s'.format(end-start))
测试结果如下:
E:\python>python save_10w.py
time: 1.0
我在想是不是Node.js代码写的太垃圾,于是我找了Mongodb包的另外一个insertMany方法,但是结果却报错了:
E:\nodejs\node_modules\mongodb\lib\utils.js:97
process.nextTick(function() { throw err; });
^
Error
at Object.<anonymous> (E:\nodejs\node_modules\mongodb\node_modules\mongodb-c
ore\lib\error.js:42:24)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (E:\nodejs\node_modules\mongodb\node_modules\mongodb-core\index.js:2:17)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
展开全部
for(var i=0;i<1000000;i++){
. db. orders.insert({
"onumber" : i,
"date" : "2015-07-02",
"cname" : "zcy"+i,
"items" :[ {
"ino" : i,
"quantity" : i,
"price" : 4.0
},{
"ino" : i+1,
"quantity" : i+1,
"price" : 6.0
}
]
})
}
Mac 1分钟 直接在库里面操作额
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |