Protocol Buffer对象的增量写入

时间:2011-07-26 09:00:42

标签: protocol-buffers

我有用于记录数据的协议缓冲区。

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

message BigObject {
    repeated Message message = 1;
}

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

1 个答案:

答案 0 :(得分:3)

Protobuf是一种可附加格式,您的布局理想。只需打开位于末尾的文件 ,然后以新的(空)BigObject开头。添加/序列化只是新的Message实例,然后写入文件(从最后开始)。

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

您实际上可以通过记录每个人Message到达时记录,只要您每次将其包裹在BigObject中,即以伪代码

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

    file = OpenFileAtEnd();
    wrapper.WriteTo(file);
    file.Close();
}