【问题标题】:Storing Email Body in SQL Server database?在 SQL Server 数据库中存储电子邮件正文?
【发布时间】:2015-01-27 12:22:04
【问题描述】:

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

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

【问题讨论】:

  • 大多数批量电子邮件不只是模板的变体吗?为什么要保存所有消息?
  • 嗯,除了其他的名字会为每封电子邮件定制,所以这就是为什么我需要保存所有的电子邮件。
  • 您以后不能根据(未更改的)模板和少量可变字段重新创建邮件正文吗?

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      只需使用varchar(max),因为它将所有数据保留在数据库中是最简单的选择,这样您就可以迁移、复制或任何数据库,并且一切都将保持不变。将部分数据存储在数据库之外只会使事情变得复杂而没有任何收获。

      数据部分的性能不会有问题,如果垃圾邮件开箱即用,您将遇到更大的问题^H^H^H^H。

      只需从一开始就考虑数据清理,因为随着时间的推移,单独存储每封电子邮件会占用一些磁盘空间。有了合适的索引,数据量应该不是问题。

      【讨论】:

        【解决方案4】:

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

        对于大型数据库,还需要考虑灾难恢复策略 - 每晚备份需要多长时间,在 DR 场景中恢复需要多长时间。您要保留多少备份(在线和离线),您需要多少空间?在这方面,将“应用程序数据”和“归档数据”放在不同的数据库中可能是一个很好的起点。

        从技术 SQL Server 的角度来看,有些事情可能会有所帮助,例如表分区和数据压缩,但了解需求仍然是最重要的起点。

        【讨论】:

          猜你喜欢
          • 2011-01-10
          • 1970-01-01
          • 2022-11-12
          • 1970-01-01
          • 2015-11-02
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 2019-04-23
          相关资源
          最近更新 更多