2015-10-13 129 views
5

我知道不建议将图像作为BLOB存储在SQL中。但是,在本地PC和服务器上工作都会使两者之间的图像同步变得困难。是否还有一个理由不仅仅将BLOB用作备份,而是在本地创建一个缓存文件(以静态地提供服务)?MySQL Store Image BLOB Bad Practice Performance

从本质上讲,选择BLOB列时只是性能问题?如果唯一的影响是一个更大的表,那么我没有看到没有将图像直接关联到表条目的原因。

+0

更多信息我知道这并不直接回答,但你能解释一下为什么图像不能共享?他们可以托管在服务器上(或CDN)吗? – 1mike12

+1

@ 1mike12目前所有内容都存储在本地,所有路径都与基本目录/网站url相关,以便在不同环境下进行简单的开发。测试时不必担心打破生产站点,这样做更容易。只有MySQL数据库是中心的。 也许将来我会转而使用图像集中系统,但现在这更多的是一个普遍的SQL问题,部分原因是出于好奇。 – nebkat

+2

将图像(文件)存储到BLOB字段没有好的或不好的做法。这是相当需要的。基于偏见:我通常不会将图像存储到大型Java EE应用程序的文件系统中(严重的是,过去我完全厌倦这样做),因为它们无法与各自的数据库操作同步,特别是当它们要被发送到远程EE服务器。一点性能损失和/或一点数据库内存的低效率都不如正确性和完整性重要。另外,存储在数据库中的文件更安全。 – Tiny

回答

1

如果您可以公开您的图像 - 我建议您将图像保存在与您的数据库不同的(也可能更便宜的)存储上,例如S3。

但是,如果你的图像应该私人存储在数据库中并不是最差的选项,但你需要在你的代码中处理它们。

如果您使用mysql5.6和梭子鱼格式(这是今天最常见的),那么从MySQL的角度来看 - 存储BLOB列将在磁盘上有2个数据搜索,而不是1个,因为BLOB和TEXT列正在被保存在主数据页面之外。

你可以阅读这个Percona Blog Post