сервер mongodb Atlas — медленный возврат

#node.js #mongodb #mongodb-query #mongodb-atlas

#node.js #mongodb #mongodb-запрос #mongodb-atlas

Вопрос:

Итак, я понимаю, как некоторые запросы могут занимать некоторое время, и многократный запрос одной и той же информации может просто потреблять оперативную память.

Мне интересно, является ли их ответ на следующий запрос более удобным для запросов в реальном времени?

 const LNowPlaying = require('mongoose').model('NowPlaying');
        var query = LNowPlaying.findOne({"history":[y]}).sort({"_id":-1})
  
  

У нас есть приложения для iOS и Android, которые запрашивают эту информацию каждую секунду, что сказывается на MongoDB Atlas.

Нам интересно, есть ли у них в NodeJS возможность кэшировать возвращаемые данные не менее чем на 30 секунд, а затем извлекать новые данные воспроизведения, когда данные изменились.

(ПРИМЕЧАНИЕ: У нас есть скрипт прослушивания, который прослушивает метаданные песни для изменения — и обновляет воспроизведение для каждого слушателя).

Комментарии:

1. Вы уже создали составной индекс для history и _id ?

Ответ №1:

MongoDB попытается выполнить собственное кэширование запрошенных данных в памяти, когда это возможно. Но упомянутые частые запросы все еще могут создавать слишком большую нагрузку на базу данных.

Вы могли бы использовать Redis, Memcached или даже in-memory на стороне NodeJS для временного кэширования результатов запроса. Сценарий прослушивания, на который ссылается, может приводить к аннулированию кэша каждый раз, когда происходит обновление метаданных песни, чтобы гарантировать, что клиенты получают самые актуальные данные. Одним из примеров независимого клиента кэша для NodeJS является catbox.