Benchmarks against Serialization Systems
|
Protocol Buffers (proto3) |
Thrift (compact protocol) |
Avro |
CSV |
JSON |
MessagePack |
Schema-less? |
No |
No |
No |
No |
Yes |
Yes |
Require compiling schema in advance? |
Yes |
Yes |
No |
No |
No |
No |
where $project is one of the name of sbt sub project (e.g. avroBench)
Sample data file generation
The schemas used in this benchmark are under schema
NOTE: This benchmark is taken place under the specific condition, results may be different under the other conditions.
- 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) |
Avro |
CSV |
JSON (with jsoniter-scala) |
JSON (with circe) |
MessagePack (jackson-module-msgpack) |
MessagePack (msgpack4z) |
43.0 |
235.8 |
232.6 |
116.8 |
74.6 |
488.7 |
354.8 |
358.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) |
Avro |
CSV |
JSON (with jsoniter-scala) |
JSON (with circe) |
MessagePack (jackson-module-msgpack) |
MessagePack (msgpack4z) |
139.5 |
162.9 |
586.0 |
160.8 |
151.3 |
503.5 |
414.9 |
609.5 |
Data size of 100,000 encoded records in MB.
Protocol Buffers (proto3) |
Thrift (compact protocol) |
Avro |
CSV |
JSON |
MessagePack |
18.5 |
18.3 |
16.7 |
17.4 |
32.2 |
25.7 |