使用标准航行v1.0警告并填充,内存不足

时间:2018-07-13 16:42:49

标签: mongodb sails.js warnings waterline populate

我在Sails v1.0和mongodb中遇到两个问题。

  1. 我收到此警告:

      

    警告:尝试使用指定的子条件填充“ 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上仍然有相同的警告日志。

  1. 第二个问题是具有1gb的服务器在一个小时内内存不足,并且可能与第一个问题有关(但可能不是)。 我们的生产用户数量在15至2万之间,大部分要求是“查找收音机”

    有什么想法吗?

0 个答案:

没有答案