我在使用Sails v1.0和mongodb时遇到了两个问题 .
- 我收到这个警告:
警告:尝试使用指定的子标准填充
matched_radios
,但这可能不安全,具体取决于模型中存储的记录数 . 由于此关联不支持优化的填充(即它跨越多个数据存储,或使用不支持本机连接的适配器),因此将它与使用limit
,skip
的子标准一起填充不是一个好主意,和/或sort
--至少不在 生产环境 环境中 . 这是因为,为了满足指定的limit
/skip
/sort
,可能需要在此过程中获取许多其他记录 - 可能足以使服务器上的RAM溢出 . 如果您只是在开发期间使用sails-disk,或者根据应用程序的要求确定这不是问题,那么您可以放心地忽略此消息 . 但是,为了克服这一点,要么(A)删除或更改此子标准并以不同的方式(例如多个单独的查询或本机查询)处理此查询,或者(B)将所有涉及的模型配置为使用相同的数据存储,以及/或切换到支持本机连接的sails-mysql或sails-postgresql等适配器 . [?]请参阅https://sailsjs.com/support以获取帮助 .
我的代码看起来像这样:
Radio.find({limit: 3, sort: 'priority DESC'})
.where({enabled:true})
.populate('streams').populate('matched_radios')
Radio对象如下所示:
var Radio = {
attributes: {
name:{
type:'string',
defaultsTo:''
},
streams:{
collection:'stream',
via:'radios'
},
matched_radios:{
collection:'radio',
}
},
};
我也尝试更改代码,生成两个分开的查询,如下所示:
var populatedPromise = []
Radio.find({limit: 3, sort: 'priority DESC'})
.where({enabled:true}).
then((radios)=>{
radios.forEach(radio => {
populatedPromise.push(Radio.findOne({id:radio.id}).populate('streams').populate('matched_radios'))
}
})
return Promise.all(populatedPromise);
但我仍然在Production上有相同的警告日志 .
- 第二个问题是1gb的服务器在一小时内内存不足,可能与第一个问题有关(但可能没有) . 我们有15到20万用户在制作,大多数请求是“查找无线电”
有什么想法吗?