【问题标题】:Protocol buffers handling very large String message?协议缓冲区处理非常大的字符串消息?
【发布时间】:2010-07-29 17:56:16
【问题描述】:

我终于能够在 REST 上编写协议缓冲区代码,并与我们目前使用的 XStream 进行了一些比较。 一切似乎都很好,只是偶然发现一件事。

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

message Data {
   optional string datavalue=1;
}

上面的数据值是非常大的文本消息。大小为 512kb - 5 Mb。

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

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

我想知道是否有人对我上面的案例有一些意见或解决方案?

谢谢

【问题讨论】:

    标签: protocols protocol-buffers


    【解决方案1】:

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

    一个快速尝试的方法是使用格式兼容的 Protostuff 库来代替 Google 的 Protobuf 库。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        相关资源
        最近更新 更多