反序列化avro的速度很慢

g0czyy6m  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(358)

我尝试在几种序列化格式(包括avro/protobuf/thrift等)之间使用java进行性能测试。
测试基于对一个字节数组消息进行100万次反序列化,该消息包含30个长类型字段。avro的结果并不好。
protobuf/thrift平均使用2000毫秒左右,但avro需要9000毫秒。
在文档中,它建议重用解码器,因此我按如下方式编写代码。

byte[] bytes = readFromFile("market.avro");
long begin = System.nanoTime();
DatumReader<Market> userDatumReader = new ReflectDatumReader<>(Market.class);
InputStream inputStream = new SeekableByteArrayInput(bytes);
BinaryDecoder reuse = DecoderFactory.get().binaryDecoder(inputStream, null);
Market marketReuse = new Market();
for (int i = 0; i < loopCount; i++) {
    inputStream = new SeekableByteArrayInput(bytes);
    BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(inputStream, reuse);
    userDatumReader.read(marketReuse, decoder);
}

long end = System.nanoTime() - begin;
System.out.println("avro loop " + loopCount + " times: " + (end * 1d / 1000 / 1000));

我认为阿夫罗不应该那么慢,所以我相信我做错了什么,但我不知道这是什么意思。我是否以错误的方式进行“重用”?
对avro性能测试有什么建议吗?提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题