数据库blob与磁盘存储文件

时间:2012-07-11 17:49:42

标签: database file-upload blob

所以我有这个要求说应用程序必须让用户每月上传和下载大约6000个文件(主要是pdf,doc,xls)。

我在考虑最佳解决方案。问题是我是否会在我的数据库中使用BLOb,或者使用简单的文件层次结构来编写/读取这些文件。

应用程序架构基于Java 1.6,Spring 3.1和DOJO,Informix 10.X。

所以我只是根据你的经验来建议。

2 个答案:

答案 0 :(得分:9)

当询问什么是“最佳”解决方案时,最好包括您的评估标准 - 速度,成本,简单性,维护等。

Mikko Maunu给出的答案几乎就是钱。我在20年内没有使用过Informix,但是大多数数据库在处理BLOB时都有点慢 - 特别是将BLOB导入和导出数据库的步骤可能很慢。

随着越来越多的用户同时访问系统,这个问题会越来越严重,特别是如果他们使用Web应用程序 - 应用程序服务器必须非常努力地将文件导入和导出数据库,可能会消耗更多的内存这些请求比正常情况要好,并且完成与文件相关的请求可能比“普通”页面需要更长的时间。

这可能会导致网络服务器在中等负载下放慢速度。如果您选择将文档存储在数据库中,我强烈建议您运行一些性能测试以查看是否存在问题 - 这种解决方案往往会暴露您的设置中的缺陷,否则将无法解决(慢速网络)连接到数据库服务器,Web服务器中的RAM不足等。)

为了避免这种情况,我已将文档的“主”副本存储在数据库中,因此它们都会一起备份,我可以向数据库询问“我是否拥有用户x的所有文档? ”。但是,我在网络服务器上使用了一个缓存,以避免从我需要的数据库中读取文件。如果您有一个“一次写入,多次读取”时间解决方案,如内容管理系统,缓存可以获得保留,这很有效。

答案 1 :(得分:6)

如果数据库中有与这些文件相关的其他数据,则将文件存储到文件系统会使其更复杂:

  1. 备份应单独进行。
  2. 交易必须单独实施(尽管文件系统操作甚至可能)。
  3. 数据库和文件系统结构之间的完整性检查不是开箱即用的。
  4. 没有级联:因删除用户而移除用户图片。
  5. 首先,您必须从数据库中查询文件路径,然后从文件系统中选择一个。
  6. 基于文件系统的解决方案的优点在于,有时能够直接访问文件是很方便的,例如将图像的一部分复制到其他地方。当然,存储二进制数据也可以大大改变数据库的大小。但无论如何,两种解决方案都需要更多的磁盘存储空间。

    当然,所有这些都可以提供比当前可用的更多数据库资源。一般来说,性能可能会受到很大影响,尤其是在本地文件系统和远程数据库之间进行决策时。在您的情况下(每月6000个文件)原始性能不会有问题,但延迟可能是。