protobuf支持多大数据_protobuf 支持的数据类型 - CSDN
  • Google protobuf: 优点 二进制消息,性能好/效率高(空间和时间效率都很不错) proto文件生成目标代码,简单易用 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式) 支持向前...

    Google protobuf:
    优点

        二进制消息,性能好/效率高(空间和时间效率都很不错)
        proto文件生成目标代码,简单易用
        序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
        支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
        支持多种语言(可以把proto文件看做IDL文件)
        Netty等一些框架集成

    缺点

        官方只支持C++,JAVA和Python语言绑定
        二进制可读性差(貌似提供了Text_Fromat功能)
        二进制不具有自描述特性
        默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
        只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)

    Apache Thrift:
    应用

        Facebook的开源的日志收集系统(scribe: https://github.com/facebook/scribe)
        淘宝的实时数据传输平台(TimeTunnel http://code.taobao.org/p/TimeTunnel/wiki/index)
        Evernote开放接口(https://github.com/evernote/evernote-thrift)
        Quora(http://www.quora.com/Apache-Thrift)
        HBase( http://abloz.com/hbase/book.html#thrift )
        …

    优点

        支持非常多的语言绑定
        thrift文件生成目标代码,简单易用
        消息定义文件支持注释
        数据结构与传输表现的分离,支持多种消息格式
        包含完整的客户端/服务端堆栈,可快速实现RPC
        支持同步和异步通信

    缺点

        和protobuf一样不支持动态特性

    Apache Avro:
    应用

        Hadoop RPC (http://hadoop.apache.org/#What+Is+Apache+Hadoop%3F

    优点

        二进制消息,性能好/效率高
        使用JSON描述模式
        模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)
        RPC调用在握手阶段交换模式定义
        包含完整的客户端/服务端堆栈,可快速实现RPC
        支持同步和异步通信
        支持动态消息
        模式定义允许定义数据的排序(序列化时会遵循这个顺序)
        提供了基于Jetty内核的服务基于Netty的服务

    缺点

        只支持Avro自己的序列化格式
        语言绑定不如Thrift丰富

    展开全文
  • 大数据美文

    2018-11-21 02:20:58
    大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用...

    大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。

    大数据,首先你要能存的下大数据。
    传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoo上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。p Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器

    存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。这就是MapReduce / Tez / Spark的功能。MapReduce是第一代计算引擎,Tez和Spark是第二代。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。

    那什么是Map什么是Reduce?
    考虑如果你要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。你启动了一个MapReduce程序。Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Reducer都如上处理,你就得到了整个文件的词频结果。

    这看似是个很简单的模型,但很多算法都可以用这个模型描述了。
    Map+Reduce的简单模型很黄很暴力,虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让Map和Reduce之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。

    有了MapReduce,Tez和Spark之后,程序员发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。Pig是接近脚本方式去描述MapReduce,Hive则用的是SQL。它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。

    有了Hive之后,人们发现SQL对比Java有巨大的优势。一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapReduce写起来大约要几十上百行。而更重要的是,非计算机背景的用户终于感受到了爱:我也会写SQL!于是数据分析人员终于从乞求工程师帮忙的窘境解脱出来,工程师也从写奇怪的一次性的处理程序中解脱出来。大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至很多公司的流水线作业集完全是用SQL描述,因为易写易改,一看就懂,容易维护。

    自从数据分析人员开始用Hive分析数据之后,它们发现,Hive在MapReduce上跑,真鸡巴慢!流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但是数据分析,人们总是希望能跑更快一些。比如我希望看过去一个小时内多少人在充气娃娃页面驻足,分别停留了多久,对于一个巨型网站海量数据下,这个处理过程也许要花几十分钟甚至很多小时。而这个分析也许只是你万里长征的第一步,你还要看多少人浏览了跳蛋多少人看了拉赫曼尼诺夫的CD,以便跟老板汇报,我们的用户是猥琐男闷骚女更多还是文艺青年/少女更多。你无法忍受等待的折磨,只能跟帅帅的工程师蝈蝈说,快,快,再快一点!
    于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。三个系统的核心理念是,MapReduce引擎太慢,因为它太通用,太强壮,太保守,我们SQL需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证(因为系统出错了大不了重新启动任务,如果整个处理时间更短的话,比如几分钟之内)。这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。如果说MapReduce是大砍刀,砍啥都不怕,那上面三个就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。

    这些系统,说实话,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。它们的设计理念是,MapReduce慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。而且用户不需要维护两套系统。这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。

    上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。

    那如果我要更高速的处理呢?
    如果我是一个类似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。流计算的思路是,如果要达到更实时的更新,我何不在数据流进来的时候就处理了?比如还是词频统计的例子,我的数据流是一个一个的词,我就让他们一边流过我就一边开始统计了。流计算很牛逼,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。

    还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。所以KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。比如我用身份证号,能取到你的身份数据。这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。这让大数据公司的一些专门操作被大大优化了。比如我网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,我就会考虑用KV Store来存。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是丫就是快。极快。
    每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。必有一款适合你。

    除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。

    有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

    你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。

    展开全文
  • protobuf简介 protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得。虽然是二进制数据格式,但并没有因此变得复杂,开发...

    protobuf简介

    protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。

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

    更多信息可参考官方文档

    例子介绍

    下载protobuf-2.3.0.zip源代码库,下载后解压,选择vsprojects目录下的protobuf.sln解决方案打开,编译整个方案顺利成功。其中有一些测试工程,库相关的工程是libprotobuf、libprotobuf-lite、libprotoc和protoc。其中protoc是命令行工具。在example目录下有一个地址薄消息的例子,业务消息的定义文件后缀为.proto,其中的addressbook.proto内容为:

    package tutorial;
    option java_package = "com.example.tutorial";
    option java_outer_classname = "AddressBookProtos";
    message Person {
      required string name = 1;
      required int32 id = 2;        // Unique ID number for this person.
      optional string email = 3;
      enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
      }
      message PhoneNumber {
        required string number = 1;
        optional PhoneType type = 2 [default = HOME];
      }
      repeated PhoneNumber phone = 4;
    }
    // Our address book file is just one of these.
    message AddressBook {
      repeated Person person = 1;
    }
    
    
    

    该定义文件,定义了地址薄消息的结构,顶层消息为AddressBook,其中包含多个Person消息,Person消息中又包含多个PhoneNumber消息。里面还定义了一个PhoneType的枚举类型。

    类型前面有required表示必须,optional表示可选,repeated表示重复,这些定义都是一目了然的,无须多说。关于消息定义的详细语法可参考官方文档。

    现在用命令行工具来生成业务消息类,切换到protoc.exe所在的debug目录,在命令行敲入:

    protoc.exe --proto_path=../../examples --cpp_out=../../examples ../../examples/addressbook.proto

    该命令中--proto_path参数表示.proto消息定义文件路径,--cpp_out表示输出c++类的路径,后面接着是addressbook.proto消息定义文件。该命令会读取addressbook.proto文件并生成对应的c++类头文件和实现文件。执行完后在examples目录生存了addressbook.pb.h和addressbook.pb.cpp。

    现在新建两个空控制台工程,第一个不妨叫AddPerson,然后把examples目录下的add_person.cc、addressbook.pb.h和addressbook.pb.cpp加入到该工程,另一个工程不妨叫ListPerson,将examples目录下的list_people.cc、addressbook.pb.h和addressbook.pb.cpp加入到该工程,在两个工程的项目属性中附加头文件路径../src。两个工程的项目依赖都选择libprotobuf工程(库)。

    给AddPerson工程添加一个命令行参数比如叫addressbook.dat用于将地址薄信息序列化写入该文件,然后编译运行AddPerson工程,根据提示输入地址薄信息:

    image

    输入完成后,将序列化到addressbook.dat文件中。

    在ListPerson工程的命令行参数中加读取文件参数../AddPerson/addressbook.dat,然后在运行ListPerson工程,可在 list_people.cc的最后设个断点,避免命令行窗口运行完后关闭看不到结果:

    image

    写入地址薄的操作,关键操作就是调用address_book.SerializeToOstream进行序列化到文件流。

    而读取操作中就是address_book.ParseFromIstream从文件流反序列化,这都是框架自动生成的类中的方法。

    其他操作都是业务消息的字段set/get之类的对象级操作,很明了。更详细的API参考官方文档有详细说明。

    在TCP网络编程中的考虑

    从上面的例子可以看出protobuf这样的库是很方便高效的,那么自然的想到在网络编程中用来做业务消息的序列化、反序列化支持。在基于UDP协议的网络应用中,由于UDP本身是有边界,那么用protobuf来处理业务消息就很方便。但在TCP应用中,由于TCP协议没有消息边界,这就需要有一种机制来确定业务消息边界。在TCP网络编程中这是必须面对的问题。

    注意上面的address_book.ParseFromIstream调用,如果流参数的内容多一个字节或者少一个字节,该方法都会返回失败(虽然某些字段可能正确得到结果了),也就是说送给反序列化的数据参数除了格式正确还必须有正确的大小。因此在tcp网络编程中,要反序列化业务消息,就要先知道业务数据的大小。而且在实际应用中可能在一个发送操作中,发送多个业务消息,而且每个业务消息的大小、类型都不一样。而且可能发送很大的数据流,比如文件。

    显然消息边界的确认问题和protobuf库无关,还得自己搞定。在官方文档中也提到,protobuf并不太适合来作大数据的处理,当业务消息超过1M时,就应该考虑是否应该用另外的替代方案。当然对于大数据,你也可以分割为多个小块用protobuf做小块消息封装进行传递。但对很多应用这样的作法显得比较多余,比如发送一个大的文件,一般是在接收方从协议栈收到多少数据就写多少数据到磁盘,这是一种边接收边处理的流模式,这种模式基本上和每次收到的数据量没有关系。这种模式下再采用分割成小消息进行反序列化就显得多此一举了。

    由于每个业务消息的大小和处理方式都可能不一样,那么就需要独立抽象出一个边界消息来区分不同的业务消息,而且这个边界消息的格式和大小必须固定。对于网络编程熟手,可能早已经想到了这样的消息,我们可以结合protobuf库来定义一个边界消息,不妨叫BoundMsg:

    message BoundMsg
    
    {
    
      required int32 msg_type = 1;
    
      required int32 msg_size = 2;
    
    }

    可以根据需要扩充一些字段,但最基本的这两个字段就够用了。我们只需要知道业务消息的类型和大小即可。这个消息大小是固定的8字节,专门用来确定数据流的边界。有了这样的边界消息,在接收端处理任何业务消息就很灵活方便了,下面是接收端处理的简单伪代码示例:

    if(net_read(buf,8))
    
    {
    
      boundMsg.ParseFromIstream(buf);
    
      switch(boundMsg.msg_type)
    
      {
    
        case BO_1:
    
          if(net_read(bo1Buf,boundMsg.msg_size))
    
          {
    
            bo1.ParseFromIstream(bo1Buf);
    
            ....
    
          }
    
         break;
    
        case BO_2:
    
          if(net_read(bo2Buf,boundMsg.msg_size))
    
          {
    
            bo2.ParseFromIstream(bo2Buf);
    
            ....
    
          }
    
         break;
    
         
    
        case FILE_DATA:
    
          count = 0;
    
          while(count < boundMsg.msg_size)
    
          {
    
            piece_size = net_read(fileBuf,1024);
    
            write_file(filename,fileBuf,piece_size);
    
            count = count + piece_size;
    
          }
    
          break;
    
      }
    
    }

    注意上面如果FILE_DATA消息后,还紧接其他业务消息的话,需要小心,即count累计出的值可能大于

    boundMsg.msg_size的值,那么多出来的实际上应该是下一个边界消息数据了。为了避免处理的复杂性,上面所有的循环网络读取操作(上面BO_1,BO_2都可能需要循环读取,为了简化没有写成循环)的缓冲区位置和大小参数应该动态调整,即每次读取时传递的都是还期望读取的数据大小,对于文件的话,可能特殊点,因为边读取边写入,就没有必要事先要分配一个文件大小的缓冲区来存放数据了。对于文件分配一个小缓冲区来读,注意确认下边界即可。

    上面是我的一点考虑,不妥之处还请大家讨论交流。想想借助于ACE、MINA这样的网络编程框架,然后结合protobuf这样的序列化框架,网络编程中技术基础设施层面的东西就给我们解决得差不多了,我们可以真正只关注于业务的实现。

    展开全文
  • JSON: 1、JSON是纯文本。 2、JSON具有良好的自我描述性,便于阅读。...即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单 扩展性、...
    • JSON:

     1、JSON是纯文本。
     2、JSON具有良好的自我描述性,便于阅读。

    优点

    1 简单易用开发成本低
    2 跨语言
    3 轻量级数据交换
    4 非冗长性(对比xml标签简单括号闭环)

    缺点

    1 体积大,影响高并发
    2 无版本检查,自己做兼容
    3 片段的创建和验证过程比一般的XML复杂
    4 缺乏命名空间导致信息混合

    总结:最简单最通用的应用协议,使用广泛,开发效率高,性能相对较低,维护成本较高。

    如果对性能要求不高,传输数据少,优先选择这个,现在大部分使用的是这个;

    • protobuf:

      Protobuf是一种以有效并可扩展的格式编码结构化数据的方式。

    • 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
    • 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
    • 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序

     比较强大,如果是大数据,建议使用 protobuf 性比较好,并支持数据流;

    缺点:不便于阅读,库相对较大,移动端可以使用 protobuf-lite;

     

    1 二进制格式,可读性差(抓包dump后的数据很难看懂)
    2 对象冗余,字段很多,生成的类较大,占用空间。
    3 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)

    总结:简单快速上手,高效兼容性强,维护成本较高;不便于阅读,库相对较大,移动端可以使用 protobuf-lite;

    • flatbuf

    FlatBuffers是Google专门为游戏开发而创建的跨平台序列化库

    1. 对序列化数据的访问不需要打包和拆包——它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输,而没有任何解析开销;
    2. 内存效率和速度——访问数据时的唯一内存需求就是缓冲区,不需要额外的内存分配;
    3. 扩展性、灵活性——它支持的可选字段意味着不仅能获得很好的前向/后向兼容性(对于长生命周期的游戏来说尤其重要,因为不需要每个新版本都更新所有数据);
    4. 最小代码依赖——仅仅需要自动生成的少量代码和一个单一的头文件依赖,很容易集成到现有系统中。
    5. 强类型设计——尽可能使错误出现在编译期,而不是等到运行期才手动检查和修正;
    6. 使用简单——生成的C++代码提供了简单的访问和构造接口;而且如果需要,通过一个可选功能可以用来在运行时高效解析Schema和类JSON格式的文本;
    7. 跨平台——支持C++11、Java,而不需要任何依赖库;在最新的gcc、clang、vs2010等编译器上工作良好。

    编码性能对比 (S)

    Person个数 Protobuf JSON FlatBuffers
    10 6.000 8.952 12.464
    50 26.847 45.782 56.752
    100 50.602 73.688 108.426

    编码性能Protobuf相对于JSON有较大幅度的提高,而FlatBuffers则有较大幅度的降低。

    解码性能对比 (S)

    Person个数 Protobuf JSON FlatBuffers
    10 0.255 10.766 0.014
    50 0.245 51.134 0.014
    100 0.323 101.070 0.006

    解码性能方面,Protobuf相对于JSON,有着惊人的提升。Protobuf的解码时间几乎不随着数据长度的增长而有太大的增长,而JSON则随着数据长度的增加,解码所需要的时间也越来越长。而FlatBuffers则由于无需解码,在性能方面相对于前两者更有着非常大的提升。


     移动端,可以使用flatbuffers,相对protobuffer  要好一些。

    • MessagePack

    It's like JSON.but fast and small.

    msgpack不是软件,是一个标准,可以先把它看成二进制的json,“二进制json”容易让人联想到一个更流行一点的标准:BSON。如果你不知道bson是啥可以去查一下,总之msgpack和bson是同类型的竞争产品,但是msgpack无论从速度还是体积上都秒杀bson,至少在网络传输上是这样的。

    MessagePack 在移动端表现并不是太好,可能优势在PC。

    展开全文
  • Android下使用Protobuf进行序列化 近期在做一柬埔寨的小项目,上线后在运行过程中,总是有用户反映应用在网络请求时,速度较慢,影响用户体验。对该问题结合使用环境及代码进行分析,发现存在以下问题: ...
  • protobuf的特点

    2016-07-22 11:42:17
    protobuf的特点在网络之间传递可读性强的数据,有xml,还有json。相比之下,json比xml要好。但是他们有个弊端,传递的数据是可读的,也就是没有加密,使用网络抓包工具立马可以抓到。一条消息数据,用protobuf序列化...
  • 大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是PB或EB级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并发处理、高可用处理、集群...
  • Protobuf 和 Thrift对比

    2019-05-19 00:47:16
    Protobuf 和 Thrift 简介 google protobuf Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smal...
  • Google 官方提供了 Protobuf 的编码规范,通过遵循这些规范,可以使 Protobuf 消息定义及其相应的类保持一致并易于阅读。 Protobuf 编码规范可能随着时间推移而发生变化,对于既有项目,应当保持编码规范的一致性,...
  • 大数据技术与实践总结大数据概述大数据的定义大数据的4V特征HDFS 大数据概述 大数据的定义 大数据一词由英文“big data”翻译而来,是最近几年兴起的概念,目前还没有一个统一的定义。相比于过去的“信息爆炸”概念...
  • Protobuf初探

    2019-12-30 14:40:57
    Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准 ,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化(将 数据结构或对象 转换成 二进制串 的过程 )。...
  • 作者:Xiaoyu Ma ... 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。 你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,...
  • protobuf简介

    2020-04-22 10:29:01
    文章目录一、protobuf的定义二、protobuf的优缺点1、优点2、缺点三、protobuf的使用流程1、protobuf在Linux下的安装过程2、定义proto文件3、protoc编译器4、调用接口进行序列化、反序列化四、protobuf的应用场景五、...
  • 时下引领着技术变革的非“大数据”莫属,本课程带你从0基础开始上手,让你全面掌握Hadoop开发的核心技能:Linux、Hadoop、Zookeeper、Hive、Sqoop、Flume、Oozie、HBase、Kafka的搭建及框架的应用,了解最火爆最前沿...
  • 经过这么多年的发展,已经从大数据1.0的BI/Datawarehouse时代,经过大数据2.0的Web/APP过渡,进入到了IOT的大数据3.0时代,而随之而来的是数据架构的变化。 ▌Lambda架构 在过去Lambda数据架构成为每一个公司...
  • Protobuf 和 Thrift 简介

    2018-06-22 20:54:57
    google protobuf Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how ...
  • 现在微服务普遍流行,在对外连接上, Netty+Protobuf 通讯性能要优于 Http+Json方式,适合大数据高并发, 长连接异步通讯场景, 本教程主要讲解Spring Boot + Netty集成, 以及Netty+WebSocket+Protobuf的通讯配置。...
  • 当前正处在大数据时代背景下,大数据技术目前也正处在落地应用的初期,未来大数据的发展空间还是比较大的,所以学习大数据相关技术是个不错的选择。 大数据编程语言的选择要根据具体的工作岗位来进行,目前大数据...
  • 漫谈大数据

    2019-12-03 11:38:48
    但是相信还是有很小伙伴会问到底什么是大数据又或者处理到大才算大数据。如果你没有接触过大数据,那么你就不知道大数据究竟有大,大到什么样的数据才能称之为大数据。那么,根据数据收集的端口,企业端与个人...
  • 大数据技术与实践

    2019-12-03 17:42:48
    大数据概述   大数据产生背景: 1.数据量大,数据种类。 2.海量数据的高存储成本,大数据两下数据处理性能不足,流式数据处理缺失。 3.优先的扩展能力,单一数据源。 4.数据资产对外增值。 大数据定义    ...
1 2 3 4 5 ... 20
收藏数 3,593
精华内容 1,437
关键字:

protobuf支持多大数据