使用休眠保存图像文件

时间:2012-03-30 11:19:09

标签: database image hibernate blob

我搜索了这个,但只找到了将图像作为blob保存到数据库的方法。 我想要做的是将图像位置保存在数据库中,然后从该位置自动检索文件,而不是将其保存为数据库中的blob。 这有什么意义吗?或者将图像文件作为blob保存到数据库中更好,更快,更便宜? 根据区域设置,我可能需要获得不同的图片。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

以下是关于每种方法的相当偏颇的列表。

方法1.将图像保存为blob:

<强>缺点:

  1. 当图像数量增加时,您的数据库大小也会增加 您仅限于运行RDBMS引擎的文件系统。

  2. 当您想要检索大量这些blob时,以及它们是否存在 体积很大,你浪费了IO / bandwdith并给你带来压力 RDBMS引擎。理想情况下,您希望它具有执行的短查询 快速并移动一点点字节。你无法得到 如果您将数据保存为关系数据库中的BLOB。 虽然有些人可能认为对于可重复的查询缓存会 帮助,我会争辩说,如果那些巨大的数据块不在那里 首先,我不必把它们放在缓存中。

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

  4. 优点:

    1. 您不必依赖文件系统可用或外部 您托管图像的系统。你会 可能写一点代码,你将有更多的控制权 你的代码,因为你想要的所有东西都在你的RDBMS中。
    2. 方法2.将图像保存为文件系统/网址的链接

      优点:

      1. 大大减轻了RDBMS引擎的性能压力。

      2. 如果将图像存储为链接,则为系统管理员/内容管理员 只需在浏览器中复制链接即可轻松检查它们 验证它是否正确呈现。

      3. 如果您不使用外部图片托管服务,而是使用 在内部,你仍然保持着很大的控制力 未来可能添加更多图像托管服务器/ 文件系统。

      4. 如果你有大量的图片正在被检索,那么它们就是 不是由您托管,您可以分发大量的网络负载 使加载时间变得更快。

      5. 缺点:

        1. 事情会有点分散,为您的应用程序增加一些复杂性。如果您使用的是外部托管服务,它可能已关闭,您无法控制它。
        2. 总之,我全心全意地建议使用第二种方法。

答案 1 :(得分:0)

总的来说,我同意@ baba的回答。

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

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