我的protobuf讯息中有一些重复的内容。在运行时,消息的长度可以是任意长度-我看到已经像这样问了一些问题-[1]:最大序列化Protobuf消息大小
10MB正在推动它,但您可能会没事的。
Protobuf的硬限制为2GB,因为许多实现使用32位带符号算术。出于安全原因,许多实施方式(尤其是Google提供的实施方式)默认都限制为64MB,不过您可以根据需要手动增加此限制。
该实现本身不会“放慢”大消息本身,但是问题是,在开始使用任何内容之前,必须始终一次解析整个消息。这意味着整个消息必须适合RAM(请记住,在解析内存消息对象之后,该对象比原始序列化消息要大得多),即使您只关心一个字段,也必须等待整个过程才能完成。解析。
通常,我建议根据经验将自己限制为1MB。除此之外,考虑将消息拆分为多个可以独立解析的块。但是,每个应用程序-对于某些应用程序来说10MB都不是什么大问题,对于其他应用程序来说1MB已经太大了。您必须分析自己的应用程序才能找到。
实际上,我已经看到人们乐于发送大于1GB的消息的情况,因此...它“有效”。
附带说明,Cap'n Proto与Protobuf的设计非常相似,但是可以支持高达2 ^ 64字节的消息(每个2 ^ 32段,每段4GB),并且实际上允许您从消息中读取一个字段而无需解析整个消息(如果它在磁盘上的文件中,mmap()
请避免读入整个消息)。
(公开:我是Cap'n Proto的作者,也是Google大部分开源Protobuf代码的作者。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句