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に減らす計画があります)
深さ制限を超えてネストされたメッセージをアンマーシャリングしようとすると、アンマーシャリングは失敗します。