是否可以在PostgreSQL的表格中存储HTML页面,图像,PDF等文件,还是很慢?我读过一些文章说不建议这样做,但是我不知道这是否成立。
我想到的列类型是BLOB
(据我所知存储在文件中)或bytea
类型,但其他类型也适用。
最佳答案
您基本上有两个选择。您可以将数据直接存储在行中,也可以使用大对象工具。由于PostgreSQL现在使用一种叫做TOAST的东西将大字段移出表,因此与直接在行中存储大数据无关的性能损失。字段大小限制为1 GB。如果限制太小或需要流式API,则可以使用大对象工具,这将使您更像数据库中的文件描述符。您将LO ID存储在列中,并且可以从该ID中读取和写入。
我个人建议您避免使用大对象工具,除非您绝对需要它。借助TOAST,大多数用例都可以按照您期望的方式使用数据库。对于大型对象,您将承担额外的维护负担,因为您必须跟踪已使用的LO ID,并确保在不再使用它们(但以前不再使用)或将它们放在您的设备中时取消链接它们。数据目录永远占据空间。还有许多设施在它们周围具有异常的行为,因为我从不使用它们,所以这些细节使我无所适从。
对于大多数人而言,与在数据库中存储大数据相关的性能损失很大,这是因为您的ORM软件会在每个查询中提取大数据,除非您明确指示不要这样做。您应该注意告诉Hibernate或您使用什么来将这些列视为大列,并且仅在有特殊要求时才获取它们。
关于file - 在PostgreSQL中存储文件是否存在性能问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9605922/