Введение
Итак, у меня есть веб-приложение, которое каждый день отправляет много разных писем. Я хочу включить в электронные письма ссылку «Нажмите здесь, если вы не можете прочитать это электронное письмо».
Мне интересно, как лучше хранить это, и как это делают другие люди.
Проблема
Сегодня у меня есть такая таблица базы данных:
CREATE TABLE IF NOT EXISTS `mydb`.`httpsemail` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`from` VARCHAR(255) NOT NULL ,
`to` VARCHAR(255) NOT NULL ,
`subject` VARCHAR(255) NOT NULL ,
`body` MEDIUMTEXT NULL ,
`hash` CHAR(60) NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB
Содержимое электронной почты создается из множества различных шаблонов с различными данными, связанными с клиентом, которые вставляются в зависимости от получателя.
Таблица быстро разрастается до десятков тысяч строк (одна строка на отправленное письмо) и имеет размер в несколько гигабайт.
Я даже не уверен, что это проблема. Я всегда получаю электронные письма по первичному ключу, поэтому это быстро. Жесткий диск большой. Однако резервное копирование происходит медленно.
Возможные решения/улучшения
Возможным улучшением является повторное создание содержимого электронного письма, когда пользователь щелкает ссылку, вместо сохранения сгенерированного результата в базе данных. Однако тем временем входные данные могут измениться, и я хочу, чтобы электронное письмо было «исправлено», что означает, что пользователь должен видеть электронное письмо таким, каким оно было на момент отправки.
Еще одним улучшением может быть автоматическое удаление сохраненных электронных писем старше X дней. Однако это означает, что в какой-то момент ссылка перестанет работать, в зависимости от X. Меньшее значение X хорошо для свободного места, но плохо для пользователя. Как решить Х?
Мысли?