Интересует вопрос организации БД, планировщика рассылок по кампаниям.
Есть таблицы:
subscribers (group_id | email | name)
subscribers_groups (id)
campaigns
campaigns_scheduled_overview (email | name | status | campaign_id | server_id | send_at | open_at | click_at | unsubscribe_at и т.д)
Сейчас так:
1. В рекламной кампании выбираю группу подписчиков для рассылки
2. Далее по группе подписчиков получаю получателей и добавляю в очередь на добавление в планировщик campaigns_scheduled_overview
3. Получатели добавляются в планировщик со статусом "Ожидает рассылки", далее уже работаю с таблицей campaigns_scheduled_overview (осуществляю выборку и рассылку писем
В чем вопрос: мне нужна полная стстистика по каждому получателю(ожидает, получил письмо, открыл, перешел по ссылке и т.д), на сколько так оптимально поступать (копировать получателей в промежуточную таблицу)?
Пункт 4. По идее я мог бы сразу брать получателей из таблицы subscribers, отправлять по ним письма и записывать информацию в таблицу статистики и потом ее уже обновлять,
но есть определенные НО:
1. Количество получателей больше млн.
2. Нужна очень быстрая выборка получателей, остановка рассылки, лимиты на отправку писем в СЕКУНДЫ, т.е дополнительные проверки, как следствие запросы в БД.
Вернемся к пункту 4. Если сразу брать данные из таблицы subscribers, отправлять информацию и записывать в таблицу статистики по каждой кампании,
то в случае проверки дополнительных условия (ограничение кол-ва отправок в секунды, минуты и т.д) выборка будет осуществляться из нескольких связанных таблиц, что по идее медленнее, чем из одной campaigns_scheduled_overview
При копировании получателей в промежуточную таблицу campaigns_scheduled_overview, выборки быстрые, но дублирование данных (получателей для каждой кампании), где компромисс? У кого есть опыт подобный? какие базы использовали и подходы?
готовишь данные, складываешь в кеш (редис, например). Из кеша берёшь и обрабатываешь. Статисктику кладёшь в очередь, не стоит её обрабатывать сиюминутно. И из очереди потихоньку складируешь в основную бд
По поводу кеша думал уже, но в итоге все равно получается так, что после рассылки 1 млн. писем для разных кампаний, у меня они все лягут либо в связанные таблицы(статистики) либо в одну таблицу campaigns_scheduled_overview о которой я писал выше. Т.е за счет кеша я получаю только быстрый доступ и проверки на момент отправки, но тогда получается, что при таком подходе, вполне можно использовать связанные таблицы
Обсуждают сегодня