我是Avro的新手,使用1.7.7。
我有一个已编译的模式。
我正试图通过JSON进行编组,认为我会利用Avro提供的验证功能。
但是,Avro编组很慢(至少我正在这样做)。
以下是通过我的对象的10,000次迭代。该对象具有嵌套对象和嵌套的对象数组,因此它很复杂。虽然它很复杂,但没有很多数据元素。在阵列中,我有3个项目,所以不是那么多。
以下是我的表现测试结果:
CONVERTING TO JSON (THROUGH AVRO) AVG: 74 MICROS
CONVERTING FROM JSON (THROUGH AVRO) AVG: 433 MICROS
CONVERTING TO JSON (JACKSON STREAMING) AVG: 16 MICROS
CONVERTING FROM JSON (JACKSON STREAMING) AVG: 9 MICROS
最后两个(JACKSON STREAMING)我使用的是纯Jackson流式API而不是AVRO。性能提升是荒谬的。
我觉得我在这里做错了。以下是处理JSON< - >的代码片段。 AVRO的东西:
val spanDatumReader = new SpecificDatumReader[Span](Span.getClassSchema)
val spanDatumWriter = new SpecificDatumWriter[Span](Span.getClassSchema)
def fromJson(spanJson:String):Span = {
val spanJsonDecoder = DecoderFactory.get.jsonDecoder(Span.getClassSchema, spanJson)
spanDatumReader.read(null, spanJsonDecoder)
}
def toJson(span:Span):String = {
val writer = new StringWriter()
val jsonGenerator = jsonFactory.createJsonGenerator(writer)
val spanJsonEncoder = EncoderFactory.get.jsonEncoder(Span.getClassSchema, jsonGenerator)
spanDatumWriter.write(span, spanJsonEncoder)
spanJsonEncoder.flush()
jsonGenerator.close()
writer.toString
}
我希望有人可以指出我做错了什么。我认为使用编译后的Schema,编组/解组应该关闭手动完成它,但到目前为止情况并非如此:(
只是更新,我运行了100,000次以下结果。更近(可能是JVM启动或其他一些热身),但仍然存在很大差异:
CONVERTING TO JSON (THROUGH AVRO) AVG: 16 MICROS
CONVERTING FROM JSON (THROUGH AVRO) AVG: 21 MICROS
CONVERTING TO JSON (JACKSON STREAMING) AVG: 3 MICROS
CONVERTING FROM JSON (JACKSON STREAMING) AVG: 2 MICROS
谢谢!