2015-01-27 2 views
0

Ребята Я строю массовое отправление электронной почты для своего клиента, и сейчас я проектирую архитектуру базы данных. В основном будет сотни тысяч писем в день, и мне нужно их хранить в базе данных.Сохранение тела электронной почты в базе данных SQL Server?

Что будет лучшим способом сохранить тело электронной почты в базе данных? Я храню их в столбце varchar(max), или я сохраняю их в файловой системе и сохраняю их путь в базе данных? Или есть ли другой подход к этому? Меня беспокоит только производительность приложения. Btw Я использую SQL Server 2008 R2.

+0

Не является ли большинство писем по электронной почте только вариантами шаблона? Зачем сохранять все сообщения? –

+0

Ну, имена среди других вещей будут настроены для каждого письма, поэтому мне нужно сохранить все электронные письма. – NewbieProgrammer

+0

Не можете ли вы повторно передать тела почты после этого, основываясь на (неизмененном) шаблоне и нескольких переменных полях? – Arvo

ответ

1

Вообще-то я не рекомендую строить основную часть электронной почты отправителя деятельности, поскольку есть много вещей, чтобы сделать, чтобы избежать considering your email as spam

Однако, если вы решили сделать это вашу собственную личность вы должны решить содержание сообщения электронной почты, Это только текст, HTML, который может содержать встроенные изображения, ...

Вы можете использовать varchar(max) для типа поля. производительность не будет большая проблема, однако считает думать о политике удержания

, если вы хотите, чтобы сохранить электронную почту в виде файла, то вы можете использовать FILESTREAM, который предоставит вам более высокую производительность при условии, что вы используете в SqlFileStream API,

0

Просто используйте varchar(max), так как это будет самая простая опция для хранения всех данных в базе данных, чтобы вы могли мигрировать, реплицировать или что-либо из базы данных, и все будет сохранено. Хранение части данных за пределами базы данных только усложнит ситуацию без какой-либо выгоды.

Производительность на части данных не будет проблемой, у вас будет больше проблем с получением спама^H^H^H^H электронной почты, доставленной из вашей коробки.

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

1

Я не знаю SQL Server 2008 Я использую Mysql, чтобы иметь столбец BLOB или TEXT.

Я думаю, что SQL Server имеет этот тип полей. В поле LONGBLOB вы можете хранить около L + 4 байта, где L < 2^32.

Кроме того, вы можете хранить и прикрепленные файлы.

0

Лучший способ сделать это, вероятно, не делать этого :) Вам нужно выяснить у клиента, почему именно они хотят это сделать. Чаще всего люди хранят массовые данные, как это, потому что они думают, что должны, а затем никогда не смотрят на это. Если вам нужно хранить эти данные, как долго и каким будет процесс архивирования? Как упоминалось в другом месте хранения указателя на шаблон, тогда вставленные значения будут гораздо более компактным способом сделать это, но опять же, только сделайте это, если вам действительно нужно. Хранение электронных писем как файлов в файловой системе - это не сумасшедшая идея, но во избежание использования каталогов с тысячами файлов.

Что-то еще для больших баз данных - это стратегия аварийного восстановления - сколько времени потребуется для резервного копирования каждого ночь, как долго восстанавливаться в сценарии DR. Сколько резервных копий вы собираетесь сохранить, онлайн & в автономном режиме и сколько места вам нужно для этого? В этой связи хорошей записью может быть наличие «данных приложения» и «архивных данных» в отдельных базах данных.

С технической точки зрения SQL Server есть вещи, которые могут помочь, например, разбиение на таблицы и сжатие данных, но понимание этого требования по-прежнему остается самым важным местом для начала.