惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

博客园 - mjgforever

sp_executesql和临时表的用法 51 条 ActionScript 3.0 和 Flex 优化技术与实践 open source Flex project list Open Source Replication and Synchronization Tools Written in Java 用SyncML进行异构数据库复制 WF学习系列之六:工作流和宿主程序通讯异常引发的思考 - mjgforever - 博客园 WF学习系列之五:状态机工作流学习 WF学习系列之四:顺序工作流控制台应用程序模板介绍 WF学习系列之三:RuleSet知识点概述 WF学习系列之二:开发工作流知识点概述 WF学习系列之一:WF基本知识点概述 abstract, virtual, override, new 关键字的用法 ArcIMS 安装指南 Google推出Protocol Buffers:争夺网络时代数据格式 Protocol Buffers 简介 微软vs.VMware:虚拟化中的真实战争 文本文件与二进制文件 字符编码简介:ASCII,Unicode,UTF-8,GB2312 Adobe Flex的十大误解
Protocol Buffers:Google 的数据交换格式
mjgforever · 2008-07-10 · via 博客园 - mjgforever

原文地址: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 BuffersProtocol Buffers 允许你使用一种特别的定义语言来定义简单数据结构,然后将它们编译为使用你选择的那种开发语言编写的类,由它们来表示那些数据结构。这些类经过深度优化,以一种极其紧凑的格式对你的信息进行解析和序列化。最令人为之兴奋的是,这些类使用起来很简单:每个字段都拥有简单的 get 和 set 方法,一旦你准备好了,把所有的东西序列化为一个字节数组或 I/O 流,或从中解析出来时,你只消调用一个方法。

好了,我知道你在想什么:“只是另一种 IDL?”是的,你可以这么叫它。但是,几乎所有的 IDL 语言通常都有一个坏名声:复杂到无可救药。而设计 Protocol Buffers 的一个主要的目标即简单。通过一个简单的 lists-and-records 模型就解决了大部分的问题,并且能对抗追回递减的回报的愿望(汗,原文为:resisting the desire to chase diminishing returns),我们相信我们已经创造了某种强大但不臃肿的工具。另外,没错,它非常快——比 XML 至少要快一个数量级。

现在,我们决定将 Protocol Buffers 向开源社区发布。我们已经看到,对特定的任务来说,Protocol Buffers 是一个多么有效的解决方案,我们希望人们都能因使用它而受益。看看文档下载源代码或者告诉我们你的想法吧。