【问题标题】:Ordering of Protobuf mapsProtobuf 映射的排序
【发布时间】:2020-11-21 01:31:20
【问题描述】:

我在 proto3 中创建消息对象并使用自动生成的 java 类。 我想为每个消息对象分配唯一的键。

message Obj {
    ...
    string unique_key = 1;
    ...
}

Obj的构建过程中,它从一个微服务接收到一个名为metaData的proto对象,其定义如下:

message metData {
     map<string, string> keyFields = 1;
}

基于metaData 对象中的条目,unique_key 是通过遍历映射并对每个条目进行散列创建的。(keyFields 中最多有 10 个条目)

protobuf 文档says,无法定义键的顺序。我应该如何保证keyFields中具有相同条目的不同metaData对象生成相同的unique_key

【问题讨论】:

    标签: java protocol-buffers proto3


    【解决方案1】:

    您通常有两种选择:

    1. 实现一个可交换散列函数。例如。获取键的哈希值并简单地将它们相加而忽略溢出。
    2. 获取密钥并对其进行排序。然后对它们进行哈希排序。如果有“许多”键,请考虑缓存哈希值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多