Ограничения 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)
Если вы попытаетесь демаршалить сообщение, вложенность которого превышает лимит глубины, демаршалинг завершится неудачей.