【问题标题】:Storing uploaded images: Should it be stored on the server or in the database?存储上传的图像:应该存储在服务器上还是数据库中?
【发布时间】:2012-06-29 20:40:05
【问题描述】:

我一直致力于改造一个非常古老的基于 Java Servlet 的 web 应用程序。 webapp 允许用户上传图片。 webapp 会在数据库中存储对图像的路径引用,但会将图像上传到它们所在的服务器上的目录。

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

那么,我的问题是,哪种做法更明智?

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

非常感谢

史蒂夫

【问题讨论】:

  • 数据库。这样,如果你想用附加信息“标记”图像,你可以有一个标签表等。此外,图像在未来的应用程序中将更容易处理。

标签: image oracle upload


【解决方案1】:

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

我已经看到它以任何一种/两种方式完成。将图片存入数据库,或者将图片存入文件系统,然后将文件名存入数据库。

存储在数据库中的优势

在数据库中一切正常。你拿出一个记录,相关的图像就在那里。

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

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

我发现扩展数据库以容纳大量二进制数据比文件系统替代方案更难且更昂贵。

存储在数据库中的缺点

并非所有工具都能轻松浏览图片。

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

根据文件大小和数量,您的某些表中可能会包含大量原始数据。

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

文件系统的优势

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

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

在调试期间更容易浏览图像,并且有很多免费工具可以做到这一点。

我相信将 blob 放入文件系统时更容易扩展应用程序。

文件系统的缺点

数据完整性/一致性问题。改变一些文件结构,你在数据库中还有一个步骤要做。

备份是另一回事。

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

【讨论】:

  • 谢谢,我想你只是卖给了我将图像存储在服务器上,尽管使用了更现代的上传和参考生成方案。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2014-05-09
      • 2019-03-17
      • 2013-03-23
      • 2011-09-14
      相关资源
      最近更新 更多