代码之家  ›  专栏  ›  技术社区  ›  Jeff Meatball Yang

协议缓冲区与JSON或BSON

  •  86
  • Jeff Meatball Yang  · 技术社区  · 15 年前

    对于协议缓冲区与BSON(二进制JSON)或JSON的总体性能特征,是否有人有任何信息?

    • 线材尺寸
    • 序列化速度
    • 反序列化速度

    这些似乎是通过HTTP使用的很好的二进制协议。我只是想知道,从长远来看,对于C环境而言,哪一个更好。

    这是我读到的一些信息 BSON Protocol Buffers .

    4 回复  |  直到 6 年前
        1
  •  63
  •   s.m.    6 年前

    Thrift 是另一个类似于替代方案的协议缓冲区。

    Java社区对串行化/反序列化和这些技术的线大小有很好的基准: https://github.com/eishay/jvm-serializers/wiki

    一般来说,JSON的线大小稍大,Deser稍差,但它在通用性方面获胜,并且能够在没有源IDL的情况下轻松地解释它。最后一点是 Apache Avro 正在努力解决问题,而且在性能上比两者都强。

    微软发布了一个c nuget包 Microsoft.Hadoop.Avro .

        3
  •  50
  •   mythz    13 年前

    以下是 some recent benchments showing the performance of popular.net serializer.

    Burning Monks Benchmarks Show the performance of serializing a simple poco while the comprehensive nortHwind Benchmarks 显示在Microsoft的Northwind数据集的每个表中序列化一行的组合结果。

    基本上,协议缓冲区( protobuf-net )大约在.net(xml datacontractserializer)中比最快的基类库序列化程序更快。它也比竞争对手小,因为它也是 2.2x smaller than microsofts most compact serialization format(jsonDataContractSerializer)。

    ServiceStack的文本序列化程序最接近匹配二进制Protobuf NET的性能,其中它的json序列化程序 json serializer is only 2.58x slower than Protobuf NET.

    显示流行的.NET序列化程序的性能。

    这个 Burning Monks benchmarks 显示序列化一个简单POCO的性能,同时显示 Northwind benchmarks 显示序列化Microsoft Northwind数据集的每个表中的行的组合结果。

    enter image description here

    基本上是协议缓冲区( protobuf-net )就在附近 7X 比.NET中最快的基类库序列化程序(XML DataContractSerializer)更快。它也比竞争对手小,因为它也是 2.2x 小于Microsoft最紧凑的序列化格式(jsonDataContractSerializer)。

    ServiceStack的文本序列化程序最接近二进制Protobuf网络的性能,其中 Json Serializer 只是 2.58x 比原布网慢。

        4
  •  22
  •   Scott Stensland    8 年前

    协议缓冲区是为以下线路设计的:

    1. 非常小的消息大小-一个方面是非常有效的可变大小整数表示。
    2. 非常快的解码-这是一个二进制协议。
    3. OptoBuf生成用于编码和解码消息的超高效C++——提示:如果将所有VAR整数或静态大小的条目编码到它中,它将以确定的速度编码和解码。
    4. 它提供了一个非常丰富的数据模型——高效地编码非常复杂的数据结构。

    JSON只是文本,它需要 解析 . 提示:将一个“billion”in t编码到它里面需要相当多的字符:billion=12个字符(长尺度),在二进制文件中,它适合于一个uint32,现在试着编码一个double怎么样?那就更糟了。