Flatbuffers vs CBOR

问题描述 投票:4回答:2

请帮助提出FlatbuffersCBOR协议的一些优点和缺点。这两种二进制格式都声称在他们的网站上很好,但我无法在两者之间做出一些很好的区别。

Flatbuffers:

优点:

  1. FlatBuffer,Cap'n proto和其他类似解决方案中的严格输入被视为性能的主要关键点,因为不需要额外的编码/解码。
  2. 数据模型允许使用紧凑的数据结构和快速访问来简单地抵消类型化对象
  3. 在您访问通常与每个对象内存分配相关联的数据之前,FlatBuffers不需要对辅助表示进行解析/解包步骤。

坏处:

  1. 像CBOR一样新的而不是标准化的。

CBOR

优点:

  1. 可以完全在流中创建和处理,无需额外的内存
  2. 不必预先定义任何模式,因为我们的数据是动态的和变体的
  3. 它是IETF的开放式国际标准,使其成为比专有标准更好的选择。
  4. 它专为低内存,非转换,基于流的处理而设计,同时还为其他数据类型提供扩展

坏处:

  1. CBOR说它遵循JSON模型(因此不是严格类型的对象)
  2. 它以相同类型的对象(字符串,整数,映射等)开头。

PS: 感觉像CBOR中的管理类型与平板缓冲器相比性能成本高,但是由于CBOR是标准化协议,如果这种差异不大,我倾向于选择它。请让我知道你们两个中的哪一个会推荐以及为什么。

json protocol-buffers flatbuffers capnproto cbor
2个回答
2
投票

我想你已经很清楚地把它拼写出来了。 FlatBuffer的优势在于无需解析/解包/分配即可访问数据,这在某些情况下可以带来严重的性能优势。但如果这对你没关系,例如协议缓冲区也可以正常工作。

强类型与动态类型的数据也很重要。如果我想要提前没有约束的通用数据存储,我只会使用后者。

顺便说一句,如果由于某种原因你更喜欢动态打字,但也希望获得就地访问的性能优势,实际上有一种格式将两者结合起来:https://google.github.io/flatbuffers/flexbuffers.html

FlatBuffers不是“专有”的。它可能是在谷歌设计的,但它是开源的,并且是许多其他公司所依赖的。


2
投票

我为我的网站https://kwippe.com选择了CBOR - 我们使用它将所有的艺术作品和关键字数据存储为一个非常小的JSON结构中的压缩字符串,只需要几个属性来对文件进行分类。因此文件非常小,加载速度非常快。我用它来处理超过30,000个SVG文件,我事先将其转换为JSON。所有JSON都转换为字符串并通过字符串压缩库进行压缩,然后保存为我编码为CBOR的较小JSON对象的一部分。

我对这个CBOR系统的问题很少,而且设置比FlatBuffers和我看到的其他一些二进制解决方案要容易得多。

© www.soinside.com 2019 - 2024. All rights reserved.