如何用Python解析MySQL中lz4压缩的数据结构?
- 内容介绍
- 文章标签
- 相关推荐
如何用Python解析MySQL中lz4压缩的数据结构?
在实际使用API接口访问日志服务时,。日志服务如下AP CPU你。 I接口支持在HTTP请求体中传输lz4压缩格式的数据。
先说说我们需要了解lz4压缩算法的基本原理。LZ4是YC大佬写的类LZ77压缩算法,压缩速度非常快。压缩中使用的hash算法的是xxhash,又爱又恨。。

LZ4压缩格式介绍
lz4的格式, 分为frame和block两种. mysqlpump之类的看起来比较偏向frame,但mysql的page很明显偏向于block。
| Compressor | Compression Speed | Decompression Speed | Ratio |
|---|---|---|---|
| LZ4 default | 780 MB/s | 4970 MB/s | 2.101 |
| LZ4 HC -9 | 1950 MB/s | 1380 MB/s | 2.073 |
| LZO 2.09 | 670 MB/s | 860 MB/s | 2.721 |
| Snappy 1.1.4 | |||
| zlib deflate 1.2.11 -6 | 910 MB/s | ||
| LZF v3.6 | 415 MB/s | /tr | |
我emo了。 由于是innodb的数据页, 所以不方便直接查看, 那我们就使用ibd2sql来验证吧.
Python实现LZ4解压
解压就简单多了, 我们只需要按照格式读就行.,摸个底。
def decompress:
""" input: bdata: 压缩数据 decompress_size : 解压之后的大小 return: data 解压之后的数据 不考虑dict和prefix_size了 """ def read_to_less255: length = 0 while True: t = tdata ip += 1 length += t if t != 255: break return length,ip……
代码语言:python
token: 固定1字节.
lz4由 一堆 sequences 构成.每个sequences 由token+literals+match构成.
测试与验证
那我们来测试下吧. 我们这是针对mysql中使用的lz4算法做的解析, 所以对于其它使用lz4压缩的不一定有用.,记住...
wget https:///ddcw/ibd2sql/archive/refs/heads/unzip cd ibd2sql-mainpython /data/mysql3314/mysqldata/db1/t20240924compress_ --sql --ddl,抓到重点了。
看起来解析是正常的. 也就是说我们我们对于lz4压缩的数据解析没毛病.
其他压缩算法对比
| Compressor | Compression Speed | Decompression Speed | Ratio |
|---|
虽然速度这么快, 但是python之类的不内置啊, 引入第三方包又太麻烦了, 那就只能自己简单的解析下了.,太虐了。
LZ4 压缩算法实战:Python实现超高速数据处理指南
我怀疑... 本文详细介绍了如何&#x用Python实现LZ压& # x7F29 ; &# x7B97 ; &# x6CD5 ; , &# x5B9E;&# x73B0 ; &# x8D85 ; &# x9AD8 ; &# x901F ; &# x6570 ; &# x636E ; &# x5904 ; &# x7406 ; &# x3002;
……如何用Python解析MySQL中lz4压缩的数据结构?
在实际使用API接口访问日志服务时,。日志服务如下AP CPU你。 I接口支持在HTTP请求体中传输lz4压缩格式的数据。
先说说我们需要了解lz4压缩算法的基本原理。LZ4是YC大佬写的类LZ77压缩算法,压缩速度非常快。压缩中使用的hash算法的是xxhash,又爱又恨。。

LZ4压缩格式介绍
lz4的格式, 分为frame和block两种. mysqlpump之类的看起来比较偏向frame,但mysql的page很明显偏向于block。
| Compressor | Compression Speed | Decompression Speed | Ratio |
|---|---|---|---|
| LZ4 default | 780 MB/s | 4970 MB/s | 2.101 |
| LZ4 HC -9 | 1950 MB/s | 1380 MB/s | 2.073 |
| LZO 2.09 | 670 MB/s | 860 MB/s | 2.721 |
| Snappy 1.1.4 | |||
| zlib deflate 1.2.11 -6 | 910 MB/s | ||
| LZF v3.6 | 415 MB/s | /tr | |
我emo了。 由于是innodb的数据页, 所以不方便直接查看, 那我们就使用ibd2sql来验证吧.
Python实现LZ4解压
解压就简单多了, 我们只需要按照格式读就行.,摸个底。
def decompress:
""" input: bdata: 压缩数据 decompress_size : 解压之后的大小 return: data 解压之后的数据 不考虑dict和prefix_size了 """ def read_to_less255: length = 0 while True: t = tdata ip += 1 length += t if t != 255: break return length,ip……
代码语言:python
token: 固定1字节.
lz4由 一堆 sequences 构成.每个sequences 由token+literals+match构成.
测试与验证
那我们来测试下吧. 我们这是针对mysql中使用的lz4算法做的解析, 所以对于其它使用lz4压缩的不一定有用.,记住...
wget https:///ddcw/ibd2sql/archive/refs/heads/unzip cd ibd2sql-mainpython /data/mysql3314/mysqldata/db1/t20240924compress_ --sql --ddl,抓到重点了。
看起来解析是正常的. 也就是说我们我们对于lz4压缩的数据解析没毛病.
其他压缩算法对比
| Compressor | Compression Speed | Decompression Speed | Ratio |
|---|
虽然速度这么快, 但是python之类的不内置啊, 引入第三方包又太麻烦了, 那就只能自己简单的解析下了.,太虐了。
LZ4 压缩算法实战:Python实现超高速数据处理指南
我怀疑... 本文详细介绍了如何&#x用Python实现LZ压& # x7F29 ; &# x7B97 ; &# x6CD5 ; , &# x5B9E;&# x73B0 ; &# x8D85 ; &# x9AD8 ; &# x901F ; &# x6570 ; &# x636E ; &# x5904 ; &# x7406 ; &# x3002;
……
