Cap*_*ngs 6 java serialization performance-testing protocol-buffers avro
我编写了一个 JMH 基准测试来比较 java 1.8 中 Avro (1.8.2) 和 Protobuf (3.5.0) 的序列化性能。根据 JMH 的说法,Protobuf 可以在一秒钟内序列化某些数据 470 万次,而 Avro 每秒只能序列化 800k 次。
序列化的测试数据约为 200 字节,我为 Avro 和 Protobuf 生成了架构。
这是我的 Avro 序列化代码,熟悉 Avro 的人可以确保我没有犯一些重大错误吗?
JMH 进行了基准测试,名为 Serialize 的方法。另外,我已将其发布在https://groups.google.com/forum/#!topic/protobuf/skmE78F-XbE
非常感谢
public final class AvroSerialization{
private BinartEncoder encoder;
private final SpecificDatumWriter writer;
public AvroSerialization( ){
this.writer = new SpecificDatumWriter( AvroGeneratedClass.class );
}
//MyDataObject = A pojo that contains the data to be serialized
public final byte[] serialize( MyDataObject data ){
ByteArrayOutputStream out = new ByteArrayOutputStream( 1024 );
encoder = EncoderFactory.get().binaryEncoder( out, encoder );
AvroGeneratedClass avroData = createAvro( data );
writer.write( avroData, encoder );
encoder.flush();
return out.toByteArray();
}
//AvroGeneratedClass = Class generated by the Avro Schema
public final static AvroGeneratedClass createAvro( MyDataObject data ){
AvroGeneratedClass avroData = AvroGeneratedClass.newBuilder()
.setXXX( data.getXXX )
.setXXX( data.getXXX )
...
return avroData;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 -2
AVRO 始终使用其架构序列化数据。
在 protobuf 方法中,服务器假设客户端已经知道模式,因此它只是将数据序列化为二进制格式。
对于事务性工作负载,protobuf 通常更好。
AVRO 通常更适合需要序列化大量记录的分析工作负载。在这种情况下,模式序列化通常可以忽略不计,而 AVRO 序列化则稍微紧凑一些。
| 归档时间: |
|
| 查看次数: |
8720 次 |
| 最近记录: |