我使用Mongoose来管理MongoDB实例,并且我每隔一段时间就会有数据进入。大约300个不同的对象,大约9个键/值对,每5秒一次。在内存中的模型大小开始严重影响性能之前,一切都会好转几分钟,然后在内存耗尽时最终陷入困境。
我已使用node-inspect
检查了该应用,以确认该应用的其他部分没有内存泄漏。它确认包含我的Mongoose模型的持久性模块是使用内存的地方。这是我的保存方法:
function persistCoordinates(id, coordinates, callback) {
var Usage = this.Usage;
Usage.findById(id, pushCoordinates);
callback();
function pushCoordinates(err, usage) {
if (err) {
console.log(err);
return;
}
coordinates.forEach(push);
function push(element, index, array) {
if (usage) {
usage.coordinates.push(element);
usage.save(saved); // Just logs success. I suspect I need some cleanup.
}
}
}
}
我已经找到了这种清理方法,但是如果我正确理解它,它会完全从内存中移除我的模型并破坏后续的保存。
delete mongoose.models.Usage;
delete mongoose.connection.collections.usages;
delete mongoose.modelSchemas.Usage;
我是否误解了它的作用,如果没有,是否有办法附加到coordinates
数组而不必将整个对象保留在内存中或每次都加载它?