Заказ карт Protobuf

Я создаю объекты сообщений в proto3 и использую автоматически сгенерированные классы Java. Я хочу, чтобы каждому объекту сообщения был назначен уникальный ключ.

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

Во время создания Obj он получает от микросервиса прото-объект с именем metaData, который определяется следующим образом:

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

На основе записей в объекте metaData создается unique_key путем итерации по карте и хеширования каждой из записей. (В keyFields может быть до 10 записей)

Документация protobuf говорит, что порядок ключей не может быть определен . Как я могу гарантировать, что разные объекты metaData с одинаковыми записями в keyFields генерируют одинаковые unique_key?


person Raj    schedule 31.07.2020    source источник


Ответы (1)


В целом у вас есть два варианта:

  1. Реализуйте коммутативную хеш-функцию. Например. получить хэши ключей и просто суммировать их, игнорируя переполнение.
  2. Получите ключи и рассортируйте их. Затем хэш их отсортировал. Если ключей много, рассмотрите возможность кэширования хеш-значения.
person Matej    schedule 31.07.2020