问题的背景。
- 数据库是 PostgreSQL 9.1
- 数据是大量的文本(网页标记语言)
- 专栏是 bytea
因此,我可以使用 PHP 的 gzcompress 存储压缩文本,并可能将文件大小减少到 70%,然后将其存储在 bytea 列中。但是手术真的值得吗?是不是已经在 PostgrSQL 中使用 TOAST 压缩了 bytea 并且添加另一层压缩不会对数据大小产生重大影响?
问题的背景。
因此,我可以使用 PHP 的 gzcompress 存储压缩文本,并可能将文件大小减少到 70%,然后将其存储在 bytea 列中。但是手术真的值得吗?是不是已经在 PostgrSQL 中使用 TOAST 压缩了 bytea 并且添加另一层压缩不会对数据大小产生重大影响?
是和不是,这取决于您的应用程序。
RE:TOAST,根据 PostgreSQL 的文档压缩(使用 LZ),它们仅在文本大于 2KiB 的阈值时才调用压缩。
因此,如果您存储的 HTML 小于 2KiB,那么进行自己的压缩可能是值得的,但在这种情况下,我不会打扰,因为如今大多数 HTML 文档往往至少为 10KiB,并在您的应用程序层中实现压缩似乎很麻烦,并使您的数据不那么便携。在 PHP 中执行此操作也会对性能产生非常实际的影响。
但是,如果您正在为一个非常大的网络论坛存储一个存档,例如,其中的 HTML 平均将小于 2KiB,但其中有很多(一些论坛的帖子数达到数百亿),那么无论如何压缩数据都有一个很好的案例。
因此,如果您有很多(例如,>10GB 左右)的小数据,那么自己压缩数据可能是值得的,但始终首先进行分析和基准测试!, 否则就别费心了,让 PostgreSQL 整理一下吧。