Ограничения Proto

Охватывает ограничения на количество поддерживаемых элементов в схемах proto.

В этой теме документированы ограничения на количество поддерживаемых элементов (полей, значений перечислений и т.д.) в схемах proto.

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

Количество полей

Все сообщения ограничены 65 535 полями.

Сообщение только с одиночными полями proto (такими как Boolean):

  • ~2100 полей (proto2)
  • ~3100 (proto3 без использования опциональных полей)

Пустое сообщение, расширенное одиночными полями (такими как Boolean):

  • ~4100 полей (proto2)

Расширения не поддерживаются в proto3.

Чтобы проверить это ограничение, создайте proto-сообщение с количеством полей, превышающим верхнюю границу, и скомпилируйте его, используя правило Java proto. Ограничение исходит из спецификаций JVM.

Количество значений в перечислении

Самый низкий предел составляет ~1700 значений, в Java. Другие языки имеют разные ограничения.

Общий размер сообщения

Любой proto в сериализованной форме должен быть <2 GiB, так как это максимальный размер, поддерживаемый всеми реализациями. Рекомендуется ограничивать размеры запросов и ответов.

Ограничение глубины для демаршалинга Proto

  • Java: 100
  • C++: 100
  • Go: 10000 (есть план уменьшить это до 100)

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