當前位置:成語大全網 - 書法字典 - Zstd字典壓縮

Zstd字典壓縮

1.壓縮功能開啟後,每個事務都用ZSTD算法壓縮,並寫入二進制日誌。

2.新版本更改了libbinlogevents,並添加了Transaction_payload_event作為壓縮的事務表示。

class Transaction _ payload _ event:public Binary _ log _ event { protected:?const char * m _ payload?uint64 _ t m _ payload _ size?transaction::壓縮::type m _ compression _ type?uint64 _ t m _ uncompressed _ size

3.添加Transaction_payload_event編碼器/解碼器,實現壓縮事務的編碼和解碼。

命名空間binary_log {

命名空間事務{

命名空間壓縮{

枚舉類型{

/*無壓縮。*/

無= 0,

/* ZSTD壓縮。*/

ZSTD = 1,

};

4.設計並實現mysqlbinlog中每個事務的解壓縮和解碼。讀取的日誌與未壓縮的原始日誌相同,打印出壓縮算法、事務形式、壓縮大小和未壓縮大小作為註釋。

#200505 16:24:24服務器id 116655110?end _ log _ pos 2123 CRC32 0x 6 add 0216 Transaction _ Payload Payload _ size = 863 compression _ type = ZSTD?uncompressed_size=2184#壓縮事件開始!

5.從庫(或MGR-member)在接收壓縮的二進制日誌時識別Transaction_payload_event,並且不執行二次壓縮或解碼。以原始壓縮狀態寫入中繼日誌;保持壓縮狀態。回放日誌的解碼和解壓縮過程由SQL線程負責。

摘要日誌壓縮過程如下:

1)公司交易需要提交並binlog記錄。

2)壓縮編碼器通過ZSTD算法對緩存中的事務進行壓縮編碼。

3)將緩存中的壓縮事務寫入日誌並註銷。

日誌讀取過程如下:

客戶端工具(mysqlbinlog,sql thread)對壓縮的日誌進行解壓縮和解碼。解壓縮原始的未壓縮日誌,以便閱讀或回放。

需要註意的事項

1.壓縮函數壓縮事務,不支持非事務引擎。

2.只能壓縮行模式下的binlog。

3.目前只支持ZSTD壓縮算法,但底層設計是開放的,後續官方可能會根據需要添加其他壓縮算法(如zlib或lz4)。

4.壓縮操作是並行執行的,發生在binlog被刪除之前的緩存步驟中。

5.壓縮過程會占用本地CPU和內存資源。在主從延遲的場景下,如果性能是瓶頸,網絡帶寬和壓縮功能可以有效緩解主從延遲;但是,如果性能瓶頸是機器本身的處理能力,壓縮功能反而可能增加主從延遲。