【问题标题】:Protocol Buffers vs Flat Buffers [closed]协议缓冲区与平面缓冲区 [关闭]
【发布时间】:2017-03-27 19:24:05
【问题描述】:

所以,我目前正在从事一个广泛使用Protocol Buffers 的项目,主要是作为将复杂对象存储在键值数据库中的一种方式。

迁移到Flat Buffers 会在性能方面提供相当大的好处吗?

更一般地说,是否有充分的理由使用 Protocol Buffers 而不是 Flat Buffers?

【问题讨论】:

    标签: c++ protocol-buffers flatbuffers


    【解决方案1】:

    协议缓冲区针对线路上的空间消耗进行了优化,因此对于存档和存储,它们非常有效。然而,复杂的编码解析起来很昂贵,因此它们的计算成本很高,而且 C++ API 大量使用动态分配。另一方面,平面缓冲区针对高效解析和内存中表示进行了优化(例如,在某些情况下提供数据的零拷贝视图)。

    这取决于您的用例,哪些方面对您更重要。

    【讨论】:

      【解决方案2】:

      引用flatbuffer页面:

      为什么不使用协议缓冲区,或者..?

      Protocol Buffers 确实与 FlatBuffers 比较相似,具有 主要区别在于 FlatBuffers 不需要解析/ 在您可以访问之前将步骤解包到辅助表示 数据,通常与每个对象的内存分配相结合。代码是一个 数量级更大,也是。 Protocol Buffers 没有可选的 文本导入/导出或联合等模式语言功能。

      【讨论】: