protobuf,thrift,avro之序列化性能測試

簡要記述一下在c++環境下protobuf、thrift與avro序列化性能結果。

測試方法:分別用三種協議定義一個包含同樣字段的數據結構,然後重複調用多次,比較三者之間花費的時間。具體定義的數據結構爲:

Person {
  int id;
  string name;
  string email;
}

測試環境:一臺兩年前購置的Mac電腦(具體配置有待補充)。

測試結果:迭代次數分別爲:1、10000、100000(thrift使用了兩種編碼方式:binary和compact)

[avro encode] times: 1, milli: 0.046078
[avro decode] times: 1, milli: 0.030119
[avro encode] times: 10000, milli: 21.9206
[avro decode] times: 10000, milli: 15.3672
[protobuf encode] times: 1, milli: 0.023208
[protobuf decode] times: 1, milli: 0.007489
[protobuf encode] times: 10000, milli: 12.4098
[protobuf decode] times: 10000, milli: 8.18684
[thrift binary encode] times: 1, milli: 0.042721
[thrift binary decode] times: 1, milli: 0.012054
[thrift binary encode] times: 10000, milli: 22.8659
[thrift binary decode] times: 10000, milli: 25.6858
[thrift compact encode] times: 1, milli: 0.055757
[thrift compact decode] times: 1, milli: 0.02131
[thrift compact encode] times: 10000, milli: 29.9698
[thrift compact decode] times: 10000, milli: 38.1937
[avro encode] times: 1, milli: 0.038088
[avro decode] times: 1, milli: 0.021185
[avro encode] times: 100000, milli: 219.917
[avro decode] times: 100000, milli: 167.694
[protobuf encode] times: 1, milli: 0.04218
[protobuf decode] times: 1, milli: 0.01303
[protobuf encode] times: 100000, milli: 98.2691
[protobuf decode] times: 100000, milli: 74.7578
[thrift binary encode] times: 1, milli: 0.046932
[thrift binary decode] times: 1, milli: 0.015221
[thrift binary encode] times: 100000, milli: 232.316
[thrift binary decode] times: 100000, milli: 266.397
[thrift compact encode] times: 1, milli: 0.034175
[thrift compact decode] times: 1, milli: 0.013485
[thrift compact encode] times: 100000, milli: 307.872
[thrift compact decode] times: 100000, milli: 381.324

從以上結果可以看出:protobuf表現優異,avro次之,thrift表現總體較差(binary比compact好些)。

結束語:以上結果僅供參考,實際選用要結合項目的具體情況。如需要性能絕對優先,那就應該選擇protobuf;否則需要支持多種開發語言則應該選擇thrift;avro的動態特性似乎也頗具吸引力。

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