Приветствую. Какие есть варианты реализации системы подсчета не просмотренных сообщений в групповых чатах при нагрузках равнозначных телеграму?
Есть следующие варианты:
1. Вести учет просмотренных сообщений сообщений для каждого пользователя. Создавать запись в таблице message_views, указывая id пользователя и id сообщения, а при необходимости узнать кол-во непрочитанных, проверять, для скольких сообщений чата не записей в message_views. Огроаный недостаток - слишком долгая операция. Если нужно посчитать, к примеру, 1000000 непрочитанных сообщений. 1000000 - приблизительно, максимальное количество сообщений для чата, которое хранит телеграм. Так же и другие варианты с подсчетом кол-ва непрочитанных сообщений, в которых надо использовать COUNT(*)
2. Хранить в отдельном поле кол-во непрочитанных сообщений для каждого участника чата. После отправки сообщения, делать инкремент для каждого пользователя. Недостатки: если, к примеру, есть группа в которой 200 тыс. пользователей, то обновление счетчика для всех пользователей - слишком дорогая операция, но можно обновлять счетчик в несколько итераций, к примеру, для 3-5 тыс. участников за раз.
Склоняюсь ко второму варианту, но буду рад рассмотреть ваши предложения.
Срочно в решении задачи нет, просто хочу прояснить масштабируемые варианты.