如果文档包含大量数据,我正在运行测试来检查mongodb上的查询时间。使用的代码是:
var mongoose = require('mongoose');
var testSchema = new mongoose.Schema({
email : String,
password : String,
dob : Date,
phone : String,
misc1 : Array,
misc2 : Array,
misc3 : Array,
misc5 : Array,
misc6 : Array,
misc7 : Array,
misc8 : Array,
misc9 : Array,
misc10 : Array,
misc11 : Array,
misc12 : Array,
misc13 : Array,
misc14 : Array,
misc15 : Array
});
var Test = mongoose.model('Test', testSchema);
var email = 'someone';
var password = 'very safe password';
var dob = new Date();
var phone = 'this is not a phone number';
var dummyObject = {
title: 'title',
story: 'story',
createdOn: new Date(),
modifiedOn: new Date(),
author: 'somebody'
};
var dummyArray = [];
console.log('start creating dummy arrays');
for(var i = 0; i < 5000; i++) {
dummyArray.push(dummyObject)
}
console.log('dummy arrays created');
var test = new Test({
email : email,
password : password,
dob : dob,
phone : phone,
misc1 : dummyArray,
misc2 : dummyArray,
misc3 : dummyArray,
misc5 : dummyArray,
misc6 : dummyArray,
misc7 : dummyArray,
misc8 : dummyArray,
misc9 : dummyArray,
misc10 : dummyArray,
misc11 : dummyArray,
misc12 : dummyArray,
misc13 : dummyArray,
misc14 : dummyArray
});
module.exports = function () {
for(var j = 0; j < 200; j++) {
console.log(j);
(function (j) {
test.save(function (err) {
if (err) {
console.log(err);
} else {
console.log(j + 'th record saved')
}
})
})(j)
}
};
但是当我运行这个功能时,会发生两件我不明白的事情:
如果使用较小的j
<= 50进行测试,您会注意到"0th record saved"
日志确实已打印出来。即便如此,消耗的RAM也不会被释放。
硬件概述:
我正在使用活动监视器来检查我的节点进程消耗的ram数量。
对于j = 50
,内存(1.22GB)在> 2分钟内获得免费(90MB)。