2012-06-23 80 views
0

此问题与数据库/ RDBMS有关,我对性能和记录处理知之甚少。将图像存储到数据库中

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

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

期待数据库专家的参与。

+0

是将图像存储在文件中。数据库中的文件路径是一种很好的方法。 – vijay

回答

2

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

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

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

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

  • 在这两个之间,这取决于您使用

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

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

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

0

将图像存储在文件系统上或(更好的是)存储在CDN或诸如Amazon S3中。在RDBMS中只存储元数据(包括实际图像文件的位置)。