protobuf优缺点 protobuf好处
2025-04-02 00:43 - 立有生活网
mapreduce是否可以不依赖hadoop
功能丰富、学习成本高使用hadoop时,我们有时会自写一些mapreduce的应用,我们可能会用到一些第三方的包。如果不做任何处理,在job执行的就会报ClassNotFound的Exception.
protobuf优缺点 protobuf好处
protobuf优缺点 protobuf好处
同时能够设计好的高并发程序架构(leader-follow/-worker等);了解大部分C/C++后端开发中的问题(内存管理、日 志打印、高并发、前后端通信协议、服务),知道各个后端服务RPC通信问题(struct//thirft/protobuf等)。
在项目中使用Protobuf协议实现数据传输(二)
作用 :防止不同 .proto 项目间命名 发生冲突上篇已经简单的分析了什么是ProtoBuf协议的优缺点、简单的环境配置、项目中的简单使用和一些编写.Proto文件的注意点,下面我们更加深入一下ProtoBuf的语法及高级使用(非常感谢Carson_Ho大神的博文指导)
ProtoBuf包的解析过程如下 :
作用 :影响 特定环境下 的处理方式,但不改变整个文件声明的含义
常用Option选项 :(因为使用有限,简单列举常见的)
作用 :真正用于描述 数据结构
组成 :字段 = 字段修饰符 + 字段类型 +字段名 +标识号(主要针对proto2以前版本)
一个消息对象 可以将 其他消息对象类型 用作字段类型
关于ProtoBuf在项目中的实践的高级用法请关注:下一篇博客:在项目中使用Protobuf协议实现数据升级时版本兼容性传输(三)
ja序列化Protostuff和Serializable的区别
Google放出来了Protocol buffers,一种用来部分替代xml的数据描述语言。Google就是Google,就算是推白菜出来,也一样能让人侧目。其实protocol buffers也不是什么新鲜的概念,且不说传统的ASN.1, ICE这些有点类似的东西,facebook一年前就推出了thrift,应该说定位是非常的接近的。也有谣传说是先有了protocol buffers在google内部流行,然后google的人跳槽到facebook,就出了thrift这个东西……呵呵,停止八卦,言归正传。 观察法看到的优缺点 Thrift: 支持的语言更广泛一些c++, ja, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真够的) protobuf 目前还是只支持c++, ja, python, 其他语言有待开发. Thrift提供的功能更丰富一些: Thrift提供了简单的RPC构架(其实不简单了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。Ja自带序列化机制ja.io.Serializable
1,序列化的类型和反序列化的类型的序列化ID必须一致(远程信息交换时)。
2,静态数据不会被序列化,Transient关键字修饰的字段不会被序列化。
3,对象序列化存储时,两次存储相同值对象会有优化(第二次对象写入会只存储引用)。
Protostuff是一个序列化库,支持一下序列化格式:
protostuff (native)
graph (protostuff with support for cyclic references. See Serializing Object Graphs)
json
ile (binary json useable from the protostuff-json module)
kvp (binary uwsgi header)
在.proto消息模型中主要有 消息对象&字段序列化
Class
LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);//使用LinkedBuffer分配一块默认大小的buffer空间;
try {
Schema
return ProtostuffIOUtil.toByteArray(obj, schema, buffer);//使用给定的schema将对象序列化为一个byte数组,并返回。
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
buffer.clear();
}}
反序列化
public static
try {
T message = objenesis.newInstance(cls);//使用objenesis实例化一个类的对象;
Schema
return message;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}}
优缺点比较:
优点 缺点
Serializable 使用方便,可序列化所有类 速度慢,占空间
Protostuff 速度快,基于protobuf 需静态编译
thrift和google protobuffer各有什么优劣
doubleGoogle就是Google,就算是推白菜出来,也一样能让人侧目。其实protocol buffers也不是什么新鲜的概念,且不说传统的ASN.1, ICE这些有点类似的东西,facebook一年前就推出了thrift,应该说定位是非常的接近的。也有谣传说是先有了protocol buffers在google内部流行,然后google的人跳槽到facebook,就出了thrift这个东西……呵呵,停止八卦,言归正传。 观察法看到的优缺点 Thrift: 支持的语言更广泛一些c++, ja, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真够的) protobuf 目前还是只支持c++, ja, python, 其他语言有待开发. Thrift提供的功能更丰富一些: Thrift提供了简单的RPC构架(其实不简单了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。 Thrift支持多种协议格式. Thrift的代码实现,有专门的TProtocol和TTransport抽象,相互配合,可以实现多种协议,方便集成各种传输方式。至少目前Thrift就能使用json作为序列化协议。 protobuf好像只安心一种协议,并下决心把这个格式做好。输入输出也是标准的stream. 认真的说也不完全这样,protobuf为了调试方便,也提供了Text_Fromat功能,这个也算一个nonbinary格式支持,这样看来完全新协议还是有可能的。 Thrift还提供了不少语言的C module(性能啊,都是性能啊) protobuf全部pure language实现, 反正现在已经都5到10倍速度了,不在乎了….. thrift目前不支持Windows平台,至少c++语言的runtime library和generated code是不不能在windows平台上使用的。(这真有点让人难以接受啊,现代科技这么发达,还有怪兽boost,支持windows有这么难吗?) protobuf没有这个问题,提供了visual studio的项目文件,可以很顺利的在windows平台下编译。(题外话: 如果不知道googletest怎么在windows平台上使用,可以参考protobuf的测试用例)。 The Thrift C++ runtime library does not currently work on Windows. This means that you’ll be able to compile ThriftIDL files to C++/Ja/Python/etc., but you won’t be able to compile and run the generated C++ code under Windows. thrift wiki protobuf侧重点是语言表达,同时在存储效率上也下了不少功夫。用protobuf来直@SuppressWarnings("unchecked")接读写数据结构相当的方便。 thrift侧重点是构建夸语言的可伸缩的服务,特点就是支持的语言多,同时提供了完整的rpc serv framework,可以很方便的直接构建服务,不需要做太多其他的工作。 数据类型相对固定的情况下,不论是thrift还是protobuf都会比直接处理xml要方便很多。不管是dom还是类sax,总没有直接出数据结构访问来的方便啊
thrift和google protobuffer各有什么优劣
xmpublic static在项目中使用Protobuf协议实现数据传输(二)
6. C/C++上篇已经简单的分析了什么是ProtoBuf协议的优缺点、简单的环境配置、项目中的简单使用和一些编写.Proto文件的注意点,下面我们更加深入一下ProtoBuf的语法及高级使用(非常感谢Carson_Ho大神的博文指导)
序列化就是将Ja Object转成byte[];反序列化就是将byte[]转成Ja Object。ProtoBuf包的解析过程如下 :
作用 :影响 特定环境下 的处理方式,但不改变整个文件声明的含义
常用Option选项 :(因为使用有限,简单列举常见的)
作用 :真正用于描述 数据结构
组成 :字段 = 字段修饰符 + 字段类型 +字段名 +标识号(主要针对proto2以前版本)
一个消息对象 可以将 其他消息对象类型 用作字段类型
关于ProtoBuf在项目中的实践的高级用法请关注:下一篇博客:在项目中使用Protobuf协议实现数据传输(三)
ja序列化Protostuff和Serializable的区别
字段 = 字段类型 +字段名 +标识号(主要针对proto3及以后版本)Ja自带序列化机制ja.io.Serializable
1,序列化的类型和反序列化的类型的序列化ID必须一致(远程信息交换时)。
2,静态数据不会被序列化,Transient关键字修饰的字段不会被序列化。
3,对象序列化存储时,两次存储相同值对象会有优化(第二次对象写入会只存储引用)。
Protostuff是一个序列化库,支持一下序列化格式:
protostuff (native)
graph (protostuff with support for cyclic references. See Serializing Object Graphs)
json
ile (binary json useable from the protostuff-json module)
kvp (binary uwsgi header)
序列化
Class
LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);//使用LinkedBuffer分配一块默认大小的buffer空间;
try {
Schema
return ProtostuffIOUtil.toByteArray(obj, schema, buffer);//使用给定的schema将对象序列化为一个byte数组,并返回。
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
buffer.clear();
}}
反序列化
public static
try {
T message = objenesis.newInstance(cls);//使用objenesis实例化一个类的对象;
Schema
return message;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}}
优缺点比较:
优点 缺点
Serializable在shell脚本方面,已经能够编写比较复杂的shell脚本(超过500行)来协助完成很多包括备份、自动化处理、等工作的 shell; 使用方便,可序列化所有类 速度慢,占空间
Protostuff 速度快,基于protobuf 需静态编译
thrift和google protobuffer各有什么优劣
序列化在配置方面,了解一些比较偏门的配置选项(php auto_prepend_file/auto_append_file),包括扩展中的一些复杂高级配置和原理。(1500W次)时间(ms):15k的php需要掌握什么技术
1. Linux
在Linux下面除了常规的作和性能跟踪,还能够使用很多高级复杂的命令完成工作(watch/tcpdump/starce /ldd/ar等);
对Linux内部机制有一些了解, 对内核模块加载,启动错误处理等等有个基本的处理;同时对一些其他相关的东西也了解,比如NFS、磁盘管理等等。
2. Nginx
可以考虑侧重在关于Nginx工作原理部分的深入学习,主要表现在阅读源码开始,比如具体的/worker工作机制,Nginx内部 的处理,内存管理等等;
同时可以学习Nginx扩展的开发,可以定制一些自己私有的扩展;同时可以对Nginx+Lua有一定程度的了解,看看是否可 以结thrift合应用出更好模式。
3. MySQL/MongoDB
在MySQL应用方面,除了之前的基本SQL优化,还能够在完成一些复杂作,比如大批量数据的导入导出,线上大批量数据的更改表 结构或者增删索引字段等等高危作;
除了安装配置,已经能够处理更多复杂的MySQL的问题,比如各种问题的追查,主从同步延迟问题的解决、跨机房同步数 据方案、MySQL高可用架构等都有涉及了解;
对MySQL应用层面,对MySQL的核心关键技术比较熟悉,比如事务机制(隔离级别、锁等)、对触发器、 分区等技术有一定了解和应用。
4. Redis/Memcached
因为Memcached不是特别复杂,建议可以把源码进行阅读,特别是内存管理部分,方便深入理解;
Redis部分,可以多做一些复杂的数据结构的应用(zset来做排行榜排序作/事务处理用来保证原子性在秒杀类场景应用之类的使用作);多涉及 aof等同步机制的学习应用,设计一个高可用的Redis应用架构和集群。
5. PHP
从基本代码应用上面来说,能够解决在PHP开发中遇到95%的问题,了解大部分 PHP的技巧;对大部分的PHP框架能够迅速在一天内上手使用,并且了解各个主流PHP框架的优缺点,能够迅速方便项目开发中做技术选型;
对php的工作机制比较了解,包括php-fpm工作机制(比如php-fpm在不同配置机器下面开启进程数量计算以及原理),对zend引} finally {擎有基本熟悉 (vm/gc/stream处理),阅读过基本的PHP内核源码(或者阅读过相关文章),对PHP内部机制的大部分核心数据结构(基础类型/Array /Object)实现有了解,对于核心基础结构(zval/hashtable/gc)有深入学习了解。
能够在C/C++语言方面有更深入的学习了解,能够完成中小型C/C++系统的开发工作;除了基本第二阶段的基础C/C++语法和数据结构,也能够学习一些特殊数据结构(b-tree/rb-tree/skiplist/l-tree/trie-tree等)方便在特殊工作中需 求;
在系统编程方面,熟悉多进程、多线程编程;多进程情况下面了解大部分多进程之间的通信方式,能够灵活选择通信方式(共享内存/信号量/管道等);
多线程编程能够良好的解决锁冲突问题,并且能够进行多线程程序的开发调试工作;同时对网络编程比较熟悉,了解多进程模型/多线程模型/异步网络IO模型的别和选型,熟悉不同异步网络IO模型的原理和异(select/poll/epoll/iocp等),并且熟悉常见的异步框架(ACE/ICE /libev/libnt/libuv/Boost.ASIO等)和使用,如果闲暇也可以看看一些国产自己开发的库(比如muduo);
7. 前端
深入了解HTTP协议(包括各个细致协议特殊协议代码和背后原因,比如302静态文件缓存了,502是nginx后面php挂了之类的);除了之前的前端方面的各种框架应用整合能力。
教程:PHP教程
thrift的map和list怎么转成proto
47C++/Ja/Python7天津养殖设备微滤机优缺点 微滤机厂家

设施农业是什么? 杀菌消毒设备 农业基础设施建设一般包括:农田水利建设,农产品流通重点设施建设,商品粮棉生产基地、用材林生产基础和防护林建设,农业高压泵:提供反渗透所需压力,为···
小兔子怎么养殖管理方法 小兔子要怎么养?

兔子刚生小兔子怎么养? 三、适当进行活动 刚出生的小兔子和母兔应该分笼进行喂养,以避免意外发生。仔兔刚出生因为身上没有毛,因此要注意保暖,用来装仔兔的箱子里面可以放些棉布和毛巾···
清江鱼养殖合作社 清江鱼加工厂在哪里?

鮰鱼与清江鱼的区别 鮰鱼肉质细嫩、骨刺少,内含丰富的脂肪和蛋白质。清江鱼肉质新嫩、鱼鳔厚,可加工成鱼肚。 2、科属上,鮰鱼学名长吻鮠,俗称"江团"、"白吉"、"肥头鱼"、"鮠鱼"。在分类学···