Proto 限制

涵蓋 proto schema 中支援的元素數量限制。

本主題記錄 proto schema 中支援的元素(欄位、列舉值等等)數量限制。

此資訊是許多工程師發現的限制集合,但並非詳盡無遺,在某些領域可能不正確或過時。當您在工作中發現限制時,請將其貢獻到此文件中以幫助他人。

欄位數量

僅具有單數 proto 欄位的訊息(例如 Boolean)

  • ~2100 個欄位 (proto2)
  • ~3100 個欄位 (proto3,不使用 optional 欄位)

由單數欄位擴充的空訊息(例如 Boolean)

  • ~4100 個欄位 (proto2)

proto3 不支援擴充。

若要測試此限制,請建立一個欄位數量超過上限的 proto 訊息,並使用 Java proto 規則進行編譯。此限制來自 JVM 規格。

列舉中的值數量

最低限制約為 1700 個值,在 Java 中。其他語言有不同的限制。

訊息總大小

任何序列化形式的 proto 都必須小於 2GiB,因為這是所有實作支援的最大大小。建議限制請求和回應大小。

Proto 反序列化的深度限制

  • Java:100
  • C++:100
  • Go:10000 (計劃將其減少到 100)

如果您嘗試反序列化巢狀深度超過深度限制的訊息,反序列化將會失敗。