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

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