我在 proto3 中创建消息对象并使用自动生成的 java 类。 我想为每个消息对象分配唯一的键。
message Obj {
...
string unique_key = 1;
...
}
在Obj
的构造过程中,它从微服务接收到一个名为metaData
的原型(prototype)对象,其定义如下:
message metData {
map<string, string> keyFields = 1;
}
基于 metaData
对象中的条目,unique_key
是通过遍历映射并对每个条目进行散列来创建的。(keyFields 中最多有 10 个条目
)
protobuf 文档 says ,无法定义键的顺序。我应该如何保证 keyFields
中具有相同条目的不同 metaData
对象生成相同的 unique_key
?
最佳答案
通常有两种选择:
- 实现一个可交换哈希函数。例如。获取键的哈希值并简单地对它们求和而忽略溢出。
- 获取 key 并对它们进行排序。然后对它们进行哈希排序。如果有“很多”键,考虑缓存哈希值。
关于java - Protobuf 映射的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63187818/