我将电子邮件存储在mysql数据库中,并想知道使用compress(https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_compress)将获取的电子邮件附件存储在数据库中以减小数据库的大小是否是个好主意。 / p>
为什么我犹豫不决,大多数附件已经被压缩(如jpg)。另一个原因是我找不到任何关于MySql的内置压缩算法的效率。
答案 0 :(得分:2)
根据您提供的其他信息,似乎(a)您不需要能够搜索文件,只需检索文件,(b)您的数据库限制为1GB。我建议您不要将文件存储在数据库中,而只需存储一个'密钥'到文件,这可能只是一个唯一的文件名。
在您的数据库中,您可以存储原始用户文件名,但将附件写入具有唯一标识符的文件存储区(它甚至可以只是列ID,也可以创建正确的GUID。
这会使您的数据库变小,从文件中检索附件不会比从数据库中检索它们更长。当您在检索时将文件写回时,请传递原始文件名,而不是重命名的文件名。
如果您期望大量文件,那么您可以在目录之间对存储进行分片,这样它们就不会变得太大,如果您需要,最终可以跨文件系统。
如果1GB是数据库和存储的限制,那么当然这可能没什么帮助。在这种情况下,是的,您应该压缩文件,但正如您已经知道的那样,对于已经采用压缩格式的文件,您可能无法获得非常好的压缩率。
支持将文件保留在数据库之外的最后一点是,它可以帮助保持数据库精简,从而加快备份/恢复或迁移活动的速度。
答案 1 :(得分:0)
对我而言,这取决于该邮件的实际使用情况:
首先:您真诚期待多少流量以及您拥有多少存储空间? (如果你有很多空间,很少有用户为什么要这么麻烦?)
第二:今天的大部分格式(jpg,odf文档,办公文档,mp3)都已经过压缩,所以你不会从中得到很多东西
第三:压缩可以增加你的CPU使用率,所以你必须看看在高峰时段你的流量是多少,看看这是不是一个问题(很可能不是)如果您计划在服务器中使用服务器级文件系统,那么有些文件系统会透明地压缩数据,因此您可能希望以其他方式投入时间
另一方面,如果你的资源非常有限,你可能会被迫压缩al以减少空间消耗