假设我有一个这样的 .proto 结构(简化)
Message DataItem {
required string name = 1;
required int32 value = 2;
}
Message DataItemStream {
repeated DataItem items = 1;
}
服务器将生成DataItemStream
并将其写入磁盘。我们加载这个文件,一切都很顺利,没有问题。
这对我们来说效果很好,但我们的客户群已经增长,生成文件流的软件的使用也在增长。
问题出现了,因为重复items
字段可以有成千上万个项目,但我们只对其中的一个子集感兴趣。我们已经挖了一点,只看到了遵循谷歌流式建议的解决方案(向我们存储的 s添加大小 前缀DataItem
,然后单独解析每条消息或使用 CodedInputStream
/CodedOutputStream
或编码二进制线格式(base64)和用换行符分隔,那么我们就可以很容易地得到我们感兴趣的子集。
这些中的任何一个都对我们有用,但需要对生产代码进行一些更改以更改文件的保存方式(基于服务器的代码已经很长时间没有更改并且被他们的管理层认为几乎无法触及(在他们看来,不要'如果没有损坏就不要修复它)...)
我们已经为以不同方式流式传输消息的服务器重新创建了模块,但收到了来自那些维护人员关于推送我们的更改的抨击。对我们来说,根据需要更改代码要容易得多(政治上),因为我们可以完全控制其开发周期。
有没有办法仍然使用这个原始的消息流,但只选择要加载的消息子集是智能的?(如果这很重要,我们真的不在乎我们必须使用哪种语言,我们有 c++、python、java 和 .NET 方面的经验(按经验顺序))