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

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