Protobuf 映射的排序
Ordering of Protobuf maps
我正在 proto3 中创建消息对象并使用自动生成的 java 类。
我想为每个消息对象分配唯一键。
message Obj {
...
string unique_key = 1;
...
}
在构建 Obj
期间,它从微服务接收一个名为 metaData
的原型对象,其定义如下:
message metData {
map<string, string> keyFields = 1;
}
基于 metaData
对象中的条目,通过遍历映射并对每个条目进行散列来创建 unique_key
。(keyFields
中最多有 10 个条目)
protobuf 文档says,无法定义键的顺序。我应该如何保证 keyFields
中具有相同条目的不同 metaData
对象生成相同的 unique_key
?
一般来说你有两个选择:
- 实现交换哈希函数。例如。获取键的哈希值并简单地对它们求和而忽略溢出。
- 获取密钥并对它们进行排序。然后对它们进行哈希排序。如果有“很多”键,考虑缓存哈希值。
我正在 proto3 中创建消息对象并使用自动生成的 java 类。 我想为每个消息对象分配唯一键。
message Obj {
...
string unique_key = 1;
...
}
在构建 Obj
期间,它从微服务接收一个名为 metaData
的原型对象,其定义如下:
message metData {
map<string, string> keyFields = 1;
}
基于 metaData
对象中的条目,通过遍历映射并对每个条目进行散列来创建 unique_key
。(keyFields
中最多有 10 个条目)
protobuf 文档says,无法定义键的顺序。我应该如何保证 keyFields
中具有相同条目的不同 metaData
对象生成相同的 unique_key
?
一般来说你有两个选择:
- 实现交换哈希函数。例如。获取键的哈希值并简单地对它们求和而忽略溢出。
- 获取密钥并对它们进行排序。然后对它们进行哈希排序。如果有“很多”键,考虑缓存哈希值。