在存储在mysql数据库之前压缩文本

时间:2012-03-20 07:02:38

标签: php mysql compression

我正在使用php和MySQL开发一个Web应用程序。我在使用gzcompress()php函数压缩文本之前存储在MySQL数据库/在数据库中存储压缩形式的文本。我的问题是,这样可以吗?存储压缩形式?或者这种方法会给我带来麻烦吗?我正在压缩文本以节省磁盘空间。

4 个答案:

答案 0 :(得分:4)

我的方法。 我需要在MySQL表中存储电子邮件的文本。列类型:TEXT。

压缩:

$compressed_string_for_db = base64_encode(gzcompress('big email text', 9));

解压缩:

$email_text = gzuncompress(base64_decode($compressed_string_from_db));

我的压缩结果:

收入字符串长度:41072

压缩字符串长度:5312

答案 1 :(得分:3)

老实说,我没有看到存储压缩文本的任何实际好处。当然你可以节省一些空间,但是如果你的文字很大,你可以从压缩它中获得实际的好处,我想你需要担心你的服务器的CPU必须在访问者访问你的时候压缩/解压缩大量文本页面(更不用说可搜索的文本意味着你必须将其解压缩才能搜索)。

答案 2 :(得分:1)

我可以肯定地看到存​​储压缩文本的许多实际好处......
gz压缩速度快,可以流式传输并在某些情况下节省大量空间。

在我的实际使用中,我每1000条记录的数据使用量约为50MB,而且我的记录数以百万计 压缩我能够将此值减少到每1000条记录10MB,这意味着我向云提供商支付了通常数据存储费的1/5。 如果这不是一个实际的好处,还有什么?;)

另外,您是否认为gzip的CPU负载最小? gzip已经是一个HTTP标准,如果你没有使用1985年的浏览器,就像几乎任何网站一样,stackoverflow正在gzip流中发送到你的浏览器。
我猜想磁盘访问(尤其是硬盘)比gzip对数据检索的影响更大。因此,通过压缩大小减少数据,您实际上可以获得性能。

以下是我用于以mysql兼容格式压缩数据的代码:
这是我的代码,对于解压缩,你也可以使用PHP,只需要前4个字节 输出mysql:

mysql : "select hex(compress('1234512345'))"
0A000000789C3334323631350411000AEB01FF

php等价物:

$string="1234512345";
$data=gzcompress($string);
$len=mb_strlen($string);
$head=pack('V',$len);

echo($head);
echo($data);

PHP的输出:

php test.php  | hexdump -C
00000000  0a 00 00 00 78 9c 33 34  32 36 31 35 04 11 00 0a

答案 3 :(得分:0)

我的方法比sNICkerssss的方法要快得多。

列类型:BLOB。使用BLOB的原因是:

BLOB是一个二进制大对象,可以容纳可变数量的 数据。 BLOB的值被视为二进制字符串(字节字符串)。

压缩

$compressed = gzdeflate('big email text');

解压缩

$email_text = gzinflate($compressed);