使用SQL Server作为映像存储

时间:2008-12-02 20:34:21

标签: sql-server image store

SQL Server 2008是否可以用作电子商务网站的图像存储?它将用于存储各种尺寸和角度的产品图像。 Web服务器将输出这些图像,通过聚簇ID读取表。总图像大小约为10 GB,但需要扩展。我发现使用文件系统有很多好处,但是我担心没有O(1)查找的SQL服务器不是最好的解决方案,因为该站点有很多流量。这甚至会成为一个瓶颈?有什么想法,或者其他选择?

6 个答案:

答案 0 :(得分:27)

10 Gb的数据量不是很大,所以您可以使用数据库存储它并且没有大问题,但当然使用文件系统是最好的性能,而且安全管理方面明智的做法更好。使用DB(备份和一致性)。

令人高兴的是,Sql Server 2008允许你吃蛋糕并吃掉它:

The FILESTREAM Attribute

在SQL Server 2008中,您可以将FILESTREAM属性应用于varbinary列,然后SQL Server将该列的数据存储在本地NTFS文件系统上。将数据存储在文件系统中有两个主要好处:

  • 性能与文件系统的流式传输性能相匹配。
  • BLOB大小仅受文件系统卷大小的限制。

但是,该列可以像SQL Server中的任何其他BLOB列一样进行管理,因此管理员可以使用SQL Server的可管理性和安全性功能将BLOB数据管理与关系数据库中的其余数据集成,而无需分别管理文件系统数据。

将数据定义为SQL Server中的FILESTREAM列还可确保数据库中的关系数据与物理存储在文件系统上的非结构化数据之间的数据级一致性。 FILESTREAM列的行为与BLOB列完全相同,这意味着完全集成了维护操作,如备份和还原,与SQL Server安全模型的完全集成以及完全事务支持。

应用程序开发人员可以通过两种编程模型之一处理FILESTREAM数据;他们可以像标准BLOB列一样使用Transact-SQL来访问和操作数据,或者他们可以使用带有Transact-SQL事务语义的Win32流API来确保一致性,这意味着他们可以使用对FILESTREAM的标准Win32读/写调用如果与文件系统上的文件进行交互,就会产生BLOB。

在SQL Server 2008中,FILESTREAM列只能在本地磁盘卷上存储数据,而且FILESTREAM列不支持透明加密和表值参数等功能。此外,尽管支持日志传送,但您不能在数据库快照或数据库镜像会话中使用包含FILESTREAM列的表。

答案 1 :(得分:3)

查看MS Research(http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45

的白皮书

他们详细说明了您正在寻找的内容。简短版本是,与保存文件系统上的数据相比,任何超过1 MB的文件都会降低性能。

答案 2 :(得分:1)

我怀疑查找O(log n)是个问题。你说你有10GB的图像。假设平均图像大小为50KB,那就是200,000张图像。在表中为200K行执行索引查找不是问题。与从磁盘实际读取图像并通过您的应用程序传输到客户端所需的时间相比,它会很小。

仍然值得考虑将数据存储在数据库中的常用优缺点,而不是将数据库中的路径存储到文件系统上的文件中。例如:

  • 数据库中的图像遵循事务隔离,删除行时自动删除等
  • 具有10GB图像的数据库当然比仅存储图像文件的路径名的数据库大。备份速度和其他因素是相关的。
  • 当您通过应用程序从数据库提供图像时,需要在响应上设置MIME标头。
  • 文件系统上的图像更容易被Web服务器缓存(例如Apache mod_mmap),或者可以由更精简的Web服务器(如lighttpd)提供服务。这实际上是一个非常大的好处。

答案 3 :(得分:0)

对于像电子商务网站这样的东西,我可能会将图像存储在数据库的blob存储中。虽然您不希望进行过早优化,但只是将我的图像与我的数据一起轻松组织,以及非常便携,这对于电子商务这样的事情来说是一种自动优势。

答案 4 :(得分:0)

如果图像已编入索引,则查找不会是一个大问题。我不确定,但我不认为文件系统的查找是O(1),更像是O(n)(我不认为文件是由文件系统索引的。)

在这个设置中让我担心的是数据库的大小,但如果管理得当,这不会是一个大问题,而且一个很大的优点就是你只有一件事要备份(数据库)而不用担心磁盘上的文件。

答案 5 :(得分:0)

通常,一个好的解决方案是将图像本身存储在文件系统中,以及数据库中的元数据(文件名,维度,上次更新时间,您需要的任何其他内容)。

话虽如此,对此没有“正确”的解决方案。