`

protobuf/json/xml/binary/Thrift数据交换[转]

    博客分类:
  • java
 
阅读更多

一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明显的

protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,详情访问protobuf的google官方网站

protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。

protobuf简单总结如下几点:

  1. 灵活(方便接口更新)、高效(效率经过google的优化,传输效率比普通的XML等高很多);
  2. 易于使用;开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
  3. 多语言支持;原生支持c++,java,python

个人总结的适用protobuf的场合

  1. 需要和其它系统做消息交换的,对消息大小很敏感的。那么protobuf适合了,它语言无关,消息空间相对xml和json等节省很多。
  2. 小数据的场合。如果你是大数据,用它并不适合。
  3. 项目语言是c++,java,python的,因为它们可以使用google的源生类库,序列化和反序列化的效率非常高。其它的语言需要第三方或者自己写,序列化和反序列化的效率不保证。
  4. 总体而言,protobuf还是非常好用的,被很多开源系统用于数据通信的工具,在google也是核心的基础库。

此外,还有更牛叉的facebook的thrift,2007年由Facebook开发,之后在2008年加到Apache计划中。是一个跨语言的轻量级RPC消息和数据交换框架,Thrift能生成的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml,这是它的一大优点。

分享到:
评论

相关推荐

    实现protobuf与json的互转

    使用protobuf的Description技术,实现protobuf结构体与json语言之间的黑盒转换.

    tensorboard无法通过终端打开

    [libprotobuf ERROR external/com_google_protobuf/src/google/protobuf/descriptor_database.cc:393] Invalid file descriptor data passed to EncodedDescriptorDatabase::Add(). [libprotobuf FATAL external/...

    实现protobuf和json互相转换python3源码

    实现protobuf和json互相转换python3源码,protobuf是Google开源的新传输协议,压缩效率和传输效率比XML和json都要高

    基于protobuf反射特性的pb、json相互转换的实例程序(C++)

    本资源提供了一个基于protobuf反射特性的pb结构与json相互转换的实例,该实例程序主要有两个核心函数myMessage2Json、myJson2Message。前者的作用是将pb结构转换成对应的json,后者是将json转换成对应的pb结构体。...

    protobuf/thrift/avro-序列化性能测试工程

    工程目录介绍,标准的maven工程 src/main/resource : 放置schema lib:放置生成bean的工具 doc:放置测试结果

    protobuf转换为json

    protobuf转换为json,原版中存在bug,使用时候修复了原版的bug

    google开源C++项目

    #include <google/protobuf/stubs/common.h> namespace google { namespace protobuf { // Defined in this file. class Service; class RpcController; class RpcChannel; // Defined in other files. class ...

    protoc-gen-jsonschema:从Protobuf到JSON-Schema编译器

    对于使用ProtoBuf定义数据但将JSON用作“ wire”格式的人们很有用。 受到“重大影响”。安装注意:此工具需要安装Go 1.11+。 使用Go安装此插件: GO111MODULE=on \go get github....

    google protobuf

    google protobuf库文件,编译方法,及使用 google protobuf学习笔记一:windows下环境配置

    protobuf-jsonschema:将Protobuf IDL编译为JSON模式

    protobuf-jsonschema 将编译为定义。 用法 您可以将protobuf-jsonschema用作命令行工具,或用作node中的函数。 CLI可以输出JSON或YAML(例如,用于Swagger)。 如果您指定一个protobuf消息名称以及一个文件,它将...

    google/protobuf/duration.proto

    google proto-buf中常被使用的一个计时文件,可能你的proto文件需要使用

    java开发Google protobuf 3.2.0 jar包 protobuf-java-3.2.0.jar

    ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署...

    protobuf-go-master.zip

    google.golang.org/...google.golang.org/protobuf/reflect "google.golang.org/protobuf/encoding/prototext" "google.golang.org/protobuf/encoding/protowire" "google.golang.org/protobuf/runtime/protoimpl

    protobuf-2.5.0

    不想要资源分的,可是不能选0分。 将此包解压缩后得到tar文件,然后开始第1步。 (1)设置编译目录: ./configure --prefix=/User/XXX/protobuf ...export PATH=$PROTOBUF/bin:$PATH (5)测试: protoc --version

    【源码阅读】 protobuf 中的 timestamp 包

    path: google/protobuf/timestamp.proto 在 timestamppb 中 Timestamp 包含两个字段 seconds 表示秒 nanos 表示纳秒 message Timestamp { int64 seconds = 1; int32 nanos = 2; } timestamp.go path: github....

    protobuf 在 linux 和window 安装教程,

    下载protobuf的C++版本的源代码,地址:https://github.com/google/protobuf/releases 下载 protobuf-cpp-3.8.0.zip/tar.gz 这个包 解压源码 (路径不要带中文) 安装cmake,下载地址:https://cmake.org/download/ ...

    protobuf-cpp-3.1.0.tar.gz

    由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件...

    google protobuf的应用

    服务器端与客户端通信,使用google protobuf作为交互数据的序列化工具,其中客户端使用select机制实现I/O复用,服务端使用epoll机制,提高并发连接时的处理效率。软件环境:linux。文件dealpack.cc是服务端和客户端...

    testProtobufjs:用ProtoBuf.js将JSON数据缓存转成二进制缓存

    用ProtoBuf.js将JSON数据缓存转成二进制缓存 edit by Seven on 2015-05-31 项目介绍 安装 npm install 转换 node main 测试 node server 各程序功能 main.js 用来将 hour.json 转成 www/hour.bin 。 server.js 用...

    google-protobuf.jar

    google-protobuf.jar,编译protobuf的jar文件。

Global site tag (gtag.js) - Google Analytics