Benchmarks against Serialization Systems

June 5, 2018 ยท View on GitHub

Build Status

Characteristics

Protocol Buffers (proto3)Thrift (compact protocol)AvroCSVJSONMessagePack
Schema-less?NoNoNoNoYesYes
Require compiling schema in advance?YesYesNoNoNoNo

Run benchmarks

$ sbt $project/jmh:run

where $project is one of the name of sbt sub project (e.g. avroBench)

Sample data file generation

$ sbt $project/run

Schemas

The schemas used in this benchmark are under schema

Results

NOTE: This benchmark is taken place under the specific condition, results may be different under the other conditions.

Benchmark setup

  • OS: Ubuntu 16.04 TLS
  • CPU: Intel(R) Xeon(R) CPU E5-2680 v3 2.50GHz, 4 cores
  • Memory: 14GB
  • JDK 1.8.0_171, Java HotSpot(TM) 64-Bit Server VM, 25.171-b11

Average time to encode 100,000 records in milli seconds.

  • 20 warming up iteration
  • Average of 20 iteration
Protocol Buffers (proto3)Thrift (compact protocol)AvroCSVJSON (with jsoniter-scala)JSON (with circe)MessagePack (jackson-module-msgpack)MessagePack (msgpack4z)
43.0235.8232.6116.874.6488.7354.8358.0

Average time to decode 100,000 binary records in milli seconds.

  • 20 warming up iteration
  • Average of 20 iteration
Protocol Buffers (proto3)Thrift (compact protocol)AvroCSVJSON (with jsoniter-scala)JSON (with circe)MessagePack (jackson-module-msgpack)MessagePack (msgpack4z)
139.5162.9586.0160.8151.3503.5414.9609.5

Data size of 100,000 encoded records in MB.

Protocol Buffers (proto3)Thrift (compact protocol)AvroCSVJSONMessagePack
18.518.316.717.432.225.7