代码之家  ›  专栏  ›  技术社区  ›  eulerfx

使用sqlserver作为图像存储

  •  20
  • eulerfx  · 技术社区  · 17 年前

    SQLServer2008是作为电子商务网站的图像存储的好选择吗?它将用于存储各种大小和角度的产品图像。web服务器将输出这些图像,通过集群ID读取表。图像总大小约为10GB,但需要扩展。我看到使用文件系统有很多好处,但我担心SQL server没有O(1)查找功能并不是最好的解决方案,因为该站点有很多流量。那会是一个瓶颈吗?有什么想法,或者其他选择?

    6 回复  |  直到 17 年前
        1
  •  27
  •   Vinko Vrsalovic    17 年前

    The FILESTREAM Attribute

    在SQLServer2008中,您可以将FILESTREAM属性应用于varbinary列,然后SQLServer将该列的数据存储在本地NTFS文件系统中。将数据存储在文件系统上带来两个关键好处:

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

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

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

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

        2
  •  3
  •   Joel.Cogley    17 年前

    http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45 )

    他们详细说明了你要找的东西。较短的版本是,与在文件系统上保存数据相比,任何超过1MB的文件大小都会开始降低性能。

        3
  •  1
  •   Bill Karwin    17 年前

    我对此表示怀疑 O(log n)

    与在数据库中将路径存储到文件系统上的文件相比,将图像存储在数据库中通常的优缺点仍然值得考虑。例如:

    • 数据库中的图像遵守事务隔离,删除行时自动删除,等等。
    • 当您通过应用程序从数据库提供图像时,需要在响应上设置MIME头。
    • 文件系统上的映像更容易由web服务器缓存(例如Apache mod_mmap),或者可以由更精简的web服务器(如lighttpd)提供服务。这实际上是一个很大的好处。
        4
  •  0
  •   Patrick Harrington    17 年前

    对于像电子商务网站这样的东西,我可能会选择将图像存储在数据库的blob存储中。虽然您不想过早地进行优化,但让我的图像与我的数据一起方便地组织起来,并且非常便于携带,这是电子商务之类的自动好处之一。

        5
  •  0
  •   rslite    17 年前

    在这种设置中,让我担心的是数据库的大小,但如果管理正确,这不会是一个大问题,一个很大的优势是,您只需要备份一件事情(数据库),而不必担心磁盘上的文件。

        6
  •  0
  •   Greg    17 年前

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

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