我尝试在几种序列化格式(包括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性能测试有什么建议吗?提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!