我正在构建自己的网络电子邮件,并希望尽可能优化地存储电子邮件附件。
以下是我正在努力实现的一般准则。。。
1.)它不是文件共享服务,而是电子邮件。
2.)我想确保大小合理的附件成功保存在数据库中。
3.)我想尽量减少附件在数据库中使用的空间量。
4.)我想使用中性的SQL方法,这样将来从MySQL迁移到PostgreSQL时就不会有问题。
5.)什么是合理的限制?我正在考虑单个附件的最高容量为16-25兆字节。
AOL、Hotmail、Gmail、Yahoo和其他公司似乎通常将附件编码为base64,这是一种文本类型。将附件存储为文本类型还是二进制类型在空间上更为优化?
我很乐意就主题做出任何澄清。
与Chue不同,我认为将附件存储在数据库中是非常好的。事实上,我也将我的文件存储在数据库中。由于我的所有应用程序都可以轻松访问数据库,所以我的所有程序访问文件都非常容易。但你的问题是关于什么数据类型。
只有少数几种选择。很遗憾,您的要求有冲突。它基本上可以归结为二进制字段或文本字段。这两种类型中的任何一种都可以扩展到您需求的许多倍。
为了最大限度地减少空间使用,您需要使用二进制,因为任何类型的文本编码都会增加使用的空间。MySQL的二进制数据类型为VARBINARY
(最多65535字节)或BLOB
(不受限制)。Postgre的二进制类型是BYTEA
。因此,不能在两台服务器上都有相同的类型。然而,在两者之间转换可能是一个非常简单的迁移脚本。
这两个数据库都支持一个VARCHAR
,它将支持您的需求。我会选择二进制格式。
至于合理的限制,许多现有服务提供10-20MB的附件。这似乎对大多数人都有效。随着越来越多的人开始用手机发送高清视频,你可能需要考虑提高这一限制。