Database design 将图像存储到数据库中

Database design 将图像存储到数据库中,database-design,database-performance,Database Design,Database Performance,这个问题与数据库/RDBMS有关,我对性能和记录处理知之甚少 如果我们需要存储与某些记录相关的图像,那么更好的选择(性能方面)是什么。无论是将图像作为字段存储到数据库中,还是维护自己的文件并将文件路径存储到数据库中 我认为当前的rdbms应该能够很好地处理它们自己的图像文件,我们可以依赖它们。但是,如果多个记录(或来自不同表格的记录)引用同一个图像,那么我认为,最好存储文件的路径,而不是图像本身 期待数据库专家的选择。将图像存储在文件系统上,或者(更好的)存储在CDN上,或者类似于AmazonS

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

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

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


期待数据库专家的选择。

将图像存储在文件系统上,或者(更好的)存储在CDN上,或者类似于AmazonS3的东西中。在RDBMS中只存储元数据(包括实际图像文件的位置)。

微软研究院有一篇非常好的论文,名为

经过大量性能测试和分析,他们得出的结论如下:

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

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

  • 在这两者之间,这取决于你的使用情况

当然,这是特定于SQL Server的—但我打赌其他RDBMS也会有类似的行为—在一定大小的情况下,将图像存储到数据库中是可以的,而且实际上更好(性能更好),但是如果图像太大,则会对关系引擎造成太大的负担

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


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

是的,将图像存储在文件中。而数据库中的文件路径是一个很好的方法。