我在使用Sails v1.0和mongodb时遇到了两个问题 .

  • 我收到这个警告:

警告:尝试使用指定的子标准填充matched_radios,但这可能不安全,具体取决于模型中存储的记录数 . 由于此关联不支持优化的填充(即它跨越多个数据存储,或使用不支持本机连接的适配器),因此将它与使用limitskip的子标准一起填充不是一个好主意,和/或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万用户在制作,大多数请求是“查找无线电”

有什么想法吗?