при изменении вручную в монго изменялось и в хэше, как быть?)
1. Не захешировать, а закешировать 2. Та ну, лучше не надо, кеш это всегда лишний гемор по его инвалидации, если можно без него, то лучше без него
Много операций с данными юзеров, каждый раз тянуть из базы значение? Мне кажется, что может быть затор...
Бот перенаправляет юзерам сообщения в зависимости от настроек каждого из них
Смотря что понимается под "каждый раз". В общем случае с базой работают несколько программ (например несколько процессов твоей программы), которые в общем случае не знают о действиях друг друга, поэтому да, каждый раз как нужны свежие данные, делаем запрос
Есть 100 видов сообщений от бота, у каждого юзера стоят "галочки", какие из них получать. В 1 секунду может прийти 20 сообщений. При получении сообщения, программа запрашивает из бд настройки всех юзеров и делает рассылку, в зависимости от настроек.
а как приложение узнает что настройки поменялись?
Я думал настройки поместить в класс (кэш) и может сделать метод в нем - обновить кэш. И когда я обновил в базе настройки вручную, то отправил бы команду (как админ) в приложение , которая вызывала бы метод - обновить кэш
раз в n время обновляй данные в кеше, но не думаю что он тебе вообще нужен
Обновление кэша по расписанию. Какая наивность. 😊
В чем наивность?
В том, что инвалидацию кеша почти никогда нельзя завязывать только на таймер и если так делать, рано или поздно эта мина в коде сдетонирует.
А на что ее завязывать?
Очевидным образом — на изменение исходных данных.
Мне надо, чтоб в кэше отображались изменения бд, вносимые вручную. В чем может быть проблема при таймере..?
не вижу проблем во многих случаях завязывать именно на таймер. Если у вас критчно получать актуальные аднные, то кэш возможно вообще не стоит юзать, иначе это сдетонирует рано или поздно
Ну, если так получилось, что буква C из CAP не так критична, то да, можно себе позволить. Но это надо знать на входе и проектировать соотвествующим образом.
Обсуждают сегодня