在SQL Server数据库中存储电子邮件正文?

时间:2015-01-27 12:22:04

标签: sql-server performance email sql-server-2008-r2

伙计我正在为我的客户构建一个批量电子邮件发送应用程序,现在我正在设计数据库架构。基本上每天会有数十万封电子邮件,我需要将它们存储在数据库中。

将电子邮件正文存储在数据库中的最佳方法是什么?我是否将它们存储在varchar(max)列中,还是将它们保存在文件系统中并将其路径保存在数据库中?或者还有其他方法吗?我只担心应用程序的性能。顺便说一下,我使用的是SQL Server 2008 R2。

4 个答案:

答案 0 :(得分:1)

我不知道SQL Server 2008我使用Mysql它有BLOB或TEXT列。

我认为SQL Server也有这种类型的字段。在LONGBLOB字段中,您可以存储大约L + 4个字节,其中L< 2 ^ 32

此外,您还可以存储任何附加文件。

答案 1 :(得分:1)

通常我不建议构建批量电子邮件发送活动,因为有很多事情要做以避免considering your email as spam

但是,如果您决定自己动手,则需要确定电子邮件的内容,仅限文本,可能包含嵌入图像的HTML,......

您可以使用varchar(max)作为字段类型。性能不会是一个大问题,但考虑考虑保留策略

如果您想将电子邮件另存为文件,那么您可以使用FILESTREAM,这将为您提供更好的性能,因为您使用的是SqlFileStream API

答案 2 :(得分:0)

只需使用varchar(max),因为它是保存数据库中所有数据的最简单选项,因此您可以迁移,复制或修改数据库,并且所有内容都将保持不变。将部分数据存储在数据库之外只会使事情变得复杂而没有任何好处。

数据部分的性能不会出现问题,您将在垃圾邮件中发送垃圾邮件时遇到更大的问题。

从一开始就考虑数据清理,因为分别存储每个电子邮件会随着时间的推移使用一些磁盘空间。使用合适的索引,数据量不应成为问题。

答案 3 :(得分:0)

执行此操作的最佳方法可能不是这样做:)您需要从客户端中找出他们想要这样做的确切原因。人们通常会存储这样的批量数据,因为他们认为应该这样,然后再也不会看到它。如果您需要存储这些数据,存储过程需要多长时间,以及存档过程是什么?正如在其他地方提到的那样存储指向模板的指针,然后插入的值将是一种更紧凑的方式,但同样,只有在你真的需要时才这样做。将电子邮件作为文件存储在文件系统中并不是一个疯狂的想法,但避免使用包含数千个文件的目录。

大型数据库需要考虑的其他因素是灾难恢复策略 - 每晚备份需要多长时间,在灾难恢复方案中还原多长时间。您要保留多少备份,在线和&离线,你需要多少空间?在这方面,拥有应用数据'和归档数据'在单独的数据库中可能是一个很好的起点。

从技术SQL Server的角度来看,有些东西可以提供帮助,例如表分区和数据压缩,但理解需求仍然是最重要的起点。

相关问题