【发布时间】:2015-08-23 20:19:31
【问题描述】:
我正在使用 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 数组而不必将整个对象保存在内存中或每次都加载它?
【问题讨论】: