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