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

推荐订阅源

F
Fortinet All Blogs
S
Secure Thoughts
月光博客
月光博客
美团技术团队
雷峰网
雷峰网
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
News and Events Feed by Topic
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Forbes - Security
Forbes - Security
W
WeLiveSecurity
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Last Week in AI
Last Week in AI
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
N
News and Events Feed by Topic
罗磊的独立博客
The Register - Security
The Register - Security
Blog — PlanetScale
Blog — PlanetScale
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
B
Blog
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Engineering at Meta
Engineering at Meta
Latest news
Latest news
IT之家
IT之家
D
DataBreaches.Net
博客园 - 司徒正美
N
Netflix TechBlog - Medium
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 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 是一个多么有效的解决方案,我们希望人们都能因使用它而受益。看看文档下载源代码或者告诉我们你的想法吧。