Я написал приложение, используя Sails.js с mongoDb (паруса-монго).Slow MongoDB запросы с Sails.js
Во-первых, я решил написать все в одном документ ... И базы данных замедлились на 5ГБЕ данных .. «Замедленная» означает, что основная находка запрос выполняется в 30-5ом ..
чем я переписать все в нескольких семействах и добавить индексацию .. пример моих моделей:
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-ядерный сервер с 2 Гб виртуальной памяти .. Извините за плохой английский ..
Что вы на самом деле пытаетесь сделать? Похоже, вы смешиваете типы запросов; например использование предела в методе findOne не может ничего сделать ... –
Actualy Limit .. является частью более старого запроса, где только что был найден. теперь его сняли .. –
Часть его может быть ограничена сервер, на котором находится ваша база данных; в идеале вы хотите иметь достаточно памяти для хранения всей вашей базы данных + индексов в памяти, чтобы вы не получали ошибок страницы и т. д. Часть этого метода будет вызывать метод .populateAll(); это действительно дорого, особенно если у вас много записей, возвращаемых с начального шага .find(). Он может добавить * тысячи * дополнительных запросов и итераций в ваш запрос ... –