有没有人有任何关于 Protocol Buffers 与 BSON(二进制 JSON)或一般 JSON 的性能特征的信息?
- 线径
- 序列化速度
- 反序列化速度
这些看起来像是在 HTTP 上使用的很好的二进制协议。我只是想知道从长远来看,对于 C# 环境来说哪个更好。
这是我在BSON和Protocol Buffers上阅读的一些信息。
有没有人有任何关于 Protocol Buffers 与 BSON(二进制 JSON)或一般 JSON 的性能特征的信息?
这些看起来像是在 HTTP 上使用的很好的二进制协议。我只是想知道从长远来看,对于 C# 环境来说哪个更好。
这是我在BSON和Protocol Buffers上阅读的一些信息。
这篇文章比较了 .NET 中的序列化速度和大小,包括 JSON、BSON 和 XML。
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
Thrift也是另一个类似 Protocol Buffers 的替代方案。
Java 社区对这些技术的序列化/反序列化和线路大小有很好的基准: https ://github.com/eishay/jvm-serializers/wiki
一般来说,JSON 的线路尺寸稍大,DeSer 稍差,但在普遍性和无需源 IDL 的情况下轻松解释它的能力方面胜出。最后一点是Apache Avro试图解决的问题,它在性能方面胜过两者。
微软发布了一个 C# NuGet 包Microsoft.Hadoop.Avro。
以下是一些最近的基准测试,展示了流行的 .NET 序列化程序的性能。
Burning Monks 基准测试显示了序列化简单 POCO 的性能,而综合Northwind基准测试显示了在 Microsoft 的 Northwind 数据集的每个表中序列化行的组合结果。
基本上协议缓冲区(protobuf-net)比 .NET 中最快的基类库序列化器(XML DataContractSerializer)快7 倍左右。它也比竞争对手小,因为它也比微软最紧凑的序列化格式(JsonDataContractSerializer)小 2.2 倍。
ServiceStack 的文本序列化器最接近二进制 protobuf-net 的性能,其Json 序列化器仅比 protobuf-net 慢2.58 倍。
协议缓冲区是为线路设计的:
JSON 只是文本,需要对其进行解析。提示:将“十亿” int 编码到其中需要相当多的字符:Billion = 12 char's (long scale),在二进制中它适合 uint32_t 现在尝试对 double 进行编码怎么样?那会更糟。