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