一、protobuf简介:Google发明的一种全新的数据交换格式
当前分布式Web系统之间交换数据的所用数据格式的类型中,最常见的依然是json与XML。不过Google的技术大牛们认为json/XML这些文本类型的数据格式传输效率太差,于是他们发明了一种全新的数据格式:protobuf(https://code.google.com/p/protobuf/ )。
protobuf是一种序列化结构数据(serializing structured data)。数据在保存及传输过程中以二进制编码形态存在,相对于文本格式的数据形式,大大提高了效率。同时,由于protobuf的数据中不携带数据结构定义的信息(Schema以及类似xml中标签名称),又进一步减少了数据里的冗余信息。
据统计,一条消息数据,用protobuf序列化后的数据大小是json的10分之一,xml格式的20分之一,是传统的二进制序列化的10分之一,所以protobuf的性能优势还是很明显的。事实上这种技术早已在Google的服务中大量被应用。另外,Google也将此技术开源化来促进推广。
对于一般的开发者来说,有可能需要用到protobuf的情况:
- 对接Google的某种服务,例如开发DSP广告系统,需要对接Google的广告RTB交易平台。
- 在分布式Web系统之间交换数据时,对传输效率有非常高的要求。
官方目前仅提供3种编程语言的实现: C++, Java, Python。
虽然有许多第三方编程人员开发了PHP版本的protobuf实现,但是经过兔哥实际体验,发现非常不成熟,无法在实际项目中使用。所以如果你需要在生产环境中使用protobuf,那只能选择C++, Java, Python这3种语言,别再花时间去寻找php等版本的第三方实现了。
二、Linux下安装protobuf环境(C++, Python)
前提:需要gcc, gcc-c++, make, build等编译环境
#yum -y install gcc gcc-c++ libstdc++-devel make build
1. 下载protobuf源代码(当前最新版本为:2.5.0)
#cd /opt
#wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
2. 解压,编译,安装
#tar zxvf protobuf-2.5.0.tar.gz
#cd protobuf-2.5.0
#./configure
#make
#make check
#make install
3. 继续安装protobuf的python模块(如果不用python,可跳过这一步)
#cd ./python
#python setup.py build
#python setup.py test
#python setup.py install
4. 安装完成,验证Linux命令
#protoc –version
5. 验证Python模块是否被正确安装
#python
>>>import google.protobuf
如果没有报错,说明安装正常。