数据库blob与磁盘存储文件

Ale*_* Pi 7 database blob file-upload

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

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

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

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

Nev*_*uyt 9

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

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

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

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

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


Mik*_*unu 6

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

  1. 备份应单独完成.
  2. 事务必须单独实现(尽可能用于文件系统操作).
  3. 数据库和文件系统结构之间的完整性检查不是开箱即用的.
  4. 没有级联:因删除用户而删除用户图片.
  5. 首先,您必须从数据库中查询文件路径,然后从文件系统中选择一个.

基于文件系统的解决方案的优点是,有时能够直接访问文件是很方便的,例如将图像的一部分复制到其他地方.当然,存储二进制数据也可以大大改变数据库的大小.但无论如何,两种解决方案都需要更多的磁盘存储空间.

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