在存储到db之前压缩大文本数据?

时间:2010-03-18 21:22:44

标签: database postgresql storage large-files

我有应用程序从系统LAN中检索许多大型日志文件。

目前我将所有日志文件放在Postgresql上,该表有一个列类型TEXT,我不打算在此文本列上进行任何搜索,因为我使用另一个外部进程,每晚检索所有文件并扫描敏感模式。

所以列值也可以是BLOB或CLOB,但现在我的问题如下, 数据库已经有了它的压缩系统,但是我可以像普通压缩器实用程序一样手动改进这种压缩吗?最重要的是,如果我手动预压缩大文件,然后我将二进制文件放入数据表中,它是否因为数据库系统提供内部压缩而无用?

3 个答案:

答案 0 :(得分:2)

我不知道谁会更有效地压缩数据,你或db,取决于使用的算法等。但是可以肯定的是,如果你压缩它,要求db再次压缩它将是一种浪费的CPU。一旦压缩,尝试再次压缩它会产生较少的增益,直到最终消耗更多的空间。

答案 1 :(得分:2)

PostgreSQL中使用的内部压缩是为了在速度方面犯错,特别是对于解压缩。因此,如果您实际上并不需要,如果在应用程序中压缩它,您将能够达到更高的压缩比。

另请注意,如果数据库执行压缩,则数据将以未压缩格式在数据库和应用程序服务器之间传输 - 这可能是也可能不是问题,具体取决于您的网络。

正如其他人所提到的,如果你这样做,一定要关闭内置压缩,否则你就会浪费周期。

您需要问自己的问题是,您确实需要比数据库提供的更多压缩,并且可以在应用程序服务器上为此节省CPU周期。找出可以对数据进行多少压缩的唯一方法就是尝试一下。除非获得实质性收益,否则不要理会它。

答案 2 :(得分:1)

我的猜测是,如果您不需要任何搜索或查询功能,您可以通过压缩文件然后直接将二进制数据直接存储在数据库中来减少磁盘使用量。