Кодировка proto3 - структура против маршалированной структуры - PullRequest
0 голосов
/ 13 ноября 2018

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

Пример: Предположим, у нас есть структура B с некоторыми полями.

message B{...}

Общее представление:

message A {
    B b = 1;
}

Другой способ:

message A {
    bytes b = 1;
}

Где b - маршалированная B-структура.

Как правило, это хорошая практика? какие-либо последствия для эффективности?

Спасибо, Elad

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я считаю плохой практикой объявлять поле bytes вместо структуры, которую вы в противном случае указали бы в прото-файле.

Это называется дырой в спецификации: вам придется написать дополнительную документацию, чтобы описать, как получатель должен понимать байты

0 голосов
/ 13 ноября 2018

На уровне полезной нагрузки они идентичны - однако, с точки зрения того, как реализации обрабатывают их , могут быть различия.Самое очевидное отличие заключается в том, что вы не можете использовать bytes, пока не выполните его дальнейшую десериализацию;у этого есть свои плюсы и минусы:

  • , если вы никогда не собираетесь его трогать, это может быть хорошо и выгодно - избегая некоторой обработки ЦП, которая вам не нужна для чтения или записи;это также будет означать, что любые последующие выделения (строки и т. д.) не должны происходить - поэтому у вас есть только один блок выделения: просто и эффективно
  • , если вам do необходимо прочитатьэто, тогда, в дополнение к тому, чтобы сделать жизнь менее удобной, вы могли бы выделить дополнительный кусок памяти для формы raw (кусок байтов), и , которые вам нужно выделитьдля десериализованной формы;если бы вы пошли прямо в десериализованную форму, большинство реализаций пропустили бы это промежуточное распределение

Итак: да, у него будут разные характеристики.Являются ли они выгодными (или наоборот), зависит от того, нужно ли вам выполнить дополнительный этап десериализации для bytes полезной нагрузки

...