json - Flatbuffer 与 CBOR

标签 json protocol-buffers flatbuffers capnproto cbor

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

FlatBuffers :

优点:

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

缺点:

  1. 新的且不像 CBOR 那样标准化。

CBOR

优点:

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

缺点:

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

PS:
感觉与 FlatBuffers 相比,在 CBOR 中管理类型的性能成本更高,但由于 CBOR 是标准化协议(protocol),如果这种差异不是很大,我倾向于更喜欢它。请告诉我你们会推荐哪两个以及为什么。

最佳答案

我想你自己已经说得很清楚了。 FlatBuffer 的优势在于无需解析/解包/分配即可访问数据,这在某些情况下可以带来巨大的性能优势。但如果这对你来说不重要,例如Protocol Buffers 也可以发挥同样的作用。

数据中的强类型与动态类型也很重要。如果我想要提前不受限制的通用数据存储,我只会使用后者。

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

FlatBuffers 不是“专有的”。它可能是由 Google 设计的,但它是开源的,并受到许多其他公司的依赖。

关于json - Flatbuffer 与 CBOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799396/

相关文章:

javascript - getJSON 并使用 $.each 循环

javascript - 是否可以在 ASP.NET MVC4 中使用一个 Controller 函数在 View 中返回两个数组?

php - json_encode - PHP 给出不完整的 json 字符串

protocol-buffers - 如何在 protobuf 消息中表示 UUID?

protocol-buffers - --grpc_out : protoc-gen-grpc: Plugin failed with status code 1 on osx. (Java)

java - 在 Java 中将编码的 FlatBuffers 表添加到父级

android - 如何使用 retrofit2 创建 json 对象数组的查询

callback - Protobuf RPC 回调

javascript - 是否可以使用 FlatBuffers 将序列化数据流式传输到文件中?

java - 任何确定收到哪种模式的方法