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

Riz*_*han 1 php mysql compression

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

Joh*_*ohn 7

我绝对可以看到存储压缩文本的很多实际好处......
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
Run Code Online (Sandbox Code Playgroud)

php等价物:

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

echo($head);
echo($data);
Run Code Online (Sandbox Code Playgroud)

PHP的输出:

php test.php  | hexdump -C
00000000  0a 00 00 00 78 9c 33 34  32 36 31 35 04 11 00 0a
Run Code Online (Sandbox Code Playgroud)


sNI*_*sss 6

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

压缩:

$compressed_string_for_db = base64_encode(gzcompress('big email text', 9));
Run Code Online (Sandbox Code Playgroud)

解压缩:

$email_text = gzuncompress(base64_decode($compressed_string_from_db));
Run Code Online (Sandbox Code Playgroud)

我的压缩结果:

收入字符串长度:41072

压缩字符串长度:5312