@mmmq

Как работать с большими данными в MongoDB?

Здравствуйте.

Столкнулся с проблемой при запросе данных свыше 2000, ответ начинает тормозить. От 3тысяч записей и вовсе все умирает без ответа. Это даже не "big data", поэтому не понимаю как решить эту проблему. Использую Mongoose для осуществления запросов.

p.s Возможно не правильная архитекрутра бд.

Запрос:

const candles = await candlesModel.findOne({ symbol, interval }).then(res => res.data)


Структура документа в коллеции "candles":

{
_id: 'ObjectID',
symbol: 'BTCUSD',
interval: '2h',
data: [ {open, high, low, close, timestamp}, ... ]
}


Такое решение выбрано по причине большого числа symbol'ов и разных интервалов. В data содержится основной массив из данных для символа (от 2000тыс.)

Железо:

Использую базовый тариф MongoDB Atlas 500md RAM сервер (только локальная разработка).
  • Вопрос задан
  • 183 просмотра
Решения вопроса 2
zoonman
@zoonman
⋆⋆⋆⋆⋆
Для правильной работы с данными следует использовать курсоры.

Вам нужно что-то вроде этого.

Ошибки нет скорее всего из-за закончившейся памяти.
Ответ написан
hzzzzl
@hzzzzl
candlesModel.findOne({ symbol, interval }).then(res => res.data)


это можно заменить на
// выбрать только поле 'data'
candlesModel.findOne({ symbol, interval }, 'data')


а вообще хммм, странно, 2000 шт должен отдавать и базовый план на mongo atlas, или как минимум возвращать какую-то ошибку, может что-то дальше в коде происходит?

если просто запросить полный документ, то он приходит из базы?
await candlesModel.findOne({ symbol, interval }) // ?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы