【发布时间】:2024-01-10 05:29:02
【问题描述】:
大型应用程序和数据库在将文本数据插入数据库之前对其进行 GZIP 压缩是否很常见?
我猜在重新解压缩之前,对实际文本字段的任何全文搜索都将无法正常工作?
【问题讨论】:
大型应用程序和数据库在将文本数据插入数据库之前对其进行 GZIP 压缩是否很常见?
我猜在重新解压缩之前,对实际文本字段的任何全文搜索都将无法正常工作?
【问题讨论】:
我还没有看到这样做太多,因为它基本上可以防止人们对 MySQL 端的数据进行任何操作:
like,没有=,没有其他操作......不过,如果您只使用数据库来存储数据,而不是对其进行操作,那可能会很有趣。
注意:您可能需要做一些基准测试,以衡量这可能产生的性能影响,因为压缩/解压缩需要 CPU!
之后,问题是:您会在客户端(PHP)端还是在服务器(MySQL)端处理压缩?
在第二种情况下,有一个由 MySQL 提供的 COMPRESS() 函数,您可能会感兴趣。
【讨论】:
如果您在 MySQL 中使用 InnoDB 表类型和较新的版本之一,则可以启用 compression on an InnoDB 表本身。
它在低级别进行管理,因此不会更改您的查询或任何内容。根据我的阅读,压缩的轻微开销通过减少磁盘 IO 并允许将更多数据存储在内存中的缓冲池中来抵消。但是,您确实提到了 InnoDB 不支持的全文搜索,因此这可能不是一个选项。
MySQL 中还有一个Archive 表类型,但我相信除了主键之外,您还失去了索引功能。
另一种选择是“打包”一个 MyISAM 表,但我相信这会使该表只读并且不会像其他选项那样压缩。
【讨论】:
坏主意。当磁盘空间小于 $1 GB 时为节省一些空间而进行的额外处理不会抵消执行此操作的额外编程时间(不仅仅是最初,请记住维护)。
这可能会使数据库访问速度变慢,因为需要对数据进行解压缩/压缩。索引在压缩数据上无法正常工作,因为您需要进行表扫描,解压缩数据,然后进行比较。全文搜索也已推出。
如果必须这样做,请不要使用 gzip。使用内置的COMPRESS 函数。
【讨论】:
mysqldump --master-data,您将希望减少数据库大小。