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