我使用nodejs、expressjs和mongoose创建了具有多租户结构的应用程序,当我启动应用程序时,其进程的内存使用情况很正常,但随着时间
few hours
和使用情况few users
,内存增加了很多,达到了2-3GBps偶数用户并没有那么多5 users
。
我通过使用
mongoose
启动与数据库的连接来创建多租户架构,而无需指定数据库并随后利用 mongoose 对象,并检查每个请求中的租户,然后使用相应的模型(如果已创建),如果没有!创建并使用它,
使用Token请求>>验证Token用户并检查租户>>使用|创建模型>>查询数据库>>发回响应
export class Category {
private db = "";
private model = "Category";
private collection = "categories";
constructor(db: string, model?: string, collection?: string) {
this.db = db;
this.model = model || this.model;
this.collection = collection || this.collection;
}
schema = new Schema<ICategoryBaseDocument>(
{
// model schema
},
{
// model options
}
);
Model = (): ICategoryModel => { // method to get or create model
const db = mongoose.connection.useDb(dbConnection(this.db).name); // this function will return the name of the database for that specific tenant
if (db.modelNames().indexOf(this.model) !== -1) {
return db.models[this.model] as ICategoryModel;
} else {
return db.model<ICategoryBaseDocument, ICategoryModel>(
this.model,
this.schema,
this.collection
);
}
};
}
数据库是一般的猫鼬连接,应用程序启动时没有引用任何数据库,并使用该连接在已创建的模型的数据库之间进行交换
mongoose.connect(`mongodb://${server}:${port}`, {});
我觉得这种方法不是最佳实践,它是内存使用背后的原因,所以请提供任何建议或想法如何修复它
您使用的 Mongoose 版本是什么?如果您没有使用 8.8.2 或更高版本,内存使用情况可能是由于 https://github.com/Automattic/mongoose/pull/15039.
中修复的问题造成的