2

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

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

4

3 回答 3

3

在数据库中存储 BLOB 有利有弊。

好处

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

缺点

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

您需要自己判断哪个优势和哪个劣势对您更重要。

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

于 2013-01-08T13:46:08.407 回答
2

众所周知,将文件存储在数据库中——尤其是大文件——通常是个坏主意。这些问题有精彩的解释:

将文件存储在数据库中而不是文件系统中?

在 DB 中存储图像 - 是还是不是?

我想自己强调几点:

  • 将文件存储在 DBMS 中会使您的数据非常大,而大型数据库是维护的地狱(特别是备份)
  • 可移植性成为一个问题,因为每个 DBMS 供应商都有自己的 BLOB 文件实现
  • 与磁盘访问相比,SELECT 语句与 BLOB 字段相关的性能损失
于 2013-01-08T13:37:00.667 回答
0

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

于 2013-01-08T13:21:19.663 回答