没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
MySQL 压缩的使用场景和解决方案压缩的使用场景和解决方案
数据分布特点,决定了空间压缩的效率,如果存入的数据的重复率较高,其压缩率就会较高;通常情况下字符
类型数据(CHAR, VARCHAR, TEXT or BLOB )具有较高的压缩率,而一些二进制数据或者一些已经压缩过的数
据的压缩率不会很好
导语导语
描述 MySQL 压缩的使用场景和解决方案,包括压缩传输协议、压缩列解决方案和压缩表解决方案。
提到 MySQL 压缩相关的内容,我们能想到的可能是如下几种和压缩相关的场景:
1、客户端和服务器之间传输的数据量太大,需要进行压缩,节约带宽
2、MySQL 某个列的数据量大,只针对某个列的数据压缩
3、MySQL 某个或者某几个表数据太多,需要将表数据压缩存放,减少磁盘空间的占用
这几个问题在 MySQL 侧都有很好的解决方案 ,针对第 1 个问题,可以使用 MySQL 的压缩协议解决;针对第 2 个问题,可
以采用 MySQL 的压缩和解压函数完美解决;而针对最复杂的第 3 个问题,则可以在引擎层面进行解决,目前 myisam、
innodb、tokudb、MyRocks 等引擎都支持表的压缩。本篇文章要详细讨论的就是此类关于 MySQL 压缩机制相关 的问题,下
面是主要的内容:
一、一、MySQL 压缩协议介绍压缩协议介绍
1、适用场景
MySQL 压缩协议适合的场景是 MySQL 的服务器端和客户端之间传输的数据量很大,或者可用带宽不高的情况,典型的场景
有如下两个:
a、查询大量的数据,带宽不够(比如导出数据的时候);
b、复制的时候 binlog 量太大,启用 slave_compressed_protocol 参数进行日志压缩复制。
2、压缩协议简介
压缩协议是 MySQL 通信协议的一部分,要启用压缩协议进行数据传输,需要 MySQL 服务器端和客户端都支持 zlib 算法。启
动压缩协议会导致 CPU 负载略微上升。使用启用压缩协议使用-C 参数或者 --compress=true 参数启动客户端的压缩功能。如
果启用了-C 或者 compress=true 选项,那么在连接到服务器段的时候,会发送 0x0020(CLIENT_COMPRESS)的服务器权
能标志位,和服务器端协商通过后(3 次握手以后),就支持压缩协议了。由于采用压缩,数据包的格式会发生变化,具体的
变化如下:
未压缩的数据包格式:
压缩后的数据包格式:
大家可能留意到压缩后的数据报格式有压缩和未压缩之分,这个是 MySQL 为了较少 CPU 开销而做的一个优化。如果内容小
于 50 个字节的时候,就不对内容进行压缩,而大于 50 字节的时候,才会启用压缩功能。具体的规则如下:
当第三个字段的值等于 0x00 的时候,表示当前包没有压缩,因此 n * byte 的内容为 1 * byte,n * byte,即请求类型和请求内
容。
当第三个字段的值大于 0x00 的时候,表示当前包已采用 zlib 压缩,因此使用的时候需要对 n * byte 进行解压,解压后内容为
1 * byte,n * byte,即请求类型和请求内容。
3、方案实践
在客户端连接的时候加上-C 或者--compress=true 参数。如果是对同步添加压缩协议支持的时候,则需要配置
slave_compressed_protocol=1。下面是采用压缩协议连接 MySQL 服务端的范例:
MySQL -h hostip -uroot -p password --compress
MySQLdump -h hostip -uroot -p password -default-character-set=utf8 --compress --single-transaction dbname tablename > tablename.sql
资源评论
weixin_38663544
- 粉丝: 4
- 资源: 971
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功