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

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