当前位置 : 主页 > 大数据 > 区块链 >

protocol-buffers – 协议缓冲区对象的增量写入

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有用于记录数据的协议缓冲区. message Message { required double val1 = 1; optional int val2 = 2;}message BigObject { repeated Message message = 1;} 我每秒收到一条消息.它们使用我的BigObject存储在内存中,并用
我有用于记录数据的协议缓冲区.

message Message {
    required double val1 = 1;
    optional int val2 = 2;
}

message BigObject {
    repeated Message message = 1;
}

我每秒收到一条消息.它们使用我的BigObject存储在内存中,并用于执行某些任务.但与此同时,我希望将这些消息存储在文件中,以便在应用程序崩溃时进行备份.每次简单编写BigObject都会浪费时间.而且我试图找到自上次写入文件以来只写入添加的消息的方法.有办法吗?

Protobuf是一种可附加的格式,您的布局非常适合这种情况.只需打开位于末尾的文件,然后从新的(空)BigObject开始.只添加/序列化新的Message实例,并写入文件(从最后开始).

现在,如果您从头开始解析文件,您将获得一个包含所有Message实例(旧的和新的)的BigObject.

你实际上可以通过记录每个消息到达时记录它,只要你每次都将它包装在一个BigObject中,即伪代码

loop {
    msg = await NextMessage();
    wrapper = new BigObject();
    wrapper.Messages.Add(msg);

    file = OpenFileAtEnd();
    wrapper.WriteTo(file);
    file.Close();
}
网友评论