Php 在mysql中存储GZIP:ed文本?

Php 在mysql中存储GZIP:ed文本?,php,mysql,gzip,Php,Mysql,Gzip,对于较大的应用程序和数据库来说,在将文本数据插入数据库之前对其进行GZIP处理是一件常见的事情吗 我猜在重新解压缩之前,对实际文本字段的任何全文搜索都不会起作用。坏主意。当磁盘空间小于1 GB时,为节省一些空间而进行的额外处理不会抵消执行此操作所需的额外编程时间(不仅仅是最初,请记住维护) 这可能会降低数据库访问速度,因为数据需要解压缩/压缩。索引无法在压缩数据上正常工作,因为您需要进行表扫描、解压缩数据,然后进行比较。全文搜索也被取消了 如果必须这样做,请不要使用gzip。使用内置函数。我没有

对于较大的应用程序和数据库来说,在将文本数据插入数据库之前对其进行GZIP处理是一件常见的事情吗


我猜在重新解压缩之前,对实际文本字段的任何全文搜索都不会起作用。

坏主意。当磁盘空间小于1 GB时,为节省一些空间而进行的额外处理不会抵消执行此操作所需的额外编程时间(不仅仅是最初,请记住维护)

这可能会降低数据库访问速度,因为数据需要解压缩/压缩。索引无法在压缩数据上正常工作,因为您需要进行表扫描、解压缩数据,然后进行比较。全文搜索也被取消了


如果必须这样做,请不要使用gzip。使用内置函数。

我没有看到这样做太多,因为它基本上可以防止对MySQL端的数据进行任何操作:

  • 没有全文,是的
  • 但是也没有像那样的
    ,没有
    =
    ,没有其他操作
不过,如果您使用数据库只是存储数据,而不是对其进行操作,这可能会很有趣

注意:您可能需要做一些基准测试,以测量这可能对性能的影响,因为压缩/解压缩需要CPU


之后,问题是:您是在客户端(PHP)处理压缩,还是在服务器端(MySQL)处理压缩


在第二种情况下,您可能会对MySQL提供的一个函数感兴趣。

如果您在MySQL中将InnoDB表类型与最新版本一起使用,则可以启用表本身

它是在低级别管理的,因此不会更改您的查询或任何内容。据我所知,通过减少磁盘IO并允许在内存的缓冲池中存储更多数据,可以抵消压缩的轻微开销。不过,您确实提到了InnoDB不支持的全文搜索,所以这可能不是一个选项

MySQL中也有一种表类型,但我相信除了主键之外,您还失去了索引功能


另一种选择是“打包”MyISAM表,但我认为这会使该表成为只读表,不会像其他选项那样进行压缩。

在应用程序层中有一些有效的压缩用例。在存储大量文本数据但不需要对其进行搜索的任何时候,都是一个很好的选择,例如归档日志输出。gzip在数据到达数据库之前压缩数据将1MB日志减少到30k。虽然即时磁盘空间很便宜,但在运行MySQL转储时,也必须考虑IO限制,或者只是在从应用服务器向DB服务器跨网络本身时考虑IO限制。如果您在为生产设置从机时运行过锁定
mysqldump--master data
,则需要减少db size.UPDATE。自2013年2月5日发布MySQL 5.6以来,InnoDB支持全文搜索。