TL;DR: Apache Avro rust support is bad. Don't bother adding it here. I tried and gave up. If you still want it benchmarked, keep reading and provide feedback.
This is more of a post than an issue. Feel free to close it. I want to at least put it in the issue list, so others can search for it.
Based on my understanding, avro offers very compact encoding. However the rust implementation is purely runtime, therefore offers very poor performance. It would be nice to add it to the benchmarks and test my understanding.
However I gave up due to the following issues:
when using avro with serde, it does not support uuid, tuple, or fixed length slice.
does not support u32 or u64, though this is not deal breaker, since usage of u32 can be promoted to u64 without space penalty, and u64 is not used in the benchmark.
when using avro with serde, option works, but it assumes null is the first variant of union in avro schema.
Need to use lazy cell to avoid looking up schema on each serialization. Not sure if this is optimal or standard.
when using avro without serde, deserialization gives back an ordered list of fields, I have to either manually build a hash table to lookup field names or assume the order of fields in schema matches the rust definition.
All of the issues can be worked around by building custom logic. But it takes a lot of time and the benchmark feels less authentic.
Ideally I should issue these issues with avro or even fix it for them in their repo. But some of them are not easily fixable, some of them have already been tracked or worked on.
Depending on feedback, I might finish writing the custom work around and output some numbers in the benchmark table.
TL;DR: Apache Avro rust support is bad. Don't bother adding it here. I tried and gave up. If you still want it benchmarked, keep reading and provide feedback.
This is more of a post than an issue. Feel free to close it. I want to at least put it in the issue list, so others can search for it.
Based on my understanding, avro offers very compact encoding. However the rust implementation is purely runtime, therefore offers very poor performance. It would be nice to add it to the benchmarks and test my understanding.
However I gave up due to the following issues:
All of the issues can be worked around by building custom logic. But it takes a lot of time and the benchmark feels less authentic.
WIP commit: https://github.com/theforrestli/rust_serialization_benchmark/commit/5a95305ac993e1a0ed03ee3cfae3c6445dc72f1a
Ideally I should issue these issues with avro or even fix it for them in their repo. But some of them are not easily fixable, some of them have already been tracked or worked on.
Depending on feedback, I might finish writing the custom work around and output some numbers in the benchmark table.