使用Sails.js进行慢速MongoDB查询

时间:2016-05-24 18:28:30

标签: javascript node.js mongodb sails.js sails-mongo

我使用Sails.js和mongoDb(sails-mongo)编写了一个应用程序。

首先,我决定将所有内容写入单个文档...... 并且数据库减慢了5GB的数据.. “慢速”表示基本查找查询在30-50秒内执行..

比我在多个集合中重写所有并添加索引.. 我的模特的例子:

Markets.js

  module.exports = {
      attributes: {
        name: {
          type: 'string',
          index: true
        },
        pairs: {
         collection: 'Exchanges',
         via: 'source',
        }
      }
    };

和Exchanges.js

module.exports = {

  attributes: {
    s1: {
      type: "string"
    },
    source:{
      model: "Maklers",
      index: true
    },
    s2: {
      type: "string"
    },
    p: {
      type: 'float'
    },
    v1: {
      type: 'float'
    },
    v2: {
      type: 'float'
    },
    vb: {
      type: 'float'
    }
  }
};

和慢查询的例子

Markets.findOne({
          name: info,
          sort: 'createdAt DESC',
          limit: 1,
          createdAt: {
            '<=': aft
          }
        }).populateAll().exec(function(err, items) {
          callback(err, items);
        });

db.stats的结果

> db.stats()
{
    "db" : "stats222",
    "collections" : 8,
    "objects" : 36620661,
    "avgObjSize" : 238.26556139988844,
    "dataSize" : 8725442352,
    "storageSize" : 10033258480,
    "numExtents" : 63,
    "indexes" : 13,
    "indexSize" : 2940024192,
    "fileSize" : 14958985216,
    "nsSizeMB" : 16,
    "extentFreeList" : {
        "num" : 0,
        "totalSize" : 0
    },
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 22
    },
    "ok" : 1
}

你可以给我什么建议? 它每分钟约有2000条记录..

如何提高性能? 更改数据库配置?改变指数?改变DB?更改模型/集合配置?

我使用2核服务器和2GB虚拟内存.. 抱歉英文不好..

1 个答案:

答案 0 :(得分:5)

使用mongodb时,0.12版Waterline有一个缺点。默认情况下,水线不区分大小写,mongodb就是!

您的查询速度很慢,因为在搜索字符串时,它正在使用REGEX查找任何案例,因此您的索引无用。但您可以通过使用wlnex属性禁用区分大小写来更改它:

someMongodbServer: {
    adapter: 'sails-mongo',
    host: 'mongodb',
    port: 27017,
    user: 'username',
    password: 'password',
    database: 'databaseCoolName',
    wlNext: {
      caseSensitive: true
    }   
},

您可以通过查看mongodb日志来确认此错误。并查看缓慢查询的内容。