java:将文件流存储在数据库中是一种不好的做法吗?

时间:2018-04-07 11:59:58

标签: java jpa filestreams

我正在读取某组文件的文件流,并将其作为bytea类型存储在数据库中。但是当我尝试从数据库中读取流并将这些流写入文件时,实际上需要很长时间才能完成,最后我会得到一个内存不足的异常。有没有其他替代方案可以在有或没有数据库的情况下更有效地完成?

1 个答案:

答案 0 :(得分:4)

数据库的设计考虑了一个关键问题:

When having a bunch of data, where we don't know the kinds of reports
that will be generated, how can we store the data in a manner that
preserves the data's inner relationships and permits any reporting
format we can think of. a

文件缺少数据库的一些关键特征。文件始终具有“按顺序排列的字符”的单一结构。他们也缺乏任何综合报告构建方法,报告通常仅限于简单的搜索,这些搜索几乎没有上下文,结果不会显示在文件的其余部分。

简而言之,如果您没有使用数据库的功能,请不要使用数据库。

许多人确实在数据库中存储文件;因为,他们有一个方便,而不是写文件系统存储的支持,他们剪切和粘贴数据库存储代码。让我们探讨一下后果:

  1. 备份和恢复成为问题,因为数据库的大小增长非常快,而备份和恢复的带宽是数据库大小的函数。
  2. 故障安全数据库中的复制重建需要更长的时间(我已经看到一些冗余无法赶上主数据库中的更改速率)。
  3. 查询(意外地)批量引用文件会占用CPU,可能会使对系统其余部分的访问不足(取决于数据库)。
  4. 返回这些查询结果的带宽窃取系统资源,阻止其他查询传达其结果(在某些数据库上更好,在其他数据库上更糟)。