автоматические электронные письма из базы данных учетных записей пользователей

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

Я не ищу полноценный код, но здесь есть точка в правильном направлении. Я искал и читал последний день и видел много разных мнений по этому поводу.

Цель состоит в том, чтобы пользователь определил адрес электронной почты и скорость, с которой нужно проверять наличие новых данных. Например, они предоставляют test@test.com и 15 минут. Как только это будет сделано, я хочу проверять, добавляются ли новые данные в их учетную запись каждые 15 минут, и, если это так, оповещать их по электронной почте. У меня нет проблем с написанием реального кода, чтобы сделать это, просто я не уверен в «правильном» подходе к нему в плане планирования и автоматизации сценария.

  • MySQL взять планировщик — я не могу использовать это, поскольку это более чем строго операции с БД. Мне нужно на самом деле запускать PHP-код (отправка электронной почты и другие вещи) по расписанию, а не просто выполнять операции в БД.

  • Cronjob — я мог бы сделать эту работу, однако, это была бы ОДНА работа cron, которая проверяет КАЖДОГО пользователя в моей базе данных и должна была бы проверять с самым низким интервалом, который я предлагаю своим пользователям (1 минута). Конечно, мой первоначальный запрос к базе данных будет возвращать только те, которые он действительно должен проверить (где текущая временная метка> последняя временная метка оповещения + скорость в секундах). Я думаю, что запуск этого сценария для всего набора пользователей моей базы данных каждую минуту будет проблема с производительностью, особенно по мере роста базы пользователей. С этой опцией также потребуется блокировка файла в скрипте, который я бы подумал, чтобы он не запускался несколько раз.

  • Программная сторона — поскольку база данных привязана к программному обеспечению, которое пользователь устанавливает на свой компьютер, у меня также может быть программное обеспечение, которое «запускает» скрипт php, который я создаю, с заданным пользователем интервалом скорости. Если они установят его на 15 минут, он будет проверять сценарий каждые 15 минут. Это также будет работать, но по мере роста пользовательской базы это будет чрезвычайно большим количеством обращений к одной и той же странице довольно часто, поскольку каждая учетная запись пользователя будет делать это при настройке своего интервала, однако это также будет происходить только тогда, когда программное обеспечение работает для тот пользователь, который будет сокращать этот номер.

С учетом сказанного, есть какие-либо рекомендации? Положительные, отрицательные, за и против одного метода над другим или какое-то другое предложение, с которым я еще не сталкивался?

1

Решение

Забудьте о программной стороне, ваш чек должен быть ориентирован на сервер.

Я бы использовал работу cron для этого. Вы правы, у вас будет только 1 задание на cron для всего вашего пользователя, но это не проблема.

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

1

Другие решения

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

0