如何用Python解析MySQL中lz4压缩的数据结构?

2026-05-30 03:185阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

如何用Python解析MySQL中lz4压缩的数据结构?

在实际使用API接口访问日志服务时,。日志服务如下AP CPU你。 I接口支持在HTTP请求体中传输lz4压缩格式的数据。

先说说我们需要了解lz4压缩算法的基本原理。LZ4是YC大佬写的类LZ77压缩算法,压缩速度非常快。压缩中使用的hash算法的是xxhash,又爱又恨。。

 lz4压缩数据结构并使用Python解析

LZ4压缩格式介绍

lz4的格式, 分为frame和block两种. mysqlpump之类的看起来比较偏向frame,但mysql的page很明显偏向于block。

QuickLZ 1.5.0 100 M B /s
Compressor Compression Speed Decompression Speed Ratio
LZ4 default 780 MB/s 4970 MB/s 2.101
LZ4 HC -9 1950 MB/s1380 MB/s 2.073
LZO 2.09 670 MB/s 860 MB/s 2.721
Snappy 1.1.4
zlib deflate 1.2.11 -6910 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压缩数据结构并使用Python解析

LZ4压缩格式介绍

lz4的格式, 分为frame和block两种. mysqlpump之类的看起来比较偏向frame,但mysql的page很明显偏向于block。

QuickLZ 1.5.0 100 M B /s
Compressor Compression Speed Decompression Speed Ratio
LZ4 default 780 MB/s 4970 MB/s 2.101
LZ4 HC -9 1950 MB/s1380 MB/s 2.073
LZO 2.09 670 MB/s 860 MB/s 2.721
Snappy 1.1.4
zlib deflate 1.2.11 -6910 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;

……