Есть ли смысл кешировать «локально» результаты запросов mongodb в NodeJS?

На сайте имеются сущности такие, как локализация, список поддерживаемых языков, элементы меню и т.д., которые хранятся в монге. Объем их, соответственно, небольшой.
Эти сущности преимущественно используются при рендеринге страницы.
Имеет ли смысл при запуске веб-сервера один раз получить эти данные и записать в переменную? Один из минусов тут сразу очевиден - как минимум придется заморачиваться со своими велосипедами для поддержки актуальности "кэша".

Насколько я знаю, в монге хорошая поддержка кэширования запросов из коробки. Но всех тонкостей функционирования механизма я не знаю, поэтому сам факт выполнения этих "лишних" запросов при каждой загрузке страницы (коих от 15-20 в секунду) немного пугает.

Как мне известно, монга кэширует результаты запросов в памяти. Тогда выходит, что профит будет лишь в избегании вызовов некоторого количества внутренних методов монги, возвращающих кэш из памяти. Так ли это?
  • Вопрос задан
  • 3363 просмотра
Решения вопроса 1
mahnunchik
@mahnunchik
https://about.me/vlasenko
Если появилось желание написать свой кэш, то стоит сделать шаг назад и ещё раз подумать над архитектурой.

Ответ: Локально кешировать результаты из монги однозначно не стоит.

А теперь подробнее:
В монге кэш достаточно хитрее чем сохранение последнего результата. (docs.mongodb.org/manual/faq/fundamentals/#does-mon...) Мога может хранить в оперативке только индексы и прирост в производительности "кеширование" происходит только когда все необходимые запросу поля входят в индекс, а индекс в свою очередь в оперативке после предыдущего запроса к этой же коллекции.

Варианты решения:
1) Если данные меняются часто (минуты) - то как вариант монга, соответственно без "своего" кеширования. Но если данные (строки локализации, меню) ложатся на структуру ключ/значение, то целесообразно использовать что-то более предназначенное для "быстрого" чтения типо redis или при мультинодовой архитектуре то etcd
2) Если данные меняются редко (дни) - то обычные файлы с локализациями (загрузка при старте апы) будут оптимальным вариантом=)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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