Protobuf 和 JSON对比分析
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protobuf是Google公司开发的一种语言中立
平台中立
可扩展
的 对结构化数据
序列化
的机制。
本文主要对Protobuf和JSON序列化&反序列化的性能做横向对比分析。 JSON序列化使用Google官方的Gson框架。
Protobuf | Gson | Language | Platform |
---|---|---|---|
3.17.3 | 2.8.7 | Kotlin | macOS IntelliJ IDEA |
测试序列化内容,高效作业25分钟的训练数据(mock)
数据结构
syntax = "proto3";
package me.sunnyxibei.data;
option java_package = "me.sunnyxibei.data";
option java_outer_classname = "TaskProto";
message Eeg{
repeated double alphaData = 1;
repeated double betaData = 2;
repeated double attentionData = 3;
repeated int64 timestampData = 4;
int64 startTimestamp = 5;
int64 endTimestamp = 6;
}
message TaskRecord{
string localId = 1;
int64 localCreated = 2;
int64 localUpdated = 3;
int32 score = 4;
int64 originDuration = 5;
string subject = 6;
string content = 7;
Eeg eeg = 8;
}
对比结果 repeat = 1
Gson序列化大小 = 30518 bytes
Gson序列化时间 = 113 ms
protobuf序列化大小 = 13590 bytes
protobuf序列化时间 = 39 ms
*************************
Gson反序列化时间 = 15 ms
protobuf反序列化时间 = 3 ms
repeat = 10
Gson序列化时间 = 137 ms
protobuf序列化时间 = 41 ms
*************************
Gson反序列化时间 = 50 ms
protobuf反序列化时间 = 5 ms
repeat = 100
Gson序列化时间 = 347 ms
protobuf序列化时间 = 47 ms
*************************
Gson反序列化时间 = 212 ms
protobuf反序列化时间 = 22 ms
repeat = 1000
Gson序列化时间 = 984 ms
protobuf序列化时间 = 97 ms
*************************
Gson反序列化时间 = 817 ms
protobuf反序列化时间 = 105 ms
repeat = 10000
Gson序列化时间 = 7034 ms
protobuf序列化时间 = 225 ms
*************************
Gson反序列化时间 = 5544 ms
protobuf反序列化时间 = 300 ms
repeat = 100000
Gson序列化时间 = 65560 ms
protobuf序列化时间 = 1469 ms
*************************
Gson反序列化时间 = 49984 ms
protobuf反序列化时间 = 2409 ms
结论:
- 空间对比,Protobuf序列化后的数据大小,为JSON序列化后的44.5%
- 时间对比
次数 | 序列化(Protobuf/JSON) | 反序列化(Protobuf/JSON) |
---|---|---|
1 | 34.5% | 20% |
10 | 29.9% | 10% |
100 | 13.5% | 9.43% |
1000 | 9.9% | 12.9% |
10000 | 3.2% | 5.41% |
100000 | 2.24% | 4.82% |