Я работаю над сайтом, который будет использовать функции социальных сетей (например, Facebook).
Я хотел бы внедрить систему уведомлений, которая показывает такие вещи, как "X добавил вас в друзья", "Y пригласил вас на вечеринку", "Z принял последний тест"... и я не знаю, как это сделать.
Интересно, что является лучшим решением:
- Решение 1, также известное как "регистрация".
Выделенная таблица "Уведомление". Я добавляю строки в эту таблицу каждый раз, когда происходит оповещение (добавление друзей, ответы на вопросы и т.д.). Таблица "Уведомление" имеет поля, которые содержат различную информацию в зависимости от того, какой тип уведомления добавлен в таблицу.
Хорошо: простота написания кода, разделение между функцией уведомлений и "обычными" функциями, не слишком много ресурсов, когда мне нужно читать таблицу.
Плохо: таблица уведомлений будет, вероятно, очень большой (я думаю, что я добавлю 10 000 строк/день в таблицу), "дублированная" информация: информацию в таблице уведомлений можно найти во всех других таблицах, используя дату/список/что угодно сравнение.
- Решение 2, иначе "смотреть везде".
Каждый раз, когда мне нужно показать список уведомлений или показать количество новых уведомлений, я просматриваю все соответствующие таблицы, сравниваю дату и т.д., Чтобы узнать, произошло ли что-то новое с момента последней проверки пользователем уведомления.
Хорошо: не слишком большая таблица по сравнению с решением 1, нет "избыточности" информации.
Плохо: я боюсь из-за количества пользователей (~ 1k+), он заставляет сервер взорваться, потому что он требует ресурсов/времени, немного сложнее для кодирования/обслуживания.
Можете ли вы сказать мне, что вы думаете, что лучше и почему, или у вас есть решение, которое я не представлял?
Спасибо =)
Изменить: Допустим, я использую действительно базовый дизайн БД: у пользователей есть друзья, они могут делать тесты.
1 таблица для списка пользователей, список опросов,
1 проверка таблицы & lt; → отношение пользователя,
1 пользователь таблицы & lt; → пользователь для дружбы.
Каждый раз, когда пользователь посещает свой собственный профиль, он может видеть, что произошло: новый опрос & lt; → отношение пользователя, новый пользователь & lt; → отношение пользователя и т.д. Как бы вы разработали такое уведомление?