Я бы предложил 4'th:
Как только новое сообщение было отправлено пользователю, вы обновляете счетчик в memcache
.Вы создаете простое ajax-приложение на стороне клиента, отправляя запрос каждые X секунд.На стороне сервера вы просто проверяете, есть ли непрочитанные сообщения.При обновлении страницы вам не нужно запрашивать базу данных, поскольку вы получаете счет от memcache
очень быстро.
Это то, что я сделал бы, если бы у меня было узкое место в БД (в 90% случаев БДсамая недельная часть любого приложения, управляемого базой данных).
Это то, что мы обычно делаем на высоконагруженных веб-сайтах: мы стараемся избегать любых запросов COUNTER.Если нет, мы денормализуем базу данных для хранения счетчиков прямо в соответствующей таблице как еще один столбец, например, если вы не можете использовать memcache
, вы бы сохранили счетчик непрочитанных сообщений в виде столбца для таблицы Users
.