java : Is it a bad practice to store file streams in a database?

标签 java jpa filestreams

我正在读取特定文件组的文件流并将其作为 bytea 类型存储在数据库中。但是当我尝试从数据库中读取流并将这些流写入文件时,确实需要很长时间才能完成,最后出现内存不足异常。在涉及或不涉及数据库的情况下,是否有任何其他选择可以更有效地完成它?

最佳答案

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

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. 故障安全数据库中的复制重建需要更长的时间(我见过一些时间太长以至于冗余无法 catch 主数据库中的更改速度)。
  3. (意外地)大量引用文件的查询会导致 CPU 峰值,可能导致无法访问系统的其余部分(取决于数据库)。
  4. 返回这些查询结果的带宽会窃取系统资源,从而阻止其他查询传达其结果(在某些数据库上更好,在其他数据库上更差)。

关于java : Is it a bad practice to store file streams in a database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707159/

相关文章:

postgresql - 为什么 JPA 实体管理器使用 glassfish 导致重复键值错误?

java - OneToOne 和 OneToMany 是否需要在 Hibernate 的两侧进行映射?

java - 无法转换 getSingleResult() 的结果

node.js - 在向 AVS api 发出请求时,request.pipe 函数的输出 mp3 中出现截止

java - 让 Ant 把依赖的 jar 放在 ./lib

java - Arraylist 的未检查警告

java - 如何在测试容器上公开容器之间的端口?

java - 在子类中创建打印父类(super class)方法的方法?

actionscript-3 - 错误#2044:未处理的IOErrorEvent :。 text =错误#2032:流错误

node.js - Node CSV 解析器