我有一条原始消息,我在服务中使用它来在各个地方存储数据
我的信息是这样的:
message Matrix {
double width = 1;
double height = 2;
repeated double entries = 3;
}
我的团队认为Matrix
消息太大,将类型更改为float
似乎是实现有效负载大小减小的一种简单方法。但是,当我将原型定义更改为使用float
而不是double
此处,并尝试读取旧数据(在 Python 阅读器中)时,它看起来已损坏。
我能想到的一个选项是为每个字段添加一个新的浮动选项:
message Matrix {
oneof r_oneof {
double width_d = 1;
float width_f = 4;
}
oneof c_oneof {
double height_d = 2;
float height_f = 5;
}
oneof e_oneof {
repeated double entries_d = 3;
repeated float entries_f = 6;
}
}
然后我的反序列化代码可以检查每个 oneof 字段是否是double
orfloat
字段。这可行,但感觉就像一个笨重的设计模式。
在此示例中,是否有另一种方法可以向后兼容旧数据?