存储上传的图像:它应该存储在服务器上还是存储在数据库中?

时间:2012-06-29 20:40:05

标签: image oracle upload

我一直在努力翻新一个非常古老的基于Java Servlet的webapp。 webapp允许用户上传图像。 webapp存储数据库中图像的路径引用,但是将图像上传到它们所在的服务器上的目录。

webapp的数据库已升级到Oracle 11g,我被告知可以处理二进制信息。

所以,我的问题是,哪个更聪明?

将图像作为文件存储在服务器上还是将图像填充到Oracle 11g数据库中?

非常感谢提前

史蒂夫

3 个答案:

答案 0 :(得分:5)

是的,您可以在Oracle中将BLOB用于二进制数据。 (以及许多其他数据库。)我们在这里使用它们来存储PDF文件。

我已经看到它完成了两种方式。将图像存储在数据库中,或将图像存储在文件系统中,然后将文件名保存在数据库中。

存储在数据库中的优势

数据库中没问题。你拉出一条记录,相关的图像就在那里。

您可以在文件及其关联数据之间获得数据完整性(当然,假设一个良好的模式设计。)

获取数据和图像的一个逻辑操作。

我发现扩展数据库以保存大量二进制数据比使用文件系统替代方案更难,更昂贵。

存储在数据库中的缺点

并非所有工具都可以轻松浏览图像。

无法轻松访问网络上的图片。

根据文件大小和数量,您可能会在某些表格中获得大量原始数据。

加载和存储blob数据并不总是直截了当的。 (我最近为Hibernate写了一个自定义数据类型,例如,处理我们的blob PDF。)

文件系统的优势

读取和写入文件可能更有效。

如果您想在网络上提供图像,可以直接从文件系统中执行此操作。

在调试过程中更容易浏览图像,以及许多免费工具。

我认为在将Blob放入文件系统时缩放应用程序会更容易。

文件系统的缺点

数据完整性/一致性问题。更改有关文件结构的内容,您还需要在数据库中执行另一个步骤。

备份是另一回事。

多个逻辑操作(从数据库读取,从文件系统读取)以获取图像和数据。

答案 1 :(得分:1)

一个想法是将图像存储在服务器中并保持对图像实际位置的引用。这样,您可以为图片分配更多元数据,例如名称,大小,格式等,以便于查询。

答案 2 :(得分:1)

存储在服务器上,然后获取数据库中图像的数据。

即。您可以在上传时从图像中提取EXIF数据,然后将它们与文件系统引用一起存储在图像中。