Как бы я организовал данные для отправки многих электронных писем пользователям? - PullRequest
0 голосов
/ 30 мая 2011

Это больше в поисках совета / лучшей практики. У нас есть сайт с большим количеством пользователей (> 200 000), и нам нужно отправлять им электронные письма о событиях, происходящих в их регионах. Что было бы лучшим способом пошатнуть добавление рабочих мест?

На что обратить внимание:

  • Мы храним все в базе данных MySQL
  • Электронные письма отправляются в системе на основе очередей, а независимые работники берут задания и отправляют их.
  • Мы собираем имя пользователя, дату присоединения, которые мы можем использовать для группировки

Отправка писем не является проблемой, проблема заключается в добавлении рабочих мест. Я боюсь падения производительности, если мы вдруг попытаемся добавить столько рабочих мест одновременно.

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Надеюсь, ваше требование аналогично отправке писем с новостями группам новостей и подписчикам.

У вас уже есть групп и возможно ли их реализовать.

Это поможет фильтровать и избежать фильтрации целых 200000 пользователей.

отправка электронных писем по группам снизит нагрузку на БД, я надеюсь !!.

в db может быть статус активный и неактивный для пользователя.

выполнение задания cron - это решение.но интервалы зависят от нагрузки, которая может повлиять на работу вашего сервера.так что если дБ, проектные и рабочие интервалы хороши, производительность будет лучше

0 голосов
/ 30 мая 2011

Установите задание cron каждые 5 минут. Пусть он проверит, есть ли письма для отправки. Если есть, и ни один из них не установлен как «в процессе», выберите первый и установите его как «в процессе». Выберите первых пользователей с идентификатором <<code>n и отправьте им. Следите за последним идентификатором и повторяйте, пока не дойдете до конца списка пользователей.

0 голосов
/ 30 мая 2011

Я предполагаю, что ваша очередь представляет собой таблицу в базе данных, и вы обеспокоены тем, что добавление в нее тысяч записей приведет к ее перебоям, поскольку индекс каждый раз перестраивается?

Если вы добавляете много записей в одном процессе (например, один http-запрос или один скрипт cronjob), вы можете начать транзакцию перед вставкой и зафиксировать ее после завершения. Со всеми вставками внутри транзакции индекс будет обновляться только один раз.

Если это более общая проблема, вы можете рассмотреть возможность использования очереди сообщений вместо таблицы базы данных.

Или я полностью выключен?

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