2012-03-30 72 views
2

我搜索了这个,但只有找到方法将图像作为blob保存到数据库。 我想要做的是将图像位置保存在数据库中,然后从位置自动检索文件,而不是将其作为Blob保存到数据库中。 这是否有任何意义呢?或者,将图像文件作为blob保存到数据库中会更好,更快,更便宜? 根据地区我可能要得到不同的图片。使用休眠保存图像文件

感谢您的帮助!

回答

3

我有两种经验(将图像保存为RDBMS中的blob),并且只以文件系统/ url方式存储链接。我所认识到的第一种方法显然不可扩展。

下面是关于每种方法的一些比较偏颇的事情清单。

方法1.保存图像的斑点:

缺点:

  1. 当图像数量的增加,让您的数据库大小和 你被限制在您的RDBMS引擎运行的文件系统。

  2. 当你想要检索大量的这些斑点的,如果他们 面积大,你浪费IO/bandwdith并提出了应变上你 RDBMS引擎。理想情况下,您希望它具有快速执行 的短查询并移动少量字节。如果将数据保存为关系数据库中的BLOB,则您无法获得 。 虽然有些人可能会争辩说,对于可重复查询缓存 的帮助,我会争辩说,如果这些大块的数据首先不存在 ,我不必将它们放在缓存中。

  3. db管理员/内容管理员没有可靠的方法来轻松地 检索数据库中的blob内容,例如,以验证 图像是否损坏。他将不得不连接到数据库并以某种格式提取BLOB字节,然后查看它。或者 或者你可以建立一些页面来为他做这件事,但在我诚实的意见中, 将是一个非常糟糕的噱头。

优点:

  1. 你不必依赖于文件系统是在其上承载您的图像,可提供或外部 系统。你会 可能会写少一点的代码,你将有更多的控制 你的代码,因为你想要的所有东西都在你的RDBMS。

方法2。保存图像为纽带,以文件系统/网址

优点:

  1. 大大减轻了您的RDBMS发动机性能应变。

  2. 如果存储图像的链接,系统管理/内容管理 可以很容易地通过只复制在浏览器中的链接和 验证它呈现正常检查。

  3. 如果不使用外部图像托管服务,而是一个 内部,你仍然保留控制量很大,同时具有 可能在未来增加更多的图片托管服务器/ 文件系统。

  4. 如果您有大量图片被检索到,并且它们不是您托管的 ,那么您可以分发大量网络负载,从而使得加载时间更快捷。

缺点:

  1. 事情会有点分散增加了一些复杂应用程序。如果您使用的是外部托管服务,它可能已关闭,您无法控制它。

总之,我全心全意地推荐使用第二种方法。

+0

非常感谢您的帮助! – 2012-07-11 09:00:19

0

总的来说,我同意@巴巴的答案。

但是,这取决于图像的数量和大小。如果所有的图像都是小缩略图,那么我会将它们存储在数据库中,这样所有东西都在一个地方。

也可以做 ...只要存储空间可用于数据库和文件系统。这为您提供了两全其美和内置备份的最佳选择。