协议缓冲区与JSON或BSON

有没有人有关协议缓冲区与BSON(二进制JSON)或一般与JSON的性能特点的任何信息?

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

这些看起来像通过HTTP使用的好的二进制协议。 我只是想知道从长远来看哪个C#环境会更好。

以下是我在BSON和Protocol Buffers上阅读的一些信息。

Thrift也是另一个Protocol Buffers-like的替代scheme。

Java社区对这些技术的序列化/反序列化和连线大小有很好的基准: http : //code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

一般来说,JSON的线径稍大,DeSer稍差,但是无处不在,并且无需源IDL即可轻松解释。 最后一点是Apache Avro试图解决的问题,它在性能方面都有所提升。

微软已经发布了一个C#NuGet包Microsoft.Hadoop.Avro 。

以下是一些最新的基准testing,显示stream行的.NET序列化器的性能。

燃烧的僧侣基准testing显示序列化一个简单的POCO的performance,而综合的罗斯福基准testing显示在微软Northwind数据集的每个表格中序列化一行的结果。

在这里输入图像说明

基本上,协议缓冲区( protobuf-net )比.NET(XML DataContractSerializer)中最快的Base class Library Serializer快7倍左右。 它也比竞争对手小,比微软最紧凑的序列化格式(JsonDataContractSerializer)还小2.2倍。

ServiceStack的文本序列化程序是最接近匹配的二进制protobuf网的性能,其Json序列化程序只比protobuf-net慢2.58倍

协议缓冲区是为电线devise的:

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

JSON只是文本,需要parsing 。 提示:编码一个“十亿”int将需要相当多的字符:Billion = 12 char(长尺度),在二进制它适合于一个uint32_t现在怎么样试图编码一个双? 那会很糟。