PHP / MYSQL помощь для рассылки уведомлений всем пользователям (подписчикам) и даже миллионам из них - PullRequest
0 голосов
/ 30 августа 2011

Я хочу создать систему на PHP / MYSQL, с помощью которой пользователи сайта могут отслеживать / отменять подписку других пользователей того же сайта, и когда пользователь выполняет какую-либо деятельность, все подписчики этого пользователя должны получить уведомление.

Я знаю, что могу создать отдельные таблицы БД с именем notifications и вставить в него строку для каждого пользователя, которого нужно раздельно уведомлять, как это делал Facebook, но я не буду ограничивать пользователей (т. Е. На Facebook вы не можете иметь более 5000друзья), на моем сайте пользователи могут следить за любым количеством пользователей, которых они пожелают, и если у какого-то пользователя будет 1 миллион подписчиков, то на моем сервере его каждое действие приведет к отключению моего сервера.

Итак, как это сделать?задача, какой дизайн мне нужно использовать для моей базы данных Mysql, каким образом мне нужно вызывать эти строки, чтобы я мог отправлять уведомления всем последователям пользователя, и сервер также никогда не подводил.

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Подписчик извлекает уведомления от пользователей, которым он следует.Таким образом, уведомление - это отдельная строка в таблице.Рациональным является то, что, хотя у меня могут быть миллионы подписчиков, число людей, за которыми я следую, довольно мало (вероятно, менее 1000).

Также: подумайте о стратегии кэширования.

0 голосов
/ 19 декабря 2012

Используйте комбинацию вашего предложения и ответа и комментариев от Освальда.

Автор создает обновление, которое затем добавляет записи в таблицы (ы) уведомлений. Если у автора 10 000 подписчиков, то есть 10 000 записей. Это станет довольно большим, и потребуется использовать оптимизацию, кэширование и т. Д.

Затем последователь подключается через некоторый интервал (через клиента, похожего на веб-сайт Facebook или с рук) и извлекает свои уведомления. В этом случае я получаю уведомления от моего последнего посещения или от всех моих авторов. Опять же, это может быть 10000 строк, как вы указали, но с лучшими ключами поиск будет быстрым, поскольку вы получаете уведомления только для подписчика (его ID). После получения удалите ожидающие уведомления.

Второй альтернативой будет изменение уведомлений, чтобы просто иметь запись для автора, а также пост и дату. Подписчик подключается, запрашивает новые сообщения со времени его последнего поиска, а затем фильтрует их по автору. Попробуйте удалить как можно больше записей в первом запросе, затем попытайтесь выполнить фильтрацию как второй запрос или поиск в кэше ссылок. Не пытайтесь связать оба запроса, так как вы уничтожите сервер базы данных. Использование ключей / индексов, чтобы получить наименьший набор первым.

Если у подписчика есть несколько авторов, сначала запросите обновления автора, а затем - дату. В противном случае выполните поиск по дате, а затем по авторам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...