在PostgreSQL中存储文件是否存在性能问题?

可以在Postgresql的表格中存储HTML页面,图像,PDF等文件,还是慢?我读了一些文章,说这是不推荐的,但我不知道是否是真的。

什么是更好的使用,存储为BLOB(它存储在一个文件,对吗?)或一个字节类型的列?

你基本上有两个选择。您可以将数据直接存储在行中,也可以使用大型对象工具。由于Postgresql现在使用了一些名为 TOAST的东西来将大字段移出表格,所以不应该直接在行中存储大量数据而导致性能下降。一个字段的大小仍然保持1 GB的限制。如果这太有限,或者您想要一个流式API,您可以使用大型对象工具,这样可以让您更多地了解数据库中的文件描述符。您可以将LO ID存储在列中,并可以从该ID读取和写入。

我个人建议你避免大对象设施,除非你绝对需要它。使用TOAST,大多数使用案例只需使用数据库即可。对于大对象,您可以给自己额外的维护负担,因为您必须跟踪您使用的LO ID,并确保在不再使用它们(但不是之前)时取消链接,否则他们将坐在您的数据目录永远占用空间。还有很多设施在他们周围有异常的行为,其细节让我失望,因为我从不使用它们。

对于大多数人来说,与数据库中存储大量数据相关的大量性能损失是,您的ORM软件将在每次查询时都会提取大量数据,除非您明确指出不会。您应该注意告诉Hibernate或您正在使用的任何内容将这些列视为很大,只有在特别要求时才能提取它们。

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...