流式传输 protoBuf 消息的设计模式

     2023-02-16     226

关键词:

【中文标题】流式传输 protoBuf 消息的设计模式【英文标题】:design pattern for streaming protoBuf messages 【发布时间】:2013-11-19 08:47:29 【问题描述】:

我想将 protobuf 消息流式传输到文件中。

我有一个 protobuf 消息

message car 
     ... // some fields

我的 java 代码会创建这个汽车消息的多个对象。

我应该如何将这些消息流式传输到文件中。

据我所知有两种方法。

    有另一条消息,比如汽车

    message cars 
      repeated car c = 1;
    
    

    并让 java 代码创建一个单一的汽车类型对象,然后将其流式传输到文件中。

    只需使用 writeDelimitedTo 函数将汽车消息适当地流式传输到单个文件中即可。

我想知道使用 protobuf 进行流式传输的效率更高。

什么时候应该使用模式 1,什么时候应该使用模式 2?

这是我从https://developers.google.com/protocol-buffers/docs/techniques#large-data得到的

我不清楚他们想说什么。

大型数据集

协议缓冲区不是为处理大消息而设计的。作为一个 一般经验法则,如果您处理的消息大于 每兆字节,可能是时候考虑另一种策略了。

也就是说,Protocol Buffers 非常适合处理单个消息 在一个大数据集中。通常,大型数据集实际上只是一个 小片段的集合,其中每个小片段都可能是结构化的 一块数据。即使协议缓冲区无法处理整个 立即设置,使用 Protocol Buffers 对每一部分进行大幅编码 简化您的问题:现在您只需要处理一组字节 字符串而不是一组结构。

协议缓冲区不包含对大数据的任何内置支持 因为不同的情况需要不同的解决方案。 有时一个简单的记录列表就可以了,而其他时候你可以 想要更像数据库的东西。应开发每个解决方案 作为一个单独的图书馆,因此只有需要的人需要付费 费用。

【问题讨论】:

你不应该寻找设计模式。它们是来自理想代码的东西。您应该问的是“我可以编写此代码的最简单方法是什么?”。如果这恰好是一个设计模式(或关闭),那么就使用它。否则,不要。 @chris Thanx 对于您的回复,我可以两种方式进行编码(如问题中所述)。想知道哪种方法更有效。序列化或反序列化时间、流对象大小方面的效率。 我没有回应,我只是对您的问题进行了一些小的格式更改。 【参考方案1】:

看看Previous Question。大小和时间的任何差异都将是最小的 (选项 1 更快??,选项 2 更小)。

我的建议是:

    大文件的选项 2。您逐条处理消息。 如果需要多种语言,请选择选项 1。过去,并非所有语言都支持分隔,但这种情况似乎正在改变。 其他明智的个人偏好。

【讨论】:

