6

我的问题是,如果 FlatBuffers 比 Protobuf 快得多,为什么它没有比 Protobuf 更广泛地使用?

它曾经是一个实验性的东西,但它现在似乎已经足够成熟但还没有被广泛使用。似乎人们大多将 Flatbuffers 用于移动应用程序/游戏。为什么会这样?

4

3 回答 3

4

有几个原因:

  1. 正如您所提到的,flatbuffers 主要用于应用程序和游戏中。这是因为这是他们最好的应用程序。由于 flatbuffers 更快,它们的主要应用是在低延迟应用程序中使用它们。它在该领域越来越受欢迎。

  2. 当现有技术运行良好时,人们/组织通常不想为更新的技术投入时间和资源。我亲自为一个大型组织研究了一个涉及平面缓冲区的概念证明。在做出使用该技术的最终决定之前,存在许多障碍。遗留系统仍在使用 xml 和 json,更不用说考虑 protobufs 了。

于 2019-10-11T10:10:43.740 回答
3

我只在工作中使用过 Protobuf。我认为这个问题的答案对于所有新技术的采用曲线都是一样的。“如果我们使用的东西运行良好,我们为什么要转换并不得不投资于培训并接受新的固有错误风险”。而且我还发现,很少一部分开发人员会花大量时间学习最新最好的工具。大多数人发现一些有用的东西并继续使用它,直到他们被迫改变漏洞或性能要求。

于 2019-02-01T11:41:18.760 回答
1

我认为有多种因素:

  1. 如果旧技术有效,人们通常不会费心切换(除非它成为瓶颈并且必须进行优化)。
  2. Flatbuffers 确实非常积极地优化速度,但代价是数据大小膨胀。Protobuf 的优化在速度和大小之间更加平衡。如果使用 protobuf 序列化相同消息的大小通常比使用 flatbuffers 小得多。如果您的消息是通过网络发送的,您需要考虑到这一点。(不要谈论压缩——压缩可能会比从 protobuf 切换到 flatbuffers 节省的 CPU 周期多 100 倍。)
  3. Flatbuffers 的 API 很难使用。构建和序列化一个 flatbuffers 表并不容易,特别是如果它有数组成员和/或嵌套表。相比之下,我实际上只花了一两分钟就学会了如何设置 protobuf 消息的字段并将其序列化为字节数组。
于 2021-10-05T15:44:49.347 回答