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に減らす計画があります)

深さ制限を超えてネストされたメッセージをアンマーシャリングしようとすると、アンマーシャリングは失敗します。