我应该为每个路由创建新的模式模型文件还是使用已创建的模式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该为每个路由创建新的模式模型文件还是使用已创建的模式?相关的知识,希望对你有一定的参考价值。

假设我有一个用户模式,它有大约30个字段,还有其他3个模式。

UserSchema.js

user_schema = new Schema({
    user_id: { type: String},
    .........//30 properties
});
ctrs_schema = new Schema({
    .........10 properties
});
ids_schema = new Schema({
    .........5 properties
});
comments_schema = new Schema({
    .........10 properties
});

现在我正在编写一条路线,它将改变用户的性别。现在为了做到这一点,我可以使用UserSchema.js但是会将所有模式加载到我的路线中,而如果我要创建一个新文件只有一个具有两个字段的模式,那么所有模式都不会被加载到路由的内存中。

UserGenderSchema.js

gender_schema = new Schema({
    user_id: { type: String},
    gender: { type: String}
});

我知道这两种方式都有利弊

优点 -

如果我不得不为任何字段更改某些内容,我只需要在单个文件中进行编辑。

缺点 -

所有模式都在加载所有不必要的路由。记忆浪费。

请问,线程上的两种方式之间的内存使用量是否会减少?

任何人都可以告诉我哪个架构会更好或者你在项目中实现什么以及为什么?

谢谢

答案

最好将用户相关字段保存在一个模式中,因为mongo由于其非关系结构而一直存在,并且通过保持关系结构远离它来获得性能,因此如果为每个字段创建模式然后创建一个引用,他们每个人都指出与他们相关的用户,你有点使用mongo构建一个密集的关系结构而mongo并不好,因为它应该在这种情况下,所以如果以后你的应用程序你想以某种方式显示用户的所有信息或尝试更新用户的多个字段或尝试在您的某个路线或某物中显示用户的更多信息,您最终会遇到一些严重的性能问题。作为结论,加载所有模式以仅触摸一个字段的成本并不像分解数据结构的成本那么多。

以上是关于我应该为每个路由创建新的模式模型文件还是使用已创建的模式?的主要内容,如果未能解决你的问题,请参考以下文章

我应该共享实体框架上下文还是为每个操作创建一个新上下文?

Swift:ViewModel 应该是结构还是类?

应该如何为具有不同字段的几个猫鼬模型创建模式?

Apache Commons NET:我应该在每个连接上创建一个新的 FTPClient 对象还是重用一个?

我应该重新使用游标对象还是使用 mysql.connector 创建一个新对象?

我应该使用 cronjob 还是条带订阅(500 个活动)?