【问题标题】:Protocol buffers for serializing several data objects of a post/comment into a single serialized piece of data用于将 post/comment 的多个数据对象序列化为单个序列化数据的协议缓冲区
【发布时间】:2011-03-03 18:35:52
【问题描述】:

我正在开发基于 Java 和 Cassandra 数据库的社交应用程序。我需要将用户共享帖子的帖子/cmets 存储在数据库中,我希望为每个评论/帖子序列化数据,然后将序列化数据存储在数据库中的一列中。因此,对于每条评论,都会有一个列以序列化格式存储这些数据:-

  1. 评论数据(最多 700 个字符的字符串)
  2. CommentorId(长型)
  3. 评论时间(时间戳)

同样,帖子的数据将被序列化并存储为单个列。

前端每次检索该帖子时都需要快速反序列化。

我正在将协议缓冲区视为可能的解决方案。想知道为此任务选择协议缓冲区是否是正确的选择。我正在寻找一种高性能、快速的序列化和反序列化算法,可以在应用程序中大量使用。

另外,是否可以将数据以序列化格式发送到客户端,然后可以反序列化?服务器到客户端的通信?

【问题讨论】:

    标签: java database serialization protocol-buffers


    【解决方案1】:

    协议缓冲区当然提供序列化,尽管 RPC 方面的事情留给您的想象(通常一些简单的和基于套接字的工作非常好)。

    protobuf 都很好地支持数据类型(尽管您可能希望在 unix 纪元中使用 ms 之类的东西作为日期)。请注意,protobuf 不包括压缩(除非您还将 gzip 等应用到流中)。所以消息将“比字符串长一点(它总是在 protobuf 中使用 UTF-8 编码)。我说“一点”,因为整数类型的 varint 算法可以为每个 id 提供 1 到 10 个字节之间的任何内容和时间戳,取决于它们的大小。还有几个(可能是 3 个)字节用于字段标题。

    如果这听起来不错,那么它应该可以正常工作。但是,如果您有大量文本数据,您可能还希望通过 gzip 运行 protobuf 流。 Java 通过主要的 google 主干在 protobuf 中获得了出色的支持。

    【讨论】:

    • 我猜,如果我使用 gzip 压缩,那么每次读取或写入数据时都会增加更多的性能成本。无论如何,使用 gzip 压缩通常会带来可观的节省吗?
    • @marcos - 这取决于数据。也许值得一试,尤其是因为你的大部分有效负载都是字符串
    • 谢谢马克!会试一试的!
    【解决方案2】:

    不知道这是否适合您的具体情况,但我看到了存储可以直接发送到浏览器的数据的 JSON 表示的建议。如果您不需要涉及 POJO 的任何进一步处理步骤,那么这种方法或类似方法可能是一种(快速)方法。

    【讨论】:

      【解决方案3】:

      总的来说,Protocol Buffers 看起来非常适合您想做的事情。许多人完全按照您的描述使用它。我听说其他一些人为此使用纯 JSON,但它的效率肯定较低。

      Protocol Buffers 快速、便携、成熟且文档齐全。它由谷歌开发和维护。 Protocol Buffers 的显着特征之一是能够使用新字段透明地扩展现有记录。例如,您可以扩展现有记录格式以包含其他一些字段,而无需转换现有数据或修改适用于旧字段的软件(因为它会默默地丢弃未知字段)。

      关于您关于客户端是否可以使用序列化格式的问题(如果我正确理解了这个问题)。如果客户端支持协议缓冲区并拥有描述数据格式的“.proto”文件,那么他们将能够像您一样使用它。如果客户端不能使用 Protocol Buffers,有一些第三方库 [1] 可以在 Protobuf、JSON 和 XML 格式之间进行转换(我自己没有尝试过使用它们)。

      您可能还想查看 Protocol Buffers 的一些替代方案,例如 Message Pack [2] 和 Avro。他们声称更快/更紧凑/支持动态类型。

      [1] 例如,http://code.google.com/p/protobuf-java-format/

      [2]http://msgpack.org/

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 1970-01-01
        • 2017-05-15
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多