Хочется сократить количество обращений к конге с целью обновления документа.
На сайте есть посты при переходе на пост идет обновление поля stats.view +1, таких запросов в секунду порядка 50 штук.
Выборка в силу своей нагруженности происходит не обычным образом:
1. Самый первый запрос к документу, собирает всю необходимые информацию с 3-х коллекций, одна из которых бывает тяжелой и выполняется более секунды. После всех выборок собирает большой объект со всем необходимым и сохраняется в отдельную коллекцию монги в строковое поле (object.toString()), назовем ее
cache
2. Второй и последующие запросы идут непосредственно в коллекцию
cache, если в ней находится необходимая информация. Документы практически никогда не меняются и кеш документа может храниться годами
Если на пальцах показать то при запросе к переходе на страницу происходит следующее
const [cache, count] = await Promise.all([getCache(request, response), updateStats(request.params)])
// updateStats - обновляет поле documen.stats.view+1
В идеале хотелось бы следующее, создать какой то контейнер куда складывать ID документа и количество просмотров
[{
_id: ObjectId("..."),
count: 2000
},{
_id: ObjectId("..."),
count: 1000
}]
И раз в сутки по крону делать обновление необходимых документов, что позволит избежать десятки/сотни тысяч лишних запросов в коллекцию за сутки.
Как вообще такое реализовать, и возможно ли? Делать какой то глобальный контейнер в ноде?