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