Разработка персональной платформы для социальных сетей для университета, которая включает систему звезд для подсчета голосов и суммирования звезд, требует масштабируемого подхода. Вопрос о том, использовать ли счетчик базы данных, увеличивая общее количество просмотров на один каждый раз, когда кто-то голосует, или исследовать более масштабируемые методы, остается открытым.
Проектирование баз данных для подписчиков
Практическое решение включает использование небольшой таблицы с двумя внешними ключами, связанными с таблицей пользователей:
Таблица: Followers ------- UserID - PK FollowedByUserID
Для получения количества подписчиков просто выполните запрос:
SELECT COUNT(*) FROM Followers WHERE UserID = 12345
Для подсчета количества людей, на которых подписан пользователь, запрос изменяется следующим образом:
SELECT COUNT(*) FROM Followers WHERE FollowedByUserID = 12345
Если платформа испытывает значительный трафик, рассмотрите возможность добавления поля счетчика в таблицу пользователей для этих метрик. Однако это вводит двойные точки обслуживания при добавлении или удалении подписчика, что можно управлять с помощью триггера. Эта двойная поддержка требует тщательного рассмотрения.
Масштабируемый подход
Существует старая IT-поговорка: “преждевременная оптимизация — корень всех зол.” Избегайте попыток переиграть движок базы данных до тех пор, пока количество пользователей не достигнет значительных уровней, таких как миллион пользователей. До тех пор получайте подсчеты, выполняя SELECT COUNT(*) запросы из базовых таблиц. Правильное индексирование обеспечит отличную производительность.
Хотя важно осознавать потенциальные будущие проблемы, нет необходимости с самого начала подражать проектам баз данных крупных платформ, таких как Facebook и Twitter. Начните с основ и держите в уме масштабируемость, но помните о балансе между обучением и практическими ограничениями.