Я создаю сайт, на котором есть сообщения и система ответов.
Я бы хотел, чтобы кто-то ответил, отправив уведомление тем, кто когда-либо отвечал (или участвовал) в почте.
Моя мысль состоит в том, чтобы создать таблицу с именем Notification
, содержащую message
и seen
(увиденное / непрочитанное) поле. Как только люди ответят, INSERT запишитесь в таблицу Notification
.
Это кажется простым и интуитивным, но, если есть много людей, вовлеченных в, например, 31-й пользователь отвечает, 30 человек, которые когда-либо отвечали, получат уведомление. Это сделает 30 строк записей SQL. И 32-й пользователь сделает 31 запись. Тогда общее количество строк станет 30+31=61
.
Мой вопрос:
Огромное спасибо.
Я создал подобную систему. Вот мой опыт:
Моя таблица уведомлений выглядит так: id (int) | user_id (int) | post_id (int) | last_visited (datetime).
user_id + post_id – уникальный составной индекс .
Поэтому, когда пользователь открывает страницу, я ищу запись (user_id + post_id) в базе данных. Если я найду его, то обновляю поле last_visited, если не найду, а затем создаю новую строку.
Когда мне нужны сообщения списка для уведомления, я просто запрашиваю все сообщения, созданные после last_visited time.
Также у меня есть cron sript, что чистое уведомление для закрытых сообщений или запрещенных пользователей.
Что касается ваших вопросов:
1 и 2: вам нужно найти баланс между объемом данных, которые будут храниться, и производительностью сайта. Если вам не нужно хранить все эти данные, вы можете следовать моему пути. Если эти данные необходимы, ваш путь лучше.
3: Это зависит от количества посетителей и других функций. Но вот несколько советов. Вы должны использовать индексы для таблицы MySql для лучшей производительности. Также вы должны подумать о cron-скрипте, который удалит ненужные уведомления. Если у вас есть огромное количество посетителей более 700 тыс. В день, вы думаете, что MogoDb или другая высокопроизводительная база данных noSql .