2010-07-29 73 views
1

我终于能够通过REST编写协议缓冲区代码,并与我们当前使用的XStream做了一些比较。一切似乎都很棒,只有一件事情绊倒。处理非常大的String消息的协议缓冲区?

我们必须在一个特定的属性非常大的消息,上面说的是这样的

message Data { 
    optional string datavalue=1; 
} 

Datavalue是非常巨大的短信。大小是512kb - 5 Mb。

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

从谷歌的文件,它说协议缓冲区并不旨在处理非常大的消息,虽然它可以处理非常大的数据集。

我想知道是否有人对我的案例有任何意见或解决办法?

感谢

回答

2

我标杆不同的序列化工具,而以前,注意到的Protobuf Java库花了大约1.7倍,只要序列化的字符串作为java.io.DataOutputStream一样。当我研究它时,它似乎与JVM如何优化特定代码路径的奇怪工件有关。然而,在我的基准测试中,XStream总是比较慢,即使是很长的字符串也是如此。

一件简单的事情就是使用格式兼容的Protostuff库来代替Google的Protobuf库。

0

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