Sql server 使用sqlserver作为图像存储
SQLServer2008是作为电子商务网站的图像存储的好选择吗?它将用于存储各种大小和角度的产品图像。web服务器将输出这些图像,通过集群ID读取表。图像总大小约为10GB,但需要扩展。我看到使用文件系统有很多好处,但我担心SQL server没有O(1)查找功能并不是最好的解决方案,因为该站点有很多流量。那会是一个瓶颈吗?有什么想法,或者其他选择吗?对于电子商务网站之类的东西,我可能会选择将图像存储在数据库的blob存储中。虽然您不想过早地进行优化,但让我的图像与我的数据一起方便地组织起来,并且非常便于携带,这是电子商务之类的自动好处。如果图像被索引,那么查找将不会是一个大问题。我不确定,但我不认为文件系统的查找是O(1),更像O(n)(我不认为文件是由文件系统索引的)Sql server 使用sqlserver作为图像存储,sql-server,image,store,Sql Server,Image,Store,SQLServer2008是作为电子商务网站的图像存储的好选择吗?它将用于存储各种大小和角度的产品图像。web服务器将输出这些图像,通过集群ID读取表。图像总大小约为10GB,但需要扩展。我看到使用文件系统有很多好处,但我担心SQL server没有O(1)查找功能并不是最好的解决方案,因为该站点有很多流量。那会是一个瓶颈吗?有什么想法,或者其他选择吗?对于电子商务网站之类的东西,我可能会选择将图像存储在数据库的blob存储中。虽然您不想过早地进行优化,但让我的图像与我的数据一起方便地组织起来,
在这种设置中,让我担心的是数据库的大小,但如果管理正确,这不会是一个大问题,而且一个大的优点是,您只需要备份一件事(数据库),而不必担心磁盘上的文件。10 Gb的数据量不是很大,因此您可能可以使用数据库来存储它,并且不会有大的问题,当然,从性能角度来看,最好使用文件系统,从安全管理角度来看,最好使用DB(备份和一致性) 幸运的是,Sql Server 2008允许您既有蛋糕,也有蛋糕,包括: 在SQLServer2008中,您可以将FILESTREAM属性应用于varbinary列,然后SQLServer将该列的数据存储在本地NTFS文件系统中。将数据存储在文件系统上带来两个关键好处:
- 性能与文件系统的流性能相匹配
- BLOB大小仅受文件系统卷大小的限制
在SQL Server 2008中,FILESTREAM列只能在本地磁盘卷上存储数据,FILESTREAM列不支持透明加密和表值参数等某些功能。此外,尽管支持日志传送,但您不能在数据库快照或数据库镜像会话中使用包含FILESTREAM列的表。通常,一个好的解决方案是将映像本身存储在文件系统中,并将元数据(文件名、维度、上次更新时间、您需要的任何其他内容)存储在数据库中
话虽如此,却没有“正确”的解决方案。请查看MS Research()的白皮书 他们详细说明了你要找的东西。简短的版本是,与在文件系统上保存数据相比,任何超过1 MB的文件大小都会开始降低性能。我怀疑查找的
O(log n)
是否会有问题。你说你有10GB的图像。假设平均图像大小为50KB,则为200000个图像。在表中对200K行执行索引查找不是问题。与实际从磁盘读取图像并通过应用程序传输到客户端所需的时间相比,这将是很小的
与在数据库中将路径存储到文件系统上的文件相比,将图像存储在数据库中通常的优缺点仍然值得考虑。例如:
- 数据库中的图像遵守事务隔离,删除行时自动删除,等等
- 具有10GB图像的数据库当然比只存储图像文件路径名的数据库要大。备份速度和其他因素是相关的
- 当您通过应用程序从数据库提供图像时,需要在响应上设置MIME头
- 文件系统上的映像更容易由web服务器缓存(例如Apache mod_mmap),或者可以由更精简的web服务器(如lighttpd)提供服务。这实际上是一个很大的好处