Protocol Buffers:Google 的数据交换格式
原文地址:Protocol Buffers: Google’s Data Interchange Format
本文地址:http://hellobmw.com/archives/protocol-buffers-googles-data.html
由 北极冰仔 翻译,转载请以超级链接的形式注明本文地址。
在 Google,我们的任务是将全世界的所有信息进行组织。毫不夸张地,我们使用成千上万种不同的数据格式来描述服务器之间的网络信息、对存储的数据、空间数据集建立索引,还有更多。其中的大多数格式都是结构化的,而非平坦的(flat 我不会翻译-__-)。这会引出一个重要的问题:我们如何对这些格式编码?
XML?不,这不可行。尽管 XML 很棒,但面对如此规模的数据,它变得不再有效。当你所有的机器和网络连接都以最大负荷能力运转时,XML 是一种极其昂贵的方案。更别提,写代码来解析 DOM 树有时候是多么地笨重。
那么我们直接把内存中数据结构的原始字节写到网络中?不,这同样不可行。当我们推出一个新版本的服务器时,它几乎往往必须同旧的服务器通信。新服务器需要具有读取由旧服务器产生的数据的能力,反之亦然,即使仅仅是个别字段被添加或是移除。当磁盘上的数据之间互相相关时,这一点更加重要。另外,我们的一部分代码是由 Java 或 Python 编写的,所以我们需要一个可移植的解决方案。
那么我们为每种数据结构手工编写解析和序列化代码?呃,我们过去是这样。不用说什么,那不是长久之计。当在你的代码库中有数以万计的不同结构需要各自的序列化格式时,你不可能简单地用手把它们都写出来。
所以,我们开发了 Protocol Buffers。Protocol Buffers 允许你使用一种特别的定义语言来定义简单数据结构,然后将它们编译为使用你选择的那种开发语言编写的类,由它们来表示那些数据结构。这些类经过深度优化,以一种极其紧凑的格式对你的信息进行解析和序列化。最令人为之兴奋的是,这些类使用起来很简单:每个字段都拥有简单的 get 和 set 方法,一旦你准备好了,把所有的东西序列化为一个字节数组或 I/O 流,或从中解析出来时,你只消调用一个方法。
好了,我知道你在想什么:“只是另一种 IDL?”是的,你可以这么叫它。但是,几乎所有的 IDL 语言通常都有一个坏名声:复杂到无可救药。而设计 Protocol Buffers 的一个主要的目标即简单。通过一个简单的 lists-and-records 模型就解决了大部分的问题,并且能对抗追回递减的回报的愿望(汗,原文为:resisting the desire to chase diminishing returns),我们相信我们已经创造了某种强大但不臃肿的工具。另外,没错,它非常快——比 XML 至少要快一个数量级。
现在,我们决定将 Protocol Buffers 向开源社区发布。我们已经看到,对特定的任务来说,Protocol Buffers 是一个多么有效的解决方案,我们希望人们都能因使用它而受益。看看文档、下载源代码或者告诉我们你的想法吧。
posted on 2008-07-10 08:21 mjgforever 阅读(754) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述