我正在使用Protobuf 3.从文档中,似乎无法定义嵌套映射:
message MyMessage {
map<string, map<string, string>> nestedMap = 1; // doesn't work
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一种消息类型来表示期权链的定价信息(买入价和卖出价).对于那些不熟悉这些金融工具的人,基本上,我有一套"到期日(YYYYMMDD)".在这些到期日的每一个中,我都有一组"罢工(浮动数字;必要时可以表示为字符串,我很好)".在每次攻击中,我有2个选项,一个"put"和一个"call"(这被称为选项的"右侧").这些选项中的每一个都将包含"出价"和"询问"价格.
从概念上讲,我想有类似的东西
message OptionChain {
// doesn't work:
map<Expiration, map<Strike, map<Right, BidAskData>>> whatever = 1;
}
Run Code Online (Sandbox Code Playgroud)
我找到的替代方案是这样的:
message OptChain {
map<string, OptChainExpirations> expirations = 1;
}
message OptChainExpirations {
map<string, OptChainExpirationsStrikes> strikes = 1;
}
message OptChainExpirationsStrikes {
OptBidAsk put = 1;
OptBidAsk call = 2;
}
message OptBidAsk {
double bid = 1;
double ask = 2;
// any other fields that might be necessary in the future
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效.但是,通过定义大量"中间"消息,这似乎也给我的系统增加了不必要的复杂性.
还有其他选择吗?
谢谢!
编辑:对于一些额外的背景:
期权链通常包含不超过约6-10个不同的到期日,每个到期日通常不会包含超过几十个罢工.换句话说,我们谈论的是每个选项链最多需要几千字节的数据.
我将使用它作为一个gRPC调用的返回值.随意为此建议替代设计!
对我来说,您使用中间消息类型的替代方案似乎不错。稍微简化命名可能是值得的,例如Strike代替OptChainExpirationsStrikes. 如果您担心名称冲突,请将其全部放在自己的名称空间/包中。
还要考虑您是否要根据字符串键查找罢工,或者作为普通的重复字段是否会更好。
| 归档时间: |
|
| 查看次数: |
2778 次 |
| 最近记录: |