首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在protobuf中是否存在控制原始反/序列化的扩展机制?

在protobuf中是否存在控制原始反/序列化的扩展机制?
EN

Stack Overflow用户
提问于 2012-08-10 13:29:54
回答 1查看 219关注 0票数 2

我们正在使用protobuf来序列化和反序列化深对象图。这些图的一些成员实际上是在许多图之间反复重复,就像许多对象之间的多对一关系一样。例如,一个Sale对象将是一个图,它的Store成员(可能是它自己的子图)将仅仅是每10个可能的存储库中的一个,因此它将在许多消息(Sale图)中被反复重复。

如果我们能够以某种方式缓存这些对象的序列化,我们就可以获得明显的性能好处。理想情况下,我们希望告诉RuntimeModel,某些类型--在本例中是Store --应该通过扩展点来处理,就像代理一样,但是我们能够提供原始的序列化字节。

我们的约束之一是,生成的消息仍然应该与protobuf兼容,以便在没有这些“钩子”的情况下,其他平台(例如Python)中的客户端可以直接进行解析( Python客户端的性能优化!)。

我们查看了代理程序,但是它看起来,代理程序产生的任何东西(在我们的例子中是byte[]数组)仍然会被序列化为它的类型(即byte[]数组),因此与Python所期望的存储对象不兼容。

我们还查看了扩展,即使我们在一个额外的字段中以某种方式黑进了缓存的序列化存储,我们也会回到Python客户端的起点。

在这种情况下,我们还可以使用其他扩展机制吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-10 23:39:34

哦,真有意思。实际上,python需求破坏了我将要说的内容(引用跟踪)。您可以做的是先将这些数据序列化到byte[] (通过MemoryStream),然后将该数据作为byte[]成员( byte[]和原始对象之间没有区别--外部客户端不会注意到任何不同),但是在大多数情况下,这将不会比保持对象模型“原样”和多次序列化一些节点(序列化不是很慢)更快。

坦白地说,我会以不同的方式来存储它--因此,与其将存储作为子节点存储,不如将它们唯一地作为顶级节点存储一次,只需将一些唯一的标识符存储为查找(而不是子对象本身)。不过,这改变了布局。

不,没有内置的支持这一点,我不确定这是一个关键的场景支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11909520

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文