zigzag編碼原理

在Thrift,Protobuf和avro序列化框架中,不約而同使用了zigzag編碼來對數字進行編碼,從而達到減少數據傳輸量的目的。

zigzag算法的核心主要是去除二進制數字中的前導0,因爲在絕大多數情況下,我們使用到的整數,往往是比較小的。

參考:小而巧的數字壓縮算法:zigzag

在avro編碼中,對於字符串Martin,長度爲6,而6的二進制爲0000 0110,其中首位置的0爲符號位,在zigzag編碼中,正數的符號位會移動到末尾,其它位往前移動一位,所以會變成0000 1100,即0c,再後面的字節是字符串UTF-8編碼後的結果

在protobuf編碼中,對於字符串的Martin,剛開始的字節表示其id和數據類型,下一個字節表示其長度,後面的字節是字符串UTF-8編碼後的結果

參考:《數據密集型應用系統設計》的 Schema evolution in Avro, Protocol Buffers and Thrift

Avro,Protocol Buffer和Thrift中的模式演化(譯)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章