将图像存储到数据库中

时间:2012-06-23 06:19:22

标签: database-design database-performance

这个问题与数据库/ RDBMS有关,我对表现和记录处理知之甚少。

如果我们需要存储与某些记录相关的图像,那么什么是更好的选择(性能明智)。是否,我们应该将图像作为字段存储到数据库中,或者维护我们自己的文件并将文件路径存储到数据库中。

我认为当前的rdbms应该能够自己处理图像文件,我们可以依赖它们。但是,如果多个记录(或来自不同tablse的记录)引用相同的图像,那么我认为,最好存储文件的路径而不是自我形象。

期待数据库专家的意见。

2 个答案:

答案 0 :(得分:2)

微软研究院的一篇非常好的论文名为To Blob or Not To Blob

经过大量的性能测试和分析后得出的结论是:

  • 如果您的图片或文档的大小通常低于256K,则将它们存储在数据库VARBINARY列中效率更高

  • 如果您的图片或文档的大小通常超过1 MB,则将它们存储在文件系统中会更有效(并且使用SQL Server 2008的FILESTREAM属性,它们仍然处于事务控制之下并且是数据库的一部分)< / p>

  • 介于这两者之间,取决于您的使用情况,这是一个小小的挑战

当然,这是特定于SQL Server的 - 但我敢打赌其他RDBMS会有类似的行为 - 达到一定的大小,没关系,实际上更好(更高性能)将图像存储到数据库中,但是如果它们增长太大了,它们对关系引擎造成了太大的负担。

将路径名只存储到数据库中并将实际图像保留在数据库引擎之外的问题当然是你的数据库中没有任何关于该图像文件是否仍然存在的控件,重命名或移动。文件系统操作没有“事务保护伞” - 因此您需要能够处理事实文件可能不再存在,即使它们的名称存储在数据库表中。

具有FILESTREAM功能的SQL Server修复此问题 - 您的文件保留在磁盘上 - 但SQL Server对它们有一个“事务保护伞”,如果没有SQL Server知道它们,它们就不能被删除或移动(并且允许它)。

答案 1 :(得分:0)

将图像存储在文件系统上或(更好地)存储在CDN或Amazon S3之类的东西上。仅在RDBMS中存储元数据(包括实际图像文件的位置)。