4

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

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

更一般地说,是否有充分的理由使用协议缓冲区而不是平面缓冲区?

4

2 回答 2

12

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

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

于 2017-03-27T19:56:18.480 回答
3

flatbuffer页面引用:

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

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

于 2017-11-28T17:40:10.180 回答