如何在 java 网络应用程序中存储文件?

How to store files in a java web application?

这是一个设计相关的问题。

我在 tomcat 上有一个 java 网络应用程序(连接到 MySQL 数据库)运行。它分别在 linux 和 windows 机器上运行(截至目前)。我应该存储作为输入的文件,其大小从 500 KB 到 100 MB(最大)不等。这些文件的用途是解析它们并获取所需的数据。我可以在数据库模式中使用 'blob' 来存储文件,访问它们以生成所需的输出并将它们存储在 MySQL 数据库中。否则,我可以使用文件系统将文件存储在 windows 或 linux 文件系统中,并使用它们提取数据,将其存储在 MySQL 数据库中。在任何一个月里,我都会保存近 200 个不同长度的文件。我无法决定选择哪个实现?

以下是我比较文件系统与数据库的一些优缺点。

文件系统:

  1. 自动索引文件OS。
  2. 更容易访问文件。
  3. MySQL 我用于其他表的数据库不存储大量数据(200 个文件 * 平均 50 MB = 10GB 数据)。
  4. 文件的不同长度对数据库来说并不重要(MySQL 的典型 blob 大小是,TINYBLOB:255 字节 BLOB:65,535 字节(64 KB)MEDIUMBLOB:16,777,215 字节(16 MB ) LONGBLOB:4 GB 因此,如果我的文件大小 >16MB,我应该将其存储为 LONGBLOB。这意味着对于大小范围,我应该使用 LONGBLOB 来存储 500 KB 文件或 100 MB 文件。

MySQL:

  1. 访问速度更快。
  2. 所有数据的单一位置。从文件和文件中提取的数据存储在一个位置。
  3. ..

阅读https://dba.stackexchange.com/questions/2445/files-in-the-database-or-not

这篇文章也不错:http://www.revsys.com/blog/2012/may/01/three-things-you-should-never-put-your-database/

我认为这取决于你有多少 read/write activity。如果你有像 MongoDB 这样的快速数据库,我个人赞成将这些文件保存在数据库中。你设置了 100MG 的限制,所以它也不会变得那么大。