【问题标题】:is their is any size limit of the protocol buffer?它们是协议缓冲区的任何大小限制吗?
【发布时间】:2018-09-13 09:34:16
【问题描述】:

我将数据从客户端传递到服务器,反之亦然。我想知道它们是协议缓冲区的任何大小限制。

【问题讨论】:

  • 大小限制是什么意思?消息大小限制,还是序列化限制?
  • @MarkoBencik 我说的是邮件大小限制。
  • 没有限制,除非您打算进入 GB 区域,然后我认为它是 4 Gb

标签: javascript node.js client-server protocol-buffers


【解决方案1】:

引用official source

协议缓冲区不是为处理大消息而设计的。作为一般经验法则,如果您要处理的消息大于 1 MB,则可能是时候考虑另一种策略了。

也就是说,Protocol Buffers 非常适合处理大型数据集中的单个消息。通常,大型数据集实际上只是小片段的集合,其中每个小片段都可能是结构化的数据片段。尽管 Protocol Buffers 不能一次处理整个集合,但使用 Protocol Buffers 对每个片段进行编码可以大大简化您的问题:现在您所需要的只是处理一组字节字符串而不是一组结构。

Protocol Buffers 不包含对大型数据集的任何内置支持,因为不同的情况需要不同的解决方案。有时一个简单的记录列表就可以了,而其他时候你可能想要更像一个数据库的东西。每个解决方案都应该作为一个单独的库来开发,这样只有需要它的人才需要付费。


据我了解,protobuf encoding 以下适用:

  • 未指定 64 位以上的 varint,但考虑到 their encoding works varint 位长度不受线路格式限制(由多个 1xxxxxxx 组组成并由单个 0xxxxxxx 终止的 varint 完全有效-- 我想没有实际的实现支持大于 64 位的变量)

  • 鉴于上述 varint 编码属性,应该可以对任何消息长度进行编码(因为 varint 在内部用于编码长度分隔字段的长度,而其他字段类型是 varint 或具有固定长度)

  • 您可以通过重复单个重复字段来构造任意长的有效 protobuf 消息,这是荒谬的——只要解析器有足够的内存来存储值,它就应该非常高兴(甚至还有为字段值提供回调的解析器从而放松内存消耗,例如nanopb)

(请验证我的想法)

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 2010-09-05
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2021-12-19
    • 2011-11-15
    相关资源
    最近更新 更多