寻找~昨天的熊

随便写点啥

Protocol Buffers的简单介绍

16年3月写的一篇文章,迁移到csdn上面来。

----------------------------


最近在做数据传输的相关内容时接触到了PB,发现这个技术已经在互联网领域大规模使用了,做了个小小专题,

第一步:看官网

官网地址: 
https://developers.google.com/protocol-buffers/?hl=zh-CN 
PS.官网主要是英文的

什么是PB?

ProtoBuf(protocol buffers、PB)是一款开源项目,是google提供的一种将结构化数据进行序列化和反序列化的方法(数据变成二进制的)。大约在2008年的时候,谷歌把ProtoBuf贡献给了开源社区,在随后不到1年的时间里,该款产品的用户使用量猛增。类似的概念有xml、json。国内淘宝、微信等都大规模使用PB,产生大量经典案例。

为什么要用PB?

PB的优点:语言中立,平台中立,可扩展性好。重要的是与xml相比:smaller, faster, and simpler! 
xml一直以性能不足,功能冗余而出名。对于一些PB级别的海量业务而言,使用xml无意是非常不情愿的状态,这也就是google弃用XMl转而制造出PB的原因。 
像 Java, Python, and C++等语言都是可以使用的。用户只要按照proto语法在.proto文件中定义好数据的结构,就可以使用PB提供的工具(protoc)自动生成处理数据的代码,使用这些代码就能在程序中方便的通过各种数据流读写数据。

.proto数据结构

官网给出了三种数据结构形式 
形式1:

    1. message Person {
    2. required string name = 1;
    3. required int32 id = 2;
    4. optional string email = 3;
    5. }

形式2:

    1. Person john = Person.newBuilder()
    2. .setId(1234)
    3. .setName("John Doe")
    4. .setEmail("jdoe@example.com")
    5. .build();
    6. output = new FileOutputStream(args[0]);
    7. john.writeTo(output);

形式3:

    1. Person john;
    2. fstream input(argv[1],
    3. ios::in | ios::binary);
    4. john.ParseFromIstream(&input);
    5. id = john.id();
    6. name = john.name();
    7. email = john.email();

由数据结构来看,可以发现PB还有一下优点: 
1.向后兼容性更好。在依靠老数据结构程序的基础上,对数据结构进行升级时,在添加新消息里的field并不会引起已发布程序的任何改变。 
2.语义更清楚 
3.无需学习复杂的文档对象模型,编程模式更加友好

后续:

PB的python实践 
PB与xml、json的深度比较 
动态消息下的PB 
PB适合的领域

参考资料:

http://www.searchtb.com/2012/09/protocol-buffers.html 
https://developers.google.com/protocol-buffers/docs/pythontutorial?hl=zh-CN#parsing-and-serialization

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013128262/article/details/75209285
文章标签: 数据
个人分类: 高并发 数据
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Protocol Buffers的简单介绍

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