Построение очереди доставки сообщений в PHP - PullRequest
1 голос
/ 12 октября 2009

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

  • Определите, какой объем Священных Писаний они хотят получать стихи от
  • Определите ежедневную частоту сообщений и сколько стихов будет включено в каждое сообщение
  • Определите, в какое время суток они хотят получать сообщения
  • Следите за их прогрессом (чтобы они могли читать книгу за определенный период времени)

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

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

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

Есть идеи, как мне более эффективно моделировать и строить эту систему?

Вот моя текущая модель данных:

Модель данных http://www.kirkouimet.com/files/images/sendmescripture.gif

1 Ответ

1 голос
/ 13 октября 2009

Вы в значительной степени на правильном пути.

Предлагаемое решение должно легко масштабироваться, если вам когда-нибудь понадобится добавить дополнительные поля. Вы можете легко сегментировать свою базу пользователей, и каждый из N блоков обрабатывает 1 / N пользователей. Данные о предпочтениях и Священных Писаниях могут либо считываться из центральной БД, либо реплицироваться только для чтения ведомым. Ведомые устройства будут поддерживать свою собственную очередь, потенциально отправляя какие-либо сводные данные о состоянии обратно в главную систему. Конечно, вы можете обнаружить, что все работает нормально из одной коробки, и ваш первый шаг к масштабированию - выполнить некую циклическую обработку различных SMTP-серверов. Я полагаю, что очередь sendmail (или эквивалентная) может легко оказаться вашим самым большим, самым ранним, узким местом.

Я бы пошел вперед и выстроил все так, как вы запланировали, а затем очень тщательно выполнил бы некоторые тесты, чтобы выяснить, где что-то зависло.

...