MyCat 压缩 详解

MyCat 从 1.4 开始支持 MySQL 的压缩协议,在查询返回大的结果集和 load data 大量数据的性能提升比较明显。可以大大节省网络流量,但会消耗少量 CPU 资源。如果要启用压缩协议,则客户端、MyCat、MySQL 三者都启用才行

MyCat 可以在 server.xml 中配置 1 启用。客户端如果是 MySQL 命令行,则加参数 -C 启用压缩协议。客户端如果是 JDBC 则在 JDBC 的 url 上加上参数 useCompression=true,例如 : jdbc:mysql://127.0.0.1:8066/base?useCompression=true

压缩协议属于 MySQL 通讯协议的一部分,要启用压缩协议传输功能,前提条件客户端和服务端都必须要支持zlib 算法。MySQL 起始握手,先由 server 发起,client 分析并回应自已同意的特性,然后双方依照这些特性处理数据包。通信时是否采用压缩会改变数据包的字节变化。客户端的特性在首个回应 (既握手包) 服务器中体现,如 : 是否开启压缩、字符集、用户登录信息等

1> 未采用压缩时,客户端向服务器发送的包格式 :
格式 : 3*byte,1*byte,1*byte,n*byte
表示 : 消息长度,包序号,请求类型,请求内容
2> 采用压缩后,客户端向服务器发送的包格式 :
格式 : 3*byte,1*byte,3*byte,n*byte
表示 : 消息长度,包序号,压缩包大小,压缩包内容
当压缩包大小为 0x00 时,表示当前包未采用压缩,则 n*byte 内容为原协议包内容
当压缩包大小大于 0x00 时,表示当前包已采用 zlib 压缩,则 n*byte 内容,先解压缩,解压后内容为原协议包内容
mysql 内部有一个约定,如果原协议包小于 50 字节时,对内容不压缩而保持原貌的方式,而 mysql 此举是为了减少 CPU 性能开销。 mysql 的压缩协议对原协议是透明的,也就是说一个压缩包里可能包括一个或多个原协议包,甚至可能包括一些不完整的原协议包在内。也就是一个原协议包可能会被拆分到 2 个压缩包中


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值