在我的项目中(类似于 mediafire
和 rapidshare
),客户端可以将文件上传到服务器。我使用 DB2 数据库
和 IBM WAS Web 服务器
以及 JSP 作为服务器端脚本
。我正在创建自己的加密算法,因为这是该项目的主要目标。
我需要建议是否应将文件本身存储在数据库中,或者仅应存储文件的位置。哪种方法最好?
最佳答案
在数据库中存储 BLOB 有利有弊。
优点
- 如今 DBMS 对 BLOB 的支持非常好
- JDBC 驱动程序对 BLOB 的支持非常好
- 对“文档”的访问可以在事务内进行。无需担心手动清理或“内务管理”。如果该行被删除,BLOB 数据也会被删除
- 不必担心文件系统限制。文件系统通常不太擅长在单个目录中存储数百万个文件。您必须将文件分布到多个目录中。
- 所有内容都一起备份。如果您进行数据库备份,您就拥有了一切,无需担心额外的文件系统备份(但请参见下文)
- 可通过 SQL 轻松访问(无需 FTP 或其他工具)。该访问已经存在并且受到控制。
- 与其余数据相同的访问控制。无需设置操作系统用户组来限制对 BLOB 文件的访问。
缺点
- 无法直接从操作系统访问(如果您需要使用命令行工具操作文件,则会出现问题)
- 不能由例如直接网络服务器(这可能是性能问题)
- 数据库备份(和恢复)更加复杂(因为大小)。在文件系统中增量备份通常更有效
- DBMS 缓存注意事项
- 不适合高写入场景
你需要自己判断哪个优点和哪个缺点对你来说更重要。
我不同意这种广泛流传的假设:将 BLOB 存储在数据库中总是是一个坏主意。这取决于——就像许多其他决定一样。
关于database - 在服务器上存储文件的最佳方法是什么(在数据库中或单独存储位置)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215701/