Proto の制限
Protoスキーマでサポートされる要素数の制限について説明します。
このトピックでは、Protoスキーマでサポートされる要素(フィールド、enum値など)の数に関する制限について説明します。
この情報は、多くのエンジニアによって発見された制限の集まりですが、網羅的ではなく、一部の領域では不正確/古くなっている可能性があります。作業中に制限を発見した場合は、他の人の役に立つようにこのドキュメントに貢献してください。
フィールド数
すべてのメッセージは65,535フィールドに制限されています。
単一のprotoフィールド(Booleanなど)のみを持つメッセージ
- 〜2100フィールド (proto2)
- 〜3100フィールド (optionalフィールドを使用しないproto3)
単一フィールド(Booleanなど)によって拡張された空のメッセージ
- 〜4100フィールド (proto2)
Extensionsはproto3ではサポートされていません。
この制限をテストするには、上限を超える数のフィールドを持つprotoメッセージを作成し、Java protoルールを使用してコンパイルします。この制限はJVMの仕様に由来します。
Enum内の値の数
最も低い制限はJavaの〜1700値です。他の言語には異なる制限があります。
メッセージの合計サイズ
すべての実装でサポートされる最大サイズは2GiBであるため、シリアライズ形式のすべてのprotoは2GiB未満でなければなりません。リクエストとレスポンスのサイズを制限することをお勧めします。
Protoのアンマーシャリングの深さ制限
- Java: 100
- C++: 100
- Go: 10000 (これを100に減らす計画があります)
深さ制限よりも深くネストされたメッセージをアンマーシャリングしようとすると、アンマーシャリングは失敗します。