Это уже реализовано в справочной архитектуре для MongoDB open source project called "Socialite", хотя оно находится на Java, а не node.js, поэтому мои ответы основаны на моем опыте и нагрузочном тестировании этого кода.
Как вы можете видеть из его реализации фида состояния, the feed has option fanoutOnWrite cache, который будет create a cache (limited size document) для активных пользователей, ограничивая количество последних записей в документе кеша (этот номер настраивается).
Ключевыми принципами этой реализации являются то, что требования к содержанию на самом деле отличаются от требований к кеш-керам, и сначала записывается база данных для записи в контент, так как это система записи для всего содержимого, а затем вы обновляете кеш (если это существует). Эта часть can be done asynchronously, при желании. В обновлении используются «ограниченные массивы» aka update $slice functionality, чтобы атомизировать новое значение/содержимое в массив и одновременно измельчать самую старую из них.
Не создавайте кеш для пользователя, если он еще не существует (если они никогда не вошли в систему, тогда вы тратите усилия). При желании вы можете использовать кеши на основе некоторого параметра TTL.
Когда вы читаете кэш для пользователя, когда он входит в систему, а его нет, затем возвращайтесь к «fanoutOnRead» (который запрашивает все содержимое пользователей, за которыми они следуют), а затем строит их кеш из этого результата ,
Проект Socialite использовал MongoDB для всех сторонних разработчиков, но при проведении бенчмаркинга мы обнаружили, что кеш таймлайн не нужно реплицировать или сохранять, поэтому его серверы MongoDB настроены только на «в памяти» (без журнала, нет репликация, отсутствие промывки диска), что аналогично использованию Redis. Если вы потеряете кеш, он просто будет восстановлен из базы данных постоянного контента «по запросу».
Как насчет работы cron для заполнения кешей? –
Может вступить в игру, если: a) приемлемое время простоя и b) время чтения велико. Что не редкость, хорошим случаем будет сокращение карты монго, где результаты, которые составляют десять минут, достаточно хороши, cron карта монго уменьшает каждые десять минут обновление redis. – generalhenry