protobuf简介:Google发明的一种全新的数据交换格式
当前分布式Web系统之间交换数据的所用数据格式的类型中,最常见的依然是json与XML。不过Google的技术大牛们认为json/XML这些文本类型的数据格式传输效率太差,于是他们发明了一种全新的数据格式:https://github.com/google/protobuf。
protobuf是一种序列化结构数据(serializing structured data)。数据在保存及传输过程中以二进制编码形态存在,相对于文本格式的数据形式,大大提高了效率。同时,由于protobuf的数据中不携带数据结构定义的信息(Schema以及类似xml中标签名称),又进一步减少了数据里的冗余信息。
据统计,一条消息数据,用protobuf序列化后的数据大小是json的10分之一,xml格式的20分之一,是传统的二进制序列化的10分之一,所以protobuf的性能优势还是很明显的。事实上这种技术早已在Google的服务中大量被应用。另外,Google也将此技术开源化来促进推广。
对于一般的开发者来说,有可能需要用到protobuf的情况:
- 对接Google的某种服务,例如开发DSP广告系统,需要对接Google的广告RTB交易平台。
- 在分布式Web系统之间交换数据时,对传输效率有非常高的要求。
官方目前多种编程语言的实现: C++、Java、Python、Objective-C、JavaScript、Ruby、Go。暂时没有PHP版本。
Linux下安装protobuf环境(C++, Python)
前提:需要gcc, gcc-c++, make, build等编译环境
#yum -y install gcc gcc-c++ libstdc++-devel make build
-
git下载protobuf源代码
#cd /opt #git clone https://github.com/google/protobuf.git
-
解压,编译,安装
#cd protobuf #./configure #make #make check #make install
-
继续安装protobuf的python模块(如果不用python,可跳过这一步)
#cd ./python #python setup.py build #python setup.py test #python setup.py install
-
安装完成,验证Linux命令
#protoc –version
-
验证Python模块是否被正确安装
#python >>>import google.protobuf
如果没有报错,说明安装正常。
学习官方的python使用教程:
https://developers.google.com/protocol-buffers/docs/pythontutorial
看懂该文章并能够从头到尾执行样例代码的话,protobuf就算入门了。虽然protobuf内部很复杂,但是Google封装的很不错,留给外部的接口已经很简单了。使用面向对象的编程语言来操作protobuf,其实是非常轻松的一件事情。