Отправка оповещений по электронной почте для определенного местоположения - PullRequest
0 голосов
/ 30 марта 2012

На веб-странице есть карта Google, где пользователь может изменить местоположение на интересующее его и подписаться на уведомления о новых вакансиях, нажав кнопку. Сохраненный интересующий объект будет определяться границами карты Google. Всякий раз, когда в пределах этой границы появляется новое задание, этому пользователю отправляется оповещение по электронной почте на выбранной им частоте (каждый час или каждый день).

Проблема : я не совсем понимаю, как мне обрабатывать все оповещения для всех пользователей.

В настоящее время я думаю об использовании задания cron для таблицы со всеми lat1, lng1, lat2, lng2, user_id для ежечасных оповещений, которые запускаются каждый час, и еще одного задания cron для другой таблицы для ежедневных оповещений, которые запускаются один раз в день, например, в 21:00. Задание cron будет перебирать все пары lat, lng отдельного пользователя, которые определяют границы карты Google, и запрашивать в основной базе данных jobs любые задания с отметкой времени в течение 1 часа (или 1 дня). Если есть, уведомление будет отправлено по электронной почте.

Это похоже на большую работу для сервера, особенно когда в базе данных есть 5000 пользовательских настроек местоположения и 1 000 000 заданий. (30 минут до конца?) Я застрял здесь и хотел бы узнать ваше мнение.

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Я думаю, что вы, вероятно, можете создать два крон с этой частотой

  • по часам.
  • днем.

(или любая понравившаяся вам частота)

Вместо того, чтобы обрабатывать все оповещения для всех пользователей, почему бы, если пользователь не подписан на местоположение, в вашем php codeigniter создать файл задачи с подробной информацией об этой работе. Пример, user_id, местоположение (координата), частота. Точные детали для этого файла задачи зависят в вашей ситуации, и вам нужно будет проанализировать в вашей системе. Затем поместите этот файл задачи в каталог.

Затем на основе частоты, которую вы указали выше, создайте общий php-скрипт для вызова с этой частотой. Этот скрипт будет перебирать каталоги, обрабатывать файл задачи и отправлять электронную почту. Таким образом, вы не будете беспокоиться о сканировании всей базы данных. Также есть мелкие детали, такие как удаление, обновление, удаление файла задачи, но это полностью связано с реализацией.

Дополнительное замечание, вероятно, это бесполезно, так как вы помечаете этот вопрос php, но просто если вы хотите знать, кварц делает именно то, что вы хотите, но это на Java. Вы можете узнать здесь , если хотите.

0 голосов
/ 30 марта 2012

Вместо того, чтобы искать все при каждом запуске cron (при условии, что я правильно читаю, что это то, что вы делаете), я решил бы выполнить эту проверку при добавлении предупреждения:

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

На ежечасной проверке просто отправьте те, где почасовой флаг еще не применен, а для ежедневных отправьте тех, где дневной флажок не установлен.

Затем удалите все, где оба были установлены впоследствии.

Делая это таким образом, вы будете разбивать выполняемую работу от одной массовой проверки на каждом задании cron (Все оповещения, все границы) до одной меньшей проверки для каждого оповещения (Одно оповещение, все границы).

...