Эффективный способ отображения количества входящих (1) в веб-приложении без вызова БД для каждого запроса страницы - PullRequest
1 голос
/ 30 октября 2009

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

Это означает, что для каждой загрузки страницы мы попадаем в эту таблицу и запрашиваем счетчик.

Я предложил две альтернативы:

  • Сохранение совокупного количества в другом месте базы данных, а не вычисление количества каждый раз (также снимая нагрузку с таблицы сообщений). Это по-прежнему означает попадание в базу данных с каждым запросом.
  • Настройка назначения временной очереди для каждого вошедшего в систему пользователя и отправка обновлений в эту очередь, если пользователь вошел в систему, которые могут увеличивать / уменьшать счет, хранящийся в сеансе. (не уверен, возможно ли это вообще)

Это хорошие альтернативы, есть ли другие варианты?

Ответы [ 2 ]

1 голос
/ 30 октября 2009

Одно предложение, как упомянуто в вашем посте, заключается в использовании другой таблицы MessageCounters с чем-то вроде [UserId: NumberOfMessages]. Индексирование UserId сделает эту операцию дешевой (и она будет вызывать запись только каждый раз, когда приходит новое сообщение). Недостатком является то, что для каждого нового сообщения вы будете делать две разные записи (одну в MessageTable, а другую в MessageCounters.

Другие варианты, которые вы можете рассмотреть, если действительно думаете, что это будет проблемой:

  • Сохраните эти данные в Memcached и получите их оттуда. Если вы находитесь в масштабе, когда эти запросы вас беспокоят, вы, вероятно, все равно будете использовать Memcached.

  • Используйте отдельное постоянное хранилище K / V, такое как Redis или TokyoCabinet, для некоторых из более простых задач веб-сайта (например, ведение этого счета).

0 голосов
/ 30 октября 2009

То есть число непрочитанных сообщений?

Может быть, вы можете сохранить этот номер в файле cookie пользователя и обновить его, когда

  • каждый раз, когда пользователь проверяет новые сообщения
  • пользователь прочитал сообщение (это можно сделать в JavaScript или на сервере)
  • своевременно
...