John Dickson created AVRO-4160:
----------------------------------

             Summary: Replace std::any with std::optional and std::variant in 
generated structs.
                 Key: AVRO-4160
                 URL: https://issues.apache.org/jira/browse/AVRO-4160
             Project: Apache Avro
          Issue Type: Improvement
          Components: c++
            Reporter: John Dickson


C++'s std::any is very powerful, and expensive to use. Since all the types are 
known, avrogencpp generated structures can leverage std::variant for union 
types instead. The interface of std::variant maps to the avro union interface, 
providing a built in union discriminator which removes the need for avro union 
structures to store a second member variable. More importantly, this relieves a 
lot of pressure on the memory allocator for deeply nested schemas when unions 
are heavily used.
In addition, when a union contains two types, and one of those types is null, 
std::optional can be used for even lighter weight union implementation.
This can be done with no changes to the API. The emitted structures can even be 
used with previous versions of the avro library.
Real world testing in our case, this single change reduced transaction times by 
50%



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to