当保持低带宽使用率比性能更重要时,在JSON上使用二进制序列化值得吗?

当保持低带宽使用率比性能更重要时,在JSON上使用二进制序列化值得吗?,json,serialization,binary,Json,Serialization,Binary,我有一个服务器与一个移动应用程序对话,这个应用程序每天可能会发出数千个请求。在这种特殊情况下,我并不太在意性能,因此节省一些毫秒并不像节省带宽那样重要——特别是因为我在为此付费 (1) 在带宽远大于性能的情况下,与二进制相比,使用JSON有什么优势?我的意思是,我读到一些人说,原始数据和JSON之间的大小差异并没有那么大——这也可能是部分正确的,但当数十万用户每天发出数千个请求时,仅仅将字节数增加一倍就会对带宽使用产生巨大影响——最终,在服务器账单上 另外,有些人说,您可以轻松地更改JSON输出

我有一个服务器与一个移动应用程序对话,这个应用程序每天可能会发出数千个请求。在这种特殊情况下,我并不太在意性能,因此节省一些毫秒并不像节省带宽那样重要——特别是因为我在为此付费

(1) 在带宽远大于性能的情况下,与二进制相比,使用JSON有什么优势?我的意思是,我读到一些人说,原始数据和JSON之间的大小差异并没有那么大——这也可能是部分正确的,但当数十万用户每天发出数千个请求时,仅仅将字节数增加一倍就会对带宽使用产生巨大影响——最终,在服务器账单上

另外,有些人说,您可以轻松地更改JSON输出格式,而更改二进制序列化可能会稍微复杂一些。同样,我同意,但不应该比这更复杂一点吗?比如,我们改变格式的可能性有多大?改变的容易程度会弥补JSON的带宽过剩吗

(2) 最后,我在做一些关于这个主题的研究时偶然发现,在汇总表(Ctrl+F,“summary”)中,它说JSON数据大小小于实际的二进制数据?这怎么可能呢

如果能回答这些问题,我将不胜感激

先谢谢你

每天有数千个请求

那是。。。不是很多,所以大多数方法通常都是好的

在带宽远大于性能的情况下,与二进制相比,使用JSON有什么优势

JSON通常没有优势;通常是二进制协议,比如protobuf;然而,压缩可能比协议的选择更重要。然而,如果你想得到有意义的答案,唯一的办法就是用你的数据进行测试

如果带宽是您最关心的问题,我会选择protobuf,如果您的内容中有大量文本数据,则在其顶部添加压缩(文本压缩效果很好,protobuf只使用UTF8,因此它仍然可以用于压缩)

它说JSON数据的大小比实际的二进制数据小

JSON包含文本字段名、标点(
),等等-所有值都是文本而不是原始值;JSON将比好的二进制序列化程序更大。但是,本文与
BinaryFormatter
BinaryFormatter
相比,在IMO中不符合好的二进制序列化程序的条件。它易于使用,无需做任何事情即可工作。如果您与protobuf:protobuf每次都会打败JSON。如果我们看一下表,可以肯定:JSON是102或86字节(取决于序列化程序);protobuf net是62字节,MsgPack是61,
BinaryFormatter
是669。不要将“二进制序列化程序”混为一谈“使用
BinaryFormatter
。我把这个错误归咎于这篇文章,而不是你。MsgPack和协议缓冲区(protobuf-net)是二进制序列化程序,它们处于领先地位


(披露:我是protobuf net的作者)

Marc,非常感谢你的回答。然而,我认为我在请求部分没有很好地表达自己:我每天有成千上万的请求,由数十万用户中的每一个提出——有可能在某一天达到数百万用户。我们每天都在谈论数亿(甚至可能数十亿)的请求。这不是很多吗?(这是一个真正的问题,我不想被嘲笑或诸如此类的事情)@ogabrielp哦,事实上这改变了很多事情;我会一路优化:)