我是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
Run Code Online (Sandbox Code Playgroud)
最后两个(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
}
Run Code Online (Sandbox Code Playgroud)
我希望有人可以指出我做错了什么.我认为使用编译的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
Run Code Online (Sandbox Code Playgroud)
谢谢!
归档时间: |
|
查看次数: |
813 次 |
最近记录: |