Choosing the right field tag
As you know, field tags are serialized together with the actual data to let Protobuf know into which field to deserialize the data. And as these tags are encoded as varint
, the bigger the tag, the bigger the impact on your serialized data size. In this section, let us talk about the two considerations that you must make to not let these tags affect your payload too much.
Required/optional
Having big field tags might be fine if you are aware of the trade-off. One common way of treating big tags is to see them as being used for optional fields. An optional field means that it is less often populated with data and because Protobuf does not serialize fields that are not populated, the tag itself is not serialized. However, we will occasionally populate this field and we will incur costs.
One advantage of such a design is keeping relevant information together without having to create loads of messages to keep the field tags small. It will make the code...