当前位置: 首页 > 知识库问答 >
问题:

Protobuf,嵌套映射?

武晨
2023-03-14

我用的是Protobuf 3。从文档来看,似乎无法定义嵌套贴图:

message MyMessage {
  map<string, map<string, string>> nestedMap = 1; // doesn't work
}

我正在尝试创建一种消息类型来表示期权链的定价信息(出价和要价)。对于那些不熟悉这些金融工具的人,基本上我有一套“到期日期(YYYYMMDD)”。在每个过期日期中,我都有一组“strikes(float number;如果需要,可以用字符串表示,我同意)”。在每次行使中,我有两个期权,一个“看跌”和一个“看涨”(这被称为期权的“右”)。这些选项中的每一个都将包含“出价”和“询问”价格。

从概念上讲,我想要一些像

message OptionChain {
  // doesn't work:
  map<Expiration, map<Strike, map<Right, BidAskData>>> whatever = 1;
}

我发现的另一种选择是:

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
}

这似乎奏效了。但这似乎也给我的系统增加了不必要的复杂性,因为它定义了大量的“中间”消息

还有其他选择吗?

谢谢

编辑:对于一些额外的上下文:

>

  • 一个期权链通常包含不超过6-10个不同的到期日,每个到期日通常包含不超过几十个罢工。换句话说,我们谈论的是为每个选项链最多获取几千字节的数据。

    我将使用它作为一个gRPC调用的返回值。请随意推荐其他设计!

  • 共有1个答案

    刘子实
    2023-03-14

    对我来说,您使用中间消息类型的替代方案似乎不错。可能值得稍微简化一下命名,例如Strike而不是OptChainExirationsStrikes。如果您害怕名称冲突,请将其全部放在自己的命名空间/包中。

    还要考虑是否将根据字符串键查找罢工,或者作为正常的重复字段是否更好。

     类似资料:
    • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

    • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。

    • 我有一个方法可以返回相当嵌套的JSON,比如: 当我尝试使用< code>JsonSlurper将这个JSON slurp到< code>def result中时,我得到了异常: 当<code>parseText</code>执行时产生引发的异常: 有什么办法吗?

    • 我有一个dynamodb表,它的一个属性包含一个嵌套的映射,我想更新一个特定的库存项目,该项目通过一个过滤器表达式进行过滤,从而从该映射中生成一个项目。 如何编写一个更新表达式来更新位置到名称=欧宝的项目的“就位三”,标签包括“x1”(也可能是f3)?这应该只更新第一个列表元素位置属性。

    • 有人能帮忙填写上面的评论部分吗?或者是否有其他选项来映射这些对象? 编辑:我尝试了下面的解决方案,但是接口实现类本身发生了变化。

    • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...