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 個壓縮包中


發佈了220 篇原創文章 · 獲贊 160 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章