3

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

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

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

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

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

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

4

1 回答 1

2

一般来说,您有两种选择:

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