For posterity, filed an issue here: https://github.com/protocolbuffers/protobuf/issues/6907
On Friday, November 8, 2019 at 4:11:42 PM UTC-5, Benjamin Mahler wrote: > > Hi, > > I've searched the list but haven't found an adequate treatment of this > subject from the existing threads. > > In the system I work on, we weren't aware of the provided protobuf to json > facilities (or they didn't exist so many years ago) and so we built our own > protobuf to json conversion that is based on protobuf reflection + > rapidjson for the json encoding/serialization. It appears that the provided > protobuf to json conversion facility is much slower than our approach. > > Here are numbers in seconds for 10 runs [1] of serializing a large message: > > SerializeAsString: 2.07,2.01,2.97,1.76,1.70,2.23,2.02,1.66,1.97,1.90 > (median 1.99 seconds) > MessageToJsonString: > 23.70,24.22,24.22,24.13,24.00,24.73,24.75,24.82,24.98,24.25 (median 24.24 > seconds) > To json via our reflection-based approach: > 4.81,4.07,3.79,4.28,4.90,6.38,5.53,4.37,4.12,4.20 (median 4.33 seconds) > > So the built-in facility for protobuf message to serialized json takes > 460% longer than our approach, which you can find here: > > > https://github.com/apache/mesos/blob/1.9.0/3rdparty/stout/include/stout/protobuf.hpp#L810-L1042 > Which leverages > https://github.com/apache/mesos/blob/1.9.0/3rdparty/stout/include/stout/jsonify.hpp > > Is this expected? It seems the protobuf built in facility, at least for > going from message to serialized json, is extremely slow and can be much > faster. > > I suppose another technique that would be even faster than our approach > would be for the json serialization logic to be generated by the protobuf > compiler on a per message basis (much like protobuf serialization is > generated), allowing reflection to be avoided entirely. > > Would love to hear any thoughts on comments on this topic. > > Ben > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/56319812-1153-43ef-8930-71024975411a%40googlegroups.com.
