В моем веб-приложении мы создали функциональность центра сообщений/почтовых ящиков, в навигации по каждой странице мы ссылаемся на «Центр сообщений» и включаем рядом с ним количество непрочитанных сообщений, например «Центр сообщений (2)». Чтобы заполнить (2), с каждым запросом мы запускаем *SELECT COUNT(**) FROM MessageTable WHERE unread = true blah blah*, чтобы получить количество для включения в навигацию.
Это означает, что при каждой загрузке страницы мы обращаемся к этой таблице и запрашиваем количество.
Я придумал два варианта:
- Сохранение совокупного количества в другом месте в базе данных, а не вычисление количества каждый раз (также снимая нагрузку с таблицы сообщений). Это по-прежнему означает обращение к базе данных с каждым запросом.
- Настройка назначения временной очереди для каждого вошедшего в систему пользователя и отправка обновлений в эту очередь, если пользователь вошел в систему, что может увеличивать / уменьшать счетчик, хранящийся в сеансе. (не уверен, что это вообще возможно)
Это хорошие альтернативы, есть ли другие варианты?