协议缓冲区处理非常大的String消息?

时间:2010-07-29 17:56:17

标签: protocols protocol-buffers

我终于能够通过REST编写协议缓冲区代码,并与我们目前使用的XStream进行了一些比较。 一切看起来都很棒,只有一件事情绊倒。

我们在一个特定的属性中有非常大的消息,比如像这样的

message Data {
   optional string datavalue=1;
}

上面的Datavalue是极其庞大的短信。大小为512kb - 5 Mb。

协议缓冲区反序列化很好,与XStream相比具有出色的性能。 但是,我注意到当我将此消息发送到线路(通过REST)时,需要更长时间才能获得响应。总是比XStream长两倍。 我想这可能来自序列化时间。

来自谷歌文档,它说协议缓冲区不是为处理非常大的消息而设计的,尽管它可以处理非常大的数据集。

我想知道是否有人对我上述情况有任何意见或解决方案?

由于

2 个答案:

答案 0 :(得分:2)

前段时间我正在对不同的序列化工具进行基准测试,并注意到Protobuf Java库花了大约1.7倍的序列化字符串java.io.DataOutputStream。当我查看它时,它似乎与JVM如何优化某些代码路径的奇怪工件有关。但是,在我的基准测试中,即使有很长的字符串,XStream总是更慢。

快速尝试的是与格式兼容的Protostuff库代替Google的Protobuf库。

答案 1 :(得分:0)

我记得在某处(试图找到文章)阅读如果你有二进制和文本数据类型的混合,protobuf是非常好的。当您纯粹使用文本数据时,可以通过压缩来获得更好的性能和大小。