Предположим, что в базе данных есть таблицы для пользователей, фидов, элементов и возможность узнать, какие элементы пользователь уже видел. Я ищу парадигму дизайна, которая может быть использована на сервере для вычисления за короткий промежуток времени [идентификатор фида, num_unread] для каждого канала, на который подписался пользователь.Что было бы хорошим алгоритмом для учета количества непрочитанных элементов В реализации агрегатора онлайн-подачи?
Предположим, у вас много пользователей и что каналы периодически обновляются в бэкэнд.
Редактировать: Я хотел решить проблему, которую Ник J поднял (см. Ниже). Но я ценю решение, размещенное cletus. Меня не так беспокоят запросы db, но вы хотите «парадигму дизайна» - например, следить за тем, чтобы отслеживать процесс, который хранит непрочитанные подсчеты в памяти, чтобы он мог обслуживаться в любой момент.
Проблема, которую вам не хватает, заключается в том, что подсчет непрочитанных элементов во время выполнения крайне неэффективен - O (n) для количества непрочитанных элементов - и, следовательно, непрактично в больших масштабах. Подход читателя к этому заключается в том, чтобы наложить кол-во на количество непрочитанных элементов, которые он будет считать. –
Я вообще этого не пропустил. Это просто не актуально. Количество элементов, которые вы можете подсчитать во время выполнения с приведенной выше схемой, огромно в реальных условиях, и современная база данных, как правило, просто использует индекс, а не читает строки, чтобы получать подсчет непрочитанных элементов. Не микро-оптимизируйте. Вышесказанное представляет собой прочную конструкцию. – cletus
Я просто добавлю, что на самом деле важно, чтобы вы получили прочный дизайн. Тогда и только тогда вы оптимизируете его, если и только если вам нужно. В этом случае вы можете денормализовать модель, сохранив непрочитанные счета в пользовательской фиде, но не начинайте это. Это означает, что вам нужно иметь дело с проблемами обновления значений в двух таблицах, когда элемент читается, а значения могут выйти из синхронизации. – cletus