Database 执行或不执行:将图像存储在数据库中
在web应用程序的上下文中,我的老上司总是说在数据库中放置对图像的引用,而不是图像本身。我倾向于同意在数据库中存储url和图像本身是一个好主意,但是在我现在工作的地方,我们在数据库中存储了很多图像 我能想到的唯一原因也许是它更安全?你不希望有人直接链接到url?但如果是这种情况,您可以始终让网站/服务器处理图像,就像asp.net中的处理程序一样,以便用户需要进行身份验证才能查看图像。我还认为从数据库中取出图像会影响性能。为什么将图像存储在数据库中可能是个好主意/不太好主意的任何其他原因Database 执行或不执行:将图像存储在数据库中,database,performance,blob,Database,Performance,Blob,在web应用程序的上下文中,我的老上司总是说在数据库中放置对图像的引用,而不是图像本身。我倾向于同意在数据库中存储url和图像本身是一个好主意,但是在我现在工作的地方,我们在数据库中存储了很多图像 我能想到的唯一原因也许是它更安全?你不希望有人直接链接到url?但如果是这种情况,您可以始终让网站/服务器处理图像,就像asp.net中的处理程序一样,以便用户需要进行身份验证才能查看图像。我还认为从数据库中取出图像会影响性能。为什么将图像存储在数据库中可能是个好主意/不太好主意的任何其他原因 精确
精确副本:
精确副本:
精确副本:
精确副本:
精确副本:
精确副本:
完全重复:您不必存储URL(如果您觉得这样不安全)。您只需存储一个在别处引用图像的唯一id即可
数据库存储往往比文件系统更昂贵,维护成本也更高,因此我不会在数据库中存储大量图像。最简单/性能最好/可扩展性最好的解决方案是将图像存储在文件系统上。如果担心安全性,请将它们放在web服务器无法访问的位置,然后编写一个脚本来处理安全性并提供文件
假设您的web/app服务器和DB服务器是不同的机器,您将通过在DB中放置图像来获得一些成功:(1)两台机器之间的网络延迟,(2)DB连接开销,(3)为每个提供的图像使用额外的DB连接。我更关心的是最后一点:如果您的站点提供大量图像,那么您的web服务器将消耗许多数据库连接,并可能耗尽您的连接池。将图像存储到数据库的优点之一是,它可以跨系统移植,并且独立于文件系统布局。如果您有时需要检索图像,并且图像必须在多个不同的web服务器上可用。但我想差不多就是这样
- 如果它不必在多个服务器上可用,那么最好将它们放在文件系统中李>
- 如果它必须在多个服务器上可用,并且系统中实际上存在某种负载,那么您将需要某种分布式存储
除此之外,不要这样做。如果您的应用程序在多台服务器上运行,我会将图像的参考副本存储在数据库中,然后根据需要在文件系统上缓存它们。与尝试横向同步文件系统相比,这样做并不是一件容易出错的麻烦事
如果您的应用程序位于一台服务器上,那么是的,请坚持使用文件系统,并让数据库维护数据路径。我的一般建议是不要将自己局限于一种或另一种方法—使用适合这种情况的技术。文件系统非常擅长存储文件,而数据库非常擅长根据请求提供一点点大小的数据块。另一方面,我公司的一个产品要求将应用程序的整个状态存储在数据库中,这意味着文件附件也要存储在数据库中。使用我们的数据库服务器(SQLServer2005),即使是大型客户和数据库,我也还没有遇到明显的性能问题
Microsoft的SQL 2008通过FileStream功能为您提供了两全其美的功能—可能值得一看 我知道,如果你将图像存储在数据库中(甚至提到它),大多数数据库专业人员都会对你交叉手指并发出嘘声。是的,当使用数据库作为任何类型的大型二进制数据块的存储库时,肯定会影响性能和存储(图像往往是无法规范化的最常见的数据位)。然而,在某些情况下,图像的数据库存储不仅是允许的,而且是可取的 例如,在我以前的工作中,我们有一个应用程序,用户将图像附加到他们正在编写的报告的几个不同点上,这些图像必须在完成后打印出来。这些报告是通过SQL Server复制移动的,如果要以任何可靠性跨多个系统和服务器管理这些映像和文件路径,都会带来巨大的麻烦。将它们存储在数据库中“免费”为我们提供了所有这些功能,报告工具不必到文件系统检索图像。
- 数据数据库
- 文件系统