0

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

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

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

期待数据库专家的意见。

4

2 回答 2

2

Microsoft Research 有一篇非常好的论文,名为To Blob 或 Not To Blob

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

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

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

  • 在这两者之间,根据您的使用情况,这有点折腾

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

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

具有该功能的 SQL ServerFILESTREAM解决了这个问题 - 您的文件保留在磁盘上 - 但 SQL Server 对它们有一个“事务保护伞”,并且它们不能在 SQL Server 不知道(并允许它)的情况下被删除或移动。

于 2012-06-23T07:51:50.407 回答
0

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

于 2012-06-23T06:31:15.570 回答