【问题标题】:How to store files in a java web application?java - 如何在Java Web应用程序中存储文件?
【发布时间】:2015-09-08 17:39:11
【问题描述】:

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

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

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

文件系统:

  1. 操作系统自动索引文件。
  2. 更容易访问文件。
  3. 我用于其他表的 MySQL 数据库不会存储大量数据(200 个文件 * 50 MB 平均 = 10GB 数据)。
  4. 不同的文件长度对 DB 没有太大影响(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. ..

【问题讨论】:

  • 您应该采用第一种方法,因为在任何一个月中,请求的数量都可能会增加,并且您可以轻松地从文件系统进行备份,并且您已经提到了 mysql 限制
  • 在尝试将INSERTSELECT 100MB 传入/传出LONGBLOB 时,您可能会遇到数据包大小限制。
  • 基本上BLOBs 之间的唯一区别是分配了多少额外字节(1 到 4)来保存长度。

标签: java mysql database database-design


【解决方案1】:

阅读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/

我认为这取决于您有多少读/写活动。如果您拥有像 MongoDB 这样的快速数据库,我个人更倾向于将这些文件保存在数据库中。您设置了 100MG 的限制,所以它也不会变得那么大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2023-03-15
    • 2015-09-30
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2016-07-26
    相关资源
    最近更新 更多