协议缓冲区与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 。
这篇文章比较了.NET中的序列化速度和大小,包括JSON,BSON和XML。
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
以下是一些最新的基准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的:
- 非常小的消息大小 – 一个方面是非常有效的可变大小整数表示。
- 非常快的解码 – 这是一个二进制协议。
- protobuf生成超高效的C ++编码和解码消息 – 提示:如果你编码所有的var整数或静态大小的项目,它将以确定的速度编码和解码。
- 它提供了一个非常丰富的数据模型 – 高效地编码非常复杂的数据结构。
JSON只是文本,需要parsing 。 提示:编码一个“十亿”int将需要相当多的字符:Billion = 12 char(长尺度),在二进制它适合于一个uint32_t现在怎么样试图编码一个双? 那会很糟。