【问题标题】:Compressing large text data before storing into db?在存储到数据库之前压缩大文本数据?
【发布时间】:2010-03-19 23:38:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: database postgresql storage large-files


    【解决方案1】:

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

    【讨论】:

    • 这不仅是对 CPU 的浪费,它还使应用程序堆栈变得更加复杂(一切都需要知道如何在您应用到该领域的专业压缩中获取和获取纯文本)和脆弱(更多代码意味着更多错误)。重大改进的可能性很小,这将是一个糟糕的选择。
    【解决方案2】:

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

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

    正如其他人所提到的,如果您这样做,请务必关闭内置压缩,否则您会浪费周期。

    您需要问自己的问题是,您是否真的需要比数据库提供的更多压缩,并且您能否在应用服务器上为此节省 CPU 周期。找出可以对数据进行多少压缩的唯一方法是尝试一下。除非有可观的收益,否则不要费心。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        • 2012-11-03
        • 2021-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多