За последние 24 часа нас посетили 30506 программистов и 1809 роботов. Сейчас ищут 847 программистов ...

Как лучше реализовать хранение данных?

Тема в разделе "PHP и базы данных", создана пользователем MasterDmx, 27 июн 2016.

  1. MasterDmx

    MasterDmx Активный пользователь

    С нами с:
    17 авг 2014
    Сообщения:
    31
    Симпатии:
    0
    Всем привет. Делаю сервис "email рассылок" и возникла трудность с хранением данных.
    Подробнее:
    Есть главная база подписчиков (хранится в MySQL), туда пользователи добавляются.
    Необходимо делать массовые рассылки по всей базе, отбирая пользователей, которым нужно отправить (например только мужского пола). Причем отправить можно только 20 писем в 2 минуты. А так же есть автоматические рассылки, где сама программа делает письма по определенным критериям и потом отправляет (например пользователи посмотрел 5 товаров, это записалось в главную базу. Потом программа отправляет 5 писем с этими товарами, одно в час).

    В чем собственно вопрос: где хранить всю информацию об этих операциях?
    В первом случае думал при добавлении массовой рассылки - заранее отобрать пользователей из главной базы, а потом ее записать в другое место, что бы при рассылке постоянно не подключаться к MySQL.

    Во втором случае (автоматические рассылки) нужно где-то хранить какие товары нужно отправить и какие отправлены уже.

    Если все это делать через mysql то нужно постоянно перезаписывать строки, что бы потом определять кому уже отправлено, и кому нужно отправить.

    Были идеи использовать сторонние БД на файлах, или вообще использовать обычные файлы PHP. Можете что-нибудь посоветовать?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    делай на mysql
     
  3. MasterDmx

    MasterDmx Активный пользователь

    С нами с:
    17 авг 2014
    Сообщения:
    31
    Симпатии:
    0
    А не много подключений получится? Только для массовых рассылках нужно будет получить данные, отправить, а потом еще и записать в базу что была отправка. При условии, что update сделан одним запросов - все равно получаем 2 запроса за 2 минуты и так может быть на протяжении дня в зависимости от кол-ва подписчиков. Да и хранить бы хотелось данные: кому отправлено, кому не отправилось и тд.

    А с автоматической рассылкой еще больше в пару раз, там надо и список товаров вытащить из базы, и список подписчиков кому отправить а потом по каждому записать отдельно в базу, какое письмо ему отправилось.
     
  4. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Хранить в любом случае нужно, где угодно, но нужно.
    Испугались двух запросов? забавно.

    Почему лимит 20 писем, а не 25, попадает в спам-лист?
    Отправляйте письма в ночное время, когда теоретически народу меньше.
     
  5. MasterDmx

    MasterDmx Активный пользователь

    С нами с:
    17 авг 2014
    Сообщения:
    31
    Симпатии:
    0
    Не сказать, что испугался) но если есть возможность сделать компактнее, то почему бы и нет.

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

    Лимит 20 писем связан с квотой на отправку в сервисе рассылок
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Зачем каждый раз свою таблицу? Какая структура у базы данных сейчас?
     
  7. MasterDmx

    MasterDmx Активный пользователь

    С нами с:
    17 авг 2014
    Сообщения:
    31
    Симпатии:
    0
    Есть таблица, где хранится база подписчиков (id,Имя, email) и еще пару полей.
    Так же есть таблица, где хрянятся данные массовых рассылок, которые добавляются через админку (время отправки,тема письма, ID письма, лимиты для выборки пользователей).

    Принцип работы такой:
    Проверяется база рассылок, если скрипт нашел рассылку - запускает поиск по базе подписчиков, что бы найти тех кому отправлять и начинает отправку, 20 штук в 2 минуты.

    Если использовать mysql, то нужно записывать кому письмо было отправлено, что бы не было повторов. Да и рассылки могут пересекаться между собой. Например две одновременно.

    Изначально думал использовать какую-нибудь локальную базу на файлах. Привязывать файл к ID рассылки и туда записывать кому отправлено, кому не отправлено и тд. Но не знаю как это реализовать, потому что в дальнейшем база подписчиков может быть и под 100к.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Давай придумай всё же на табличке в базе данных. Как бы ты сделал? Включай мозги, задача простая.
     
  9. MasterDmx

    MasterDmx Активный пользователь

    С нами с:
    17 авг 2014
    Сообщения:
    31
    Симпатии:
    0
    До этого было реализовано все с главной базой. То есть когда пользователю отправлялось письмо, в его строку записывалось ID рассылки, через запятую. Но при ежедневной рассылке так делать не очень.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    используй один ко многим, по какой книге изучаешь MySQL?