Proto-Grenzen

Behandelt die Grenzwerte für die Anzahl der unterstützten Elemente in Proto-Schemas.

Dieses Thema dokumentiert die Grenzwerte für die Anzahl der unterstützten Elemente (Felder, Enum-Werte usw.) in Proto-Schemas.

Diese Informationen sind eine Sammlung von Grenzwerten, die von vielen Ingenieuren entdeckt wurden, sind aber nicht erschöpfend und können in einigen Bereichen falsch/veraltet sein. Wenn Sie bei Ihrer Arbeit auf Einschränkungen stoßen, tragen Sie diese zu diesem Dokument bei, um anderen zu helfen.

Anzahl der Felder

Alle Nachrichten sind auf 65.535 Felder begrenzt.

Nachricht nur mit einzelnen Proto-Feldern (z. B. Boolean)

  • ~2100 Felder (proto2)
  • ~3100 (proto3 ohne Verwendung optionaler Felder)

Leere Nachricht, erweitert durch einzelne Felder (z. B. Boolean)

  • ~4100 Felder (proto2)

Erweiterungen werden in proto3 nicht unterstützt.

Um diesen Grenzwert zu testen, erstellen Sie eine Proto-Nachricht mit mehr als der oberen Feldanzahl und kompilieren Sie sie mit einer Java-Proto-Regel. Der Grenzwert ergibt sich aus den JVM-Spezifikationen.

Anzahl der Werte in einem Enum

Der niedrigste Grenzwert liegt bei ~1700 Werten in Java. Andere Sprachen haben unterschiedliche Grenzwerte.

Gesamtgröße der Nachricht

Jedes Proto in serialisierter Form muss <2GiB sein, da dies die von allen Implementierungen unterstützte maximale Größe ist. Es wird empfohlen, die Größen von Anfragen und Antworten zu begrenzen.

Begrenzung der Tiefe für das Entpacken von Proto-Nachrichten

  • Java: 100
  • C++: 100
  • Go: 10000 (es gibt einen Plan, diesen Wert auf 100 zu reduzieren)

Wenn Sie versuchen, eine Nachricht zu entpacken, die tiefer verschachtelt ist als die zulässige Tiefe, schlägt das Entpacken fehl.