【发布时间】:2015-09-08 17:39:11
【问题描述】:
这是一个与设计相关的问题。
我有一个在 tomcat 上运行的 java web 应用程序(连接到 MySQL 数据库)。它分别在 linux 和 windows 机器上运行(截至目前)。我应该存储作为输入的文件,其大小从 500 KB 到 100 MB(最大)不等。这些文件的用途是解析它们并获取所需的数据。我可以使用数据库模式中的“blob”来存储文件,访问它们以生成所需的输出并将它们存储在 MySQL db 中。否则,我可以使用文件系统将文件存储在 windows 或 linux 文件系统中,并使用它们来提取数据,将其存储在 MySQL db 中。在任何一个月中,我都会保存近 200 个不同长度的文件。我无法决定选择哪种实现方式?
以下是我比较文件系统与数据库的一些优缺点。
文件系统:
- 操作系统自动索引文件。
- 更容易访问文件。
- 我用于其他表的 MySQL 数据库不会存储大量数据(200 个文件 * 50 MB 平均 = 10GB 数据)。
- 不同的文件长度对 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:
- 访问速度更快。
- 所有数据的单一位置。从文件和文件中提取的数据存储在一个位置。
- ..
【问题讨论】:
-
您应该采用第一种方法,因为在任何一个月中,请求的数量都可能会增加,并且您可以轻松地从文件系统进行备份,并且您已经提到了 mysql 限制
-
在尝试将
INSERT或SELECT100MB 传入/传出LONGBLOB时,您可能会遇到数据包大小限制。 -
基本上
BLOBs之间的唯一区别是分配了多少额外字节(1 到 4)来保存长度。
标签: java mysql database database-design