Эффективные альтернативы кодирования для карты в буферах протокола - PullRequest
1 голос
/ 20 июня 2020

У меня есть сообщение protob для кодирования пар ключ-значение. Мне было интересно, какой вид сообщения лучше всего подходит для того же.

message KeyValPair{
   map<string,string> dict = 1;
}

В моем случае количество пар ключ-значение всегда фиксировано. Мне нужно использовать эти сообщения как часть службы gRP C, и мне нужны советы по формату сообщения, который требует наименьшего времени для анализа и передачи.

Моя клиентская сторона реализована в Java и на стороне сервера в Go.

1 Ответ

1 голос
/ 20 июня 2020

Вы говорите, что количество пар фиксировано. В большинстве случаев, когда число пар фиксировано, это означает, что ключи предсказуемы. В случае , что , лучше всего было бы указать их явно, чтобы вы никогда не отправляли ключи (только номера тегов):

message MyThing {
    string foo =1;
    string bar = 2;
    // ...
    string blap = 42;
}

Если ключи не на самом деле предсказуемо, тогда: map<string,string>. Это идентично вашему сообщению о повторении пары ключ / значение при кодировании, но может иметь более конкретную c / более прямую поддержку во многих реализациях.

Вы всегда можете комбинировать оба, поэтому используйте комбинацию string поля для известных / предсказуемых ключей и map<string, string> для неизвестных дополнительных ключей.

...