Php 在PostgresSQL上保存之前压缩字符串是否有价值?

Php 在PostgresSQL上保存之前压缩字符串是否有价值?,php,postgresql,compression,Php,Postgresql,Compression,我们将加密文件内容存储在PostgresSQL数据库中。我们储存了很多。目前,我们无法在任何其他地方(如FTP或内部存储)写入此内容。然而,我们的数据库正在迅速变得越来越大 我已经知道PostgreSQL在默认情况下压缩字符串数据,所以我的问题是:在将字符串插入数据库之前,是否值得在应用程序端进行字符串压缩。这能节省空间吗 也许您知道在PostgreSQL表中存储文件时如何调整PostgreSQL或任何其他方法以节省一些空间 我的扩展答案 因为我想知道更多,所以我很少做实验 我用20000行

我们将加密文件内容存储在PostgresSQL数据库中。我们储存了很多。目前,我们无法在任何其他地方(如FTP或内部存储)写入此内容。然而,我们的数据库正在迅速变得越来越大

我已经知道PostgreSQL在默认情况下压缩字符串数据,所以我的问题是:在将字符串插入数据库之前,是否值得在应用程序端进行字符串压缩。这能节省空间吗

也许您知道在PostgreSQL表中存储文件时如何调整PostgreSQL或任何其他方法以节省一些空间


我的扩展答案

因为我想知道更多,所以我很少做实验

  • 我用20000行创建了源文件,其中1行=50000个随机字符
  • 创建文件,其中1行是使用
    gzdeflate
  • 我创建了一个包含一列的表,并将每行作为一行插入
  • 比较大小
结果如下:

  • 源文件-~1GB
  • 每行压缩的文件-4.45MB
  • 文本
    扩展存储
    -表大小13MB
  • text
    存储外部
    -表大小1MB+toast1027MB
  • bytea
    带有预压缩数据-表大小5.2MB
我想指出的是,使用
存储扩展
预压缩数据并将其存储为文本是可能的,结果是700kb表大小,但预压缩数据包含大多数字符集调色板以外的字符。检索这样的数据是不可能的

结论:

  • 如果您更喜欢将数据存储为
    文本
    ,那么每1GB内容约13MB的容量是一个很好的比率
  • 如果您需要更好的压缩,并且不介意将数据存储为blob/bytea,并创建其他脚本来管理插入/检索的数据。。。好。。。考虑一下这几个MB是否值得。
  • 还要记住:默认情况下,PostgreSQL正在压缩字符串
    >2kb
    。如果字符串少于2000个字符,则必须更改此设置或自行压缩数据
有关详细信息,请参阅

PostgreSQL的压缩算法很快,但不是很好,因此可以通过在保存数据之前压缩数据来节省空间


但是,您应该更改该表,以便对该列使用
外部
存储策略。否则,PostgreSQL将通过压缩已压缩的值而不必要地浪费CPU周期,结果会发现它们不会变小并按原来的方式存储。

谢谢您的帮助。我对这个话题做了更多的研究,我在原始问题下分享了这个话题。顺致敬意,我坦率地承认我不能完全理解所有的事情,但我建议你把它作为一个答案而不是问题的补充。