谢谢。你的回答内容丰富。我不知道我怎么错过了另一页:( (***.com/questions/16468369/…)

如何在 protobuf-net.grpc 的消息中使用 IAsyncEnumerable?

】如何在protobuf-net.grpc的消息中使用IAsyncEnumerable?【英文标题】:HowtouseIAsyncEnumerablewithinamessageinprotobuf-net.grpc?【发布时间】:2020-02-0113:58:41【问题描述】:所以,最近我在IAsyncEnumerable<T>的帮助下了解了如何使用protobuf... 查看详情

流式传输 Twitter 直接消息

】流式传输Twitter直接消息【英文标题】:StreamingTwitterdirectmessages【发布时间】:2015-09-1522:44:54【问题描述】:我正在使用以下代码流式传输我的Twitter帐户收到的直接消息-:fromtweepyimportStreamfromtweepyimportOAuthHandlerfromtweepyimportAPIfro... 查看详情

嵌套 json 中的结构化流式传输不同模式

】嵌套json中的结构化流式传输不同模式【英文标题】:structuredstreamingdifferentschemainnestedjson【发布时间】:2018-08-1316:34:06【问题描述】:您好,我有一个场景,传入的消息是一个Json,它的标题是表名,数据部分有表列数据。现在... 查看详情

使用骆驼 JMS 流式传输

】使用骆驼JMS流式传输【英文标题】:StreamingusingcamelJMS【发布时间】:2018-03-0711:19:15【问题描述】:我有一个将消息放入JMS队列的应用程序。消息大小可以达到150mb。JMS消息包含带有附加元数据的字节数组数据作为xml,一旦将消... 查看详情

googleprotobuf简明教程

Protobuf是什么Protobuf实际是一套类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用。通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。P... 查看详情

WCF:使用带有消息契约的流式传输

】WCF:使用带有消息契约的流式传输【英文标题】:WCF:usingstreamingwithMessageContracts【发布时间】:2010-11-2307:34:39【问题描述】:我正在尝试将WCF流与消息契约一起使用,因为除了流本身之外我还需要其他参数。基本上我正在创建... 查看详情

Spark 流式传输 Kafka 消息未使用

】Spark流式传输Kafka消息未使用【英文标题】:SparkstreamingKafkamessagesnotconsumed【发布时间】:2018-06-2511:47:21【问题描述】:我想使用Spark(1.6.2)Streaming从Kafka(brokerv0.10.2.1)中的某个主题接收消息。我正在使用Receiver方法。代码如下:pub... 查看详情

通过 AWS SQS 传输 ProtoBuf-net 消息时二进制字符无效

】通过AWSSQS传输ProtoBuf-net消息时二进制字符无效【英文标题】:InvalidbinarycharacterwhentransmittingProtoBuf-netmessagesoverAWSSQS【发布时间】:2013-05-0203:06:41【问题描述】:我正在使用Protobuf-net(https://code.google.com/p/protobuf-net/)序列化我的课... 查看详情

Java - 将 JMS 消息流式传输到 Oracle 表中

】Java-将JMS消息流式传输到Oracle表中【英文标题】:Java-StreamingJMSmessagesintoanOracletable【发布时间】:2017-04-0314:03:39【问题描述】:我们正在使用SpringBoot和JDBC来捕获JMS消息并将它们保存到数据库表中。为了尽可能减少内存占用,... 查看详情

unity探索者之socket传输protobuf字节流

...长度+消息id+消息主体内容3publicclassMessage4{5publicIExtensibleprotobuf;6publi 查看详情

im即时通讯开发:protobuf数据传输格式

...讯开发者同行的眼里,怎么选择其实是个极富争议话题。Protobuf简介一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是 查看详情

XMPP 和 PHP 流式传输

】XMPP和PHP流式传输【英文标题】:XMPPandPHPstreaming【发布时间】:2012-01-2819:59:29【问题描述】:我正在创建一个使用php连接到XMPP服务器并发送消息的网站但是,我在发送/接收消息时遇到问题..问题是每次我发出请求(发送消息)... 查看详情

WCF HttpTransport:流式传输与缓冲传输模式

】WCFHttpTransport:流式传输与缓冲传输模式【英文标题】:WCFHttpTransport:streamedvsbufferedTransferMode【发布时间】:2011-05-0121:59:51【问题描述】:我有一个通过基于HttpTransport的自定义绑定公开的自托管WCF服务(v4框架)。绑定使用自定... 查看详情

通过 HTTP 流式传输纯文本

】通过HTTP流式传输纯文本【英文标题】:streamingplaintextoverHTTP【发布时间】:2017-05-0716:11:22【问题描述】:我希望通过HTTP流式传输一组日志消息。我想一次一行发送消息,可能在行之间有延迟,并且我希望每行在服务器发送后... 查看详情

从 Internet 流式传输单个音频文件

】从Internet流式传输单个音频文件【英文标题】:streamasingleaudiofilefromtheinternet【发布时间】:2011-12-0522:43:54【问题描述】:我在我的应用程序中使用AFNetworking套件。在应用程序中,您可以录制一条消息,该消息会上传到服务器。... 查看详情

在 python 中使用 BigQuery 接收器流式传输管道

】在python中使用BigQuery接收器流式传输管道【英文标题】:StreamingpipelineswithBigQuerysinksinpython【发布时间】:2018-07-3120:44:19【问题描述】:我正在构建一个源为Pubsub且接收器为BigQuery的apache光束流管道。我收到了错误消息:“工作... 查看详情

Protobuf 的 Kafka 模式注册表

】Protobuf的Kafka模式注册表【英文标题】:KafkaSchemaRegistryforProtobuff【发布时间】:2021-11-2709:27:07【问题描述】:生产者在发送消息时使用的模式如何登陆kafka模式注册表,因为生产者只会知道生成的protobuff消息的类。另外,消费... 查看详情

在 Java 中读取 protobuf 消息时出现异常

】在Java中读取protobuf消息时出现异常【英文标题】:ExceptionswhenreadingprotobufmessagesinJava【发布时间】:2011-07-0215:19:32【问题描述】:我已经使用protobuf几个星期了,但在Java中解析protobuf消息时我仍然不断收到异常。我使用C++创建我... 查看详情