哪个是在服务器上存储文件的最佳方法(在数据库中或单独存储位置)?

时间:2013-01-08 13:10:19

标签: database jsp db2 websphere

在我的项目中(类似于mediafirerapidshare),客户端可以将文件上传到服务器。我使用的是DB2 databaseIBM WAS web server以及JSP as server side scripting。我正在创建自己的加密算法,因为这是该项目的主要目标。

我需要建议文件本身是否应存储在数据库中,或者是否只存储文件的位置。哪种方法最好?

3 个答案:

答案 0 :(得分:2)

一般知道将数据存储在数据库中 - 特别是大数据 - 这通常是一个坏主意。这些问题有很好的解释:

Storing a file in a database as opposed to the file system?

Storing Images in DB - Yea or Nay?

我想自己强调一些观点:

  • 在DBMS中存储文件会使您的数据变得非常大,而大型数据库则是维护地狱(特别是备份)
  • 可移植性成为一个问题,因为每个DBMS供应商都有自己的BLOB文件实现
  • 与磁盘访问
  • 相比,与BLOB字段的SELECT语句相关的性能丢失了

答案 1 :(得分:2)

在数据库中存储BLOB有优点和缺点。

优点

  • 现在,DBMS对BLOB的支持非常好
  • 对BLOB的JDBC驱动程序支持非常好
  • 访问“文档”可能发生在事务内部。无需担心手动清理或“内务管理”。如果删除了行,BLOB数据也是如此
  • 不必担心文件系统限制。文件系统通常不太擅长在单个目录中存储数百万个文件。您必须在多个目录中分发文件。
  • 一切都在一起支持。如果您进行数据库备份,则可以拥有所有内容,无需担心额外的文件系统备份(但请参见下文)
  • 通过SQL轻松访问(无需FTP或其他必要工具)。这种访问已经存在并受到控制。
  • 与其他数据相同的访问控制。无需设置OS用户组来限制对BLOB文件的访问。

缺点

  • 无法直接从操作系统访问(如果需要使用命令行工具操作文件,则会出现问题)
  • 不能由例如直接使用网络服务器(可能是性能问题)
  • 数据库备份(和恢复)更复杂(因为大小)。增量备份通常在文件系统中更有效
  • DBMS缓存注意事项
  • 不适合高写场景

你需要自己判断哪种优势和哪种劣势对你来说更重要。

我不同意广泛的假设,即在数据库中存储BLOB 总是一个坏主意。这取决于 - 与许多其他决定一样。

答案 2 :(得分:0)

我的意见是将相关信息(如路径,名称,描述等)存储在数据库中并保留文件evtl。在文件系统上加密,扩展你的系统添加网络服务器要比添加数据库便宜,因为网络空间与数据库比较便宜,你只需要在你的数据库或服务器名称中添加一个IP列,这样你就可以解决新的网络服务器。