Уменьшить запись базы данных в системе уведомлений или изменить подходящую базу данных? - PullRequest
0 голосов
/ 22 января 2019

У нас есть веб-приложение, которое требует отправки большого количества уведомлений пользователям (более 1,000,000 уведомлений в день).Мы используем Laravel и MySQL для базы данных.

Я перебираю группу пользователей, отправляю уведомления и сохраняю их в базе данных.Допустим, я хочу отправить группу из 1000 пользователей.Данные будут записаны в БД 1000 раз.Как я уже сказал, у нас более 1008 * уведомлений в день, которые занимают так много ресурсов.

Как правильно решить эту проблему?

Мне следует перейти на новую систему баз данных, такую ​​как MongoDB, или мне следует изменить схему таблицы уведомлений и способ сохранения в БД?

Ниже приведена моя схема таблицы уведомлений.

Laravel notification table structure

PS :: Мне нужно сохранить каждое уведомление в БД и показать его пользователям.Не могу пропустить эту часть.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Сокращение набора данных.

  • Используйте ascii для UUID. Вам действительно нужен UUID?
  • Сжать UUID в BINARY(16). (Это не решит кошмар масштабируемости, к которому ведут UUID, но некоторым поможет.)
  • Используйте ENUM для типов и состояний, а не для длинных VARCHAR.
  • В чем разница между двумя "типами"?
  • Вам нужен 8-байтовый BIGINT?
  • Есть 3 TIMESTAMP, вам нужно больше, чем один?

Я не вижу ничего подобного user_id ??

0 голосов
/ 22 января 2019

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

СХЕМА БАЗЫ ДАННЫХ

messages_contents (id, content, creation_by, создал_at, updated_at, updated_at)

user_notifications (идентификатор, идентификатор_пользователя, уведомление_идентификатора, статус, создан_кат, обновленный_ат)

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

Затем выполните цикл среди пользователей и вставьте их в таблицу user_notifications с user_id и notification_id.Изначально установите флаг status равным нулю, если вы хотите реализовать для этого механизм организации очередей.

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

Установите флаг status на единицу после отправки уведомления.

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