天天看點

在netty項目中使用protobuf編解碼(一):protobuf與其他主流編解碼方案的對比

為什麼選擇protobuf

目前java常用的編解碼方案有:

xml

java序列化

xml

json

msgPack

protobuf

選擇編解碼方案的主要次元:

1.編碼後占用空間:

xml,java序列化 out!

2.編解碼速度,占用記憶體:

xml,java序列化 out!out!

3.多種程式設計語言支援:

java序列化 out!out!out!

xml,json best!

msgPack,protobuf good!

4.是否追求可讀性:

json,xml good!

msgPack,protobuf bad!

5.社群關注度

以下是截止目前github上的資料

MsgPack:

在netty項目中使用protobuf編解碼(一):protobuf與其他主流編解碼方案的對比

msgPack關注度不少,但截止目前github最近一次更新是2018年。慎選。

Protobuf:

在netty項目中使用protobuf編解碼(一):protobuf與其他主流編解碼方案的對比

Flatbuffers:

在netty項目中使用protobuf編解碼(一):protobuf與其他主流編解碼方案的對比

可以看出主流的幾個編解碼方案github關注度都挺高,其中protobuf關注度度最高。

性能對比

綜合上面各個次元的權衡,protobuf、msgPack都是比較有前途的編解碼方案。如果要兼顧可讀性的話,json編解碼方式還是可以的。

從網上查了下集中編解碼方案的性能對比。找到一個19年的文章,隻有有限的實驗對照,個人認為不嚴謹。僅做參考。

連結:【優化】序列化庫的選擇(FlatBuffers,ProtoBuf,MessagePack,Json)

另外一篇實驗了json,protobuf和msgPack間的性能比較,從小檔案,大檔案,請求數量,編解碼速度,錯誤率等多個次元進行了對照。結論是msgPack和protobuf都明顯優于json,msgPack在小檔案下更有優勢。

連結:The need for speed — Experimenting with message serialization

netty上編解碼方案選擇

優先選protobuf。無他,netty對protobuf編解碼方案做了非常漂亮的內建,其次protobuf本身也足夠優秀。