CN110673856B - 一种数据处理方法、装置及机器可读存储介质 - Google Patents
一种数据处理方法、装置及机器可读存储介质 Download PDFInfo
- Publication number
- CN110673856B CN110673856B CN201910944240.XA CN201910944240A CN110673856B CN 110673856 B CN110673856 B CN 110673856B CN 201910944240 A CN201910944240 A CN 201910944240A CN 110673856 B CN110673856 B CN 110673856B
- Authority
- CN
- China
- Prior art keywords
- protobuf
- data
- description file
- target
- format
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据处理方法、装置及机器可读存储介质,所述方法包括:接收针对目标格式的Protobuf数据的反序列化任务;基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。应用本发明实施例可以提升反序列化的效率和灵活性,降低反序列化的复杂度。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种数据处理方法、装置及机器可读存储介质。
背景技术
Protocol Buffers(简称Protobuf)是一种语言无关、平台无关、可扩展的序列化结构数据的方法,可用于(数据)通信协议、数据存储等,具有高效安全、跨平台、跨语言等特点。
为了减少数据存储或传输的资源消耗,并提高数据安全性,通常以Protobuf格式对业务数据进行存储或对外提供,但是Protobuf格式的数据(简称Protobuf数据)是二进制形式的,不具备良好的可读性,在使用前需要反序列化,即将二进制形式的Protobuf数据,反序列化为JSON(一种轻量级的数据交换格式)格式,并存入数据库或数据仓库,或,根据需求对JSON格式的文件进行解析获取字段的值后,存入数据库或数据仓库。
目前,对Protobuf数据进行反序列化主要通过Protobuf编译器对Protobuf文件进行编译,生成对应的Protobuf Java类文件,并基于该Protobuf Java类文件自带的反序列化方法实现反序列化。
然而实践发现,上述反序列化实现方案中,自带反序列化方式与Protobuf Java类文件耦合在一起,不同格式的Protobuf数据,需要不同的Protobuf Java类文件。由于Protobuf Java类文件需要编译后才能使用,当需要使项目支持新的格式的Protobuf数据的反序列化时,需要先将项目下线,通过编译新格式的Protobuf文件,生成对应的ProtobufJava类文件,将该Protobuf Java类文件加入项目,对项目源代码进行重新编码、编译后将项目重新上线,实现项目对新的格式的Protobuf数据的反序列化支持。因此,上述反序列化实现方案,对于需要反序列化的Protobuf数据的格式存在新增或修改的应用场景,无法灵活应对,从而导致程序僵化。
发明内容
本发明提供一种数据处理方法、装置及机器可读存储介质,以解决现有反序列化实现方案程序僵化的问题。
根据本发明的第一方面,提供一种数据处理方法,包括:
接收针对目标格式的Protobuf数据的反序列化任务;
基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;
基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。
根据本发明的第二方面,提供一种数据处理装置,包括:
接收单元,用于接收针对目标格式的Protobuf数据的反序列化任务;
存储单元,用于存储Protobuf数据与Protobuf描述文件的映射关系;
获取单元,用于基于所述存储单元存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;
处理单元,用于基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。
根据本发明的第三方面,提供一种机器可读存储介质,所述计算机可读存储介质内存储有机器可执行指令,所述机器可执行指令被处理器执行时上述数据处理方法。
应用本发明公开的技术方案,当接收到针对目标格式的Protobuf数据的反序列化任务时,基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件,进而,基于目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化,通过基于Protobuf描述文件对Protobuf数据进行反序列化,将Protobuf数据的格式与反序列化程序解耦合,无需对项目的源代码进行重新编码,就可以反序列化新的格式的Protobuf数据,提升了反序列化的效率和灵活性,降低了反序列化的复杂度。
附图说明
图1是本发明实施例提供的一种数据处理方法的流程示意图;
图2是本发明实施例提供的一种数据处理方法的流程示意图;
图3是本发明实施例提供的一种数据处理装置的结构示意图;
图4是本发明实施例提供的另一种数据处理装置的结构示意图;
图5是本发明实施例提供的另一种数据处理装置的结构示意图;
图6是本发明实施例提供的一种数据处理装置的硬件结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,下面先对本发明实施例涉及的部分技术术语进行简单说明。
序列化:将存在于内存中的数据结构(或对象)转为二进制数据的过程。
反序列化:将序列化的二进制数据转为数据结构(或对象)的过程。
Protocol Buffers(简称Protobuf):一种语言无关、平台无关、可扩展的序列化结构数据的方法,可用于(数据)通信协议、数据存储等。
Protobuf文件(可以简称为.proto文件):根据Protobuf语法规范,自定义的消息类型文件,包含了待序列化的消息结构及字段等。
Protobuf类Java文件:使用Protobuf编译器编译protobuf文件生成的Java类文件。该Java类文件包含了对数据对象及数据对象的字段操作的方法,可以序列化/反序列化数据对象,也可以直接对数据对象字段进行赋值或取值等。
Protobuf描述文件(可以简称为.desc文件):使用Protobuf编译器编译Protobuf文件生成的描述文件,描述了Protobuf文件定义的数据结构。Protobuf文件对应的描述文件、该Protobuf文件,以及该Protobuf文件对应的Protobuf Java类文件占用的存储空间依次递增。
Kafka:一种分布式的消息系统。
为了使本领域技术人员更好地理解现有反序列化实现方案的缺陷,下面结合具体实例对现有反序列化实现方案进行简单说明。
假设业务数据(本文中也可以Protobuf数据)按照自定义的.proto1格式进行序列化后对外提供,则可以通过编译.proto1格式的Protobuf文件生成对应的Protobuf Java类文件,并将该Protobuf Java类文件加入到项目中,使用该Protobuf Java类文件自带的反序列化方法,实现对.proto1格式的Protobuf数据进行反序列化。
当存在新的格式的Protobuf数据需要反序列化,如.proto2格式的Protobuf数据,则需要先对项目进行下线,然后通过编译.proto2格式的Protobuf文件生成对应的Protobuf Java类文件,并将该Protobuf Java类文件加入到项目中,重新编码、编译后将项目重新上线,实现对.proto2格式的Protobuf数据进行反序列化。
为了使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
请参见图1,为本发明实施例提供的一种数据处理方法的流程示意图,其中,该数据处理方法可以应用后端服务器,如运行有ETL(Extract,transform,load,萃取、转置、加载)工具的服务器(本文中称为数据处理服务器),如图1所示,该数据处理方法可以包括以下步骤:
步骤101、接收针对目标格式的Protobuf数据的反序列化任务。
本发明实施例中,目标格式并不特指某一固定格式,而是可以指代任一通过本发明实施例提供的方案进行反序列化的Protobuf数据的格式。
步骤102、基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件。
本发明实施例中,可以基于Protobuf数据的反序列化需求,生成一种或多种格式的Protobuf数据对应的Protobuf描述文件,并存储Protobuf数据与Protobuf描述文件的映射关系。
相应地,当接收到针对目标格式的Protobuf数据的反序列化任务时,可以根据目标格式的Protobuf数据,查询所存储的Protobuf数据与Protobuf描述文件的映射关系,以获取目标格式的Protobuf数据对应的Protobuf描述文件(本文中称为目标Protobuf描述文件)。
步骤103、基于目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化。
本发明实施例中,获取到目标Protobuf描述文件时,可以基于该目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化。
由于Protobuf Java类文件属于编程语言,机器无法直接识别,在使用前需要编译后才能被机器识别,因此,若使用Protobuf Java类文件对Protobuf数据进行反序列化,则当项目需要对新的格式的Protobuf数据的反序列化进行支持时,需要先对项目进行下线,然后对项目源代码进行修改(重新编码),并对修改后的源代码重新编译后,将项目重新上线。
而Protobuf描述文件在使用时不需要重新编译,因此,当需要对新的格式的Portobuf数据的反序列化进行支持时,可以对该新的格式的Protobuf数据与对应的Protobuf描述文件进行存储,而不需要重新对项目源代码进行重新编码和编译,也不需要对项目进行下线和重新上线,提升了反序列化实现对Protobuf数据格式变化的适应性。
此外,由于Protobuf文件对应的Protobuf描述文件占用的存储空间小于该Protobuf文件对应的Protobuf Java类文件占用的存储空间,因此,基于Protobuf描述文件进行Protobuf数据的反序列化,可以减少存储空间的占用
可见,在图1所示方法流程中,通过存储Protobuf数据与对应的Protobuf描述文件的映射关系,当需要对目标格式的Protobuf数据进行反序列化时,可以基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件,并基于该目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化,将Protobuf数据的格式与反序列化程序解耦合,无需对项目的源代码进行重新编码,就可以反序列化新的格式的Protobuf数据,提升了反序列化的效率和灵活性,降低了反序列化的复杂度。
可选地,在本发明其中一个实施例中,上述基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件之前,还可以包括:
获取预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系;其中,该预设格式的Protobuf数据为存在反序列化需求的Protobuf数据的格式;
存储预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系。
在该实施例中,可以根据Protobuf数据的反序列化需求,确定需要进行反序列化的Protobuf数据的格式(本文中称为预设格式),并获取预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系,进而,可以存储该预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系。
在一个示例中,上述获取预设格式Protobuf数据与对应的Protobuf描述文件的映射关系,可以包括:
对于任一预设格式的Protobuf数据,对该预设格式的Protobuf数据对应的Protobuf文件进行编译,生成对应的Protobuf描述文件;
存储该预设格式的Protobuf数据与该Protobuf描述文件的映射关系。
在该示例中,对于任一预设格式的Protobuf数据,可以自定义该预设格式的Protobuf数据对应的Protobuf文件,并通过对该Protobuf文件进行编译,生成该预设格式的Protobuf数据对应的Protobuf描述文件,进而,可以存储该预设格式的Protobuf数据与该Protobuf数据对应的Protobuf描述文件的映射关系。
需要说明的是,在本发明实施例中,Protobuf数据对应的Protobuf描述文件也可以直接由Protobuf数据的提供方提供,而不需要另外生成,即Protobuf数据的提供方可以提供Protobuf数据以及Protobuf数据对应的Protobuf描述文件,数据处理服务器接收到该Protobuf数据以及Protobuf数据对应的Protobuf描述文件时,可以存储该Protobuf数据与Protobuf描述文件的映射关系,而不需要生成Protobuf描述文件。
在一个示例中,上述存储该预设格式的Protobuf数据与该Protobuf描述文件的映射关系,可以包括:
将该预设格式的Protobuf数据存储到Kafka中;其中,不同格式的Protobuf数据对应不同的topic(主题);
基于该预设格式的Protobuf数据对应的topic、该预设格式的Protobuf数据对应的Protobuf文件的全路径名,以及该预设格式的Protobuf数据对应的Protobuf描述文件,生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系;
存储该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系。
在该示例中,以使用Kafka存储Protobuf数据为例。对于任一预设格式的Protobuf数据,可以将该Protobuf数据存储到Kafka中,并基于存储该预设格式的Protobuf数据对应的topic、该预设格式的Protobuf数据对应的Protobuf文件的全路径名,以及该预设格式的Protobuf数据对应的Protobuf描述文件,生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系,进而,可以存储该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系。
优选地,为了减少Protobuf描述文件存储占用的存储空间,在生成预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系进行存储之前,可以对该预设格式的Protobuf数据对应的Protobuf描述文件进行压缩,进而,可以生成该预设格式的Protobuf数据对应的topic、全路径名以及压缩后的Protobuf描述文件三者的映射关系。
可选地,在本发明其中一个实施例中,上述基于目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化,可以包括:
基于目标Protobuf描述文件,获取目标格式的Protobuf数据的Builder实例;
基于该Builder实例对目标格式的Protobuf数据进行反序列化。
在该实施例中,获取到目标格式的Protobuf数据对应的目标Protobuf描述文件时,可以基于该目标Protobuf描述文件,获取目标格式的Protobuf数据的Builder实例,进而,可以基于该Builder实例对目标格式的Protobuf数据进行反序列化。
在一个示例中,Protobuf数据与Protobuf描述文件的映射关系中还包括Protobuf数据对应的Protobuf文件的全路径名;
上述基于目标Protobuf描述文件,获取目标格式的Protobuf数据的Builder实例,可以包括:
基于目标Protobuf描述文件,以及目标格式的Protobuf数据对应的全路径名,获取与该全路径名匹配的目标Descriptor(描述符)实例;
基于目标Descriptor实例,获取目标格式的Protobuf数据的Builder实例。
在该示例中,以Protobuf数据与Protobuf描述文件的映射关系为Protobuf数据、Protobuf数据对应的全路径名以及Protobuf描述文件三者的映射关系为例。
当基于目标Protobuf描述获取到目标格式的Protobuf数据的描述符实例时,可以判断该描述符实例的全路径名与目标格式的Protobuf数据对应的全路径名是否一致,若一致,则基于该描述符实例(本文中称为目标描述符实例),获取目标格式的Protbuf数据的Builder实例。
若获取到的目标格式的Protobuf数据的描述符实例的全路径名与目标格式的Protobuf数据对应的全路径名不一致,则进行错误提示。
为了使本领域技术人员更好地理解本发明实施例提供的技术方案,下面结合具体实例对本发明实施例提供的技术方案进行说明。
在该实施例中,Protobuf数据的反序列化可以主要包括以下两部分流程:
一、配置映射关系
1、当接收到Protobuf数据时,使用Protobuf编译工具,对接收到的Protobuf数据对应的Protobuf文件进行编译,生成该Protobuf数据对应的Protobuf描述文件。
2、缓存该Protobuf数据到Kafka中,一种格式的Protobuf数据对应一个topic。
3、对Protobuf数据对应的Protobuf描述文件进行压缩(如使用base64进行压缩),得到压缩后的Protobuf描述文件(以.desc字符串为例),并将Protobuf数据对应的topic、.desc字符串以及Protobuf数据对应的全路径名三者的映射关系存储至数据库。
二、Protobuf数据反序列化
1、当接收到任一格式(假设为格式A)的Protobuf数据的反序列化任务时,从数据库中读取与格式A的Protobuf数据匹配的Protobuf数据对应topic、.desc字符串以及Protobuf数据对应的全路径名三者的映射关系(假设为映射关系A)。
2、启动Kafka消费者,配置消费的topic(即映射关系A中包括的topic,假设为topic A),并对映射关系A中包括的.desc字符串进行解压缩,以得到格式A的Protobuf数据对应的Protobuf描述文件(假设为Protobuf描述文件A)。
3、根据Protobuf描述文件A确定格式A的Protobuf数据的Builder实例(假设为Builder实例A)。
示例性的,基于Protobuf描述文件A可以得到格式A的Protobuf数据的Descriptor实例,当该Descriptor实例的全路径名与映射关系A中包括的全路径名一致时,可以基于该Descriptor实例创建格式A的Protobuf数据的Builder实例。
若该Descriptor实例的全路径名与映射关系A中包括的全路径名不一致,则确定发生错误,进行错误提示。
4、将Builder实例A传输给Kafka配置的反序列化类,由该反序列化类从Kafka中读取topic A的Protobuf数据,并基于Builder实例A对读取到的Protobuf数据进行反序列化,得到对应的Message(消息)对象。
示例性的,该Message对象包含了格式A的Protobuf数据对应的Protobuf文件定义的格式和数据。
5、解析Message对象。
示例性的,可以通过工具将该Message对象转化为JSON格式的数据,并将该数据写入数据库或数据仓库;或者,使用ETL工具中的JSON组件将转化得到的JSON格式的数据解析为字段后,写入数据库或数据仓库,其具体处理流程图可以如图2所示。
通过以上描述可以看出,在本发明实施例提供的技术方案中,当接收到针对目标格式的Protobuf数据的反序列化任务时,基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件,进而,基于目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化,通过基于Protobuf描述文件对Protobuf数据进行反序列化,将Protobuf数据的格式与反序列化程序解耦合,无需对项目的源代码进行重新编码,就可以反序列化新的格式的Protobuf数据,提升了反序列化的效率和灵活性,降低了反序列化的复杂度。
请参见图3,为本发明实施例提供一种数据处理装置的结构示意图,如图3所示,该数据处理装置可以包括:
接收单元310,用于接收针对目标格式的Protobuf数据的反序列化任务;
存储单元320,用于存储Protobuf数据与Protobuf描述文件的映射关系;
获取单元330,用于基于所述存储单元存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;
处理单元340,用于基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。
在可选实施例中,所述获取单元330,还用于获取预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系;其中,所述预设格式的Protobuf数据为存在反序列化需求的Protobuf数据的格式;
所述存储单元320,还用于存储所述预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系。
请一并参见图4,为本发明实施例提供的另一种数据处理装置的结构示意图,如图4所示,在图3所示数据处理装置的基础上,图4所示数据处理装置还包括:
生成单元350,用于对于任一预设格式的Protobuf数据,对该预设格式的Protobuf数据对应的Protobuf文件进行编译,生成对应的Protobuf描述文件;
所述获取单元330,具体用于获取该预设格式的Protobuf数据与该Protobuf描述文件的映射关系。
在可选实施例中,所述存储单元320,还用于将该预设格式的Protobuf数据存储到Kafka中;其中,不同格式的Protobuf数据对应不同的主题topic;
所述生成单元350,还用于基于该预设格式的Protobuf数据对应的topic、该预设格式的Protobuf数据对应的Protobuf文件的全路径名,以及该预设格式的Protobuf数据对应的Protobuf描述文件,生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系;
所述存储单元320,具体用于存储该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系。
请一并参见图5,为本发明实施例提供的另一种数据处理装置的结构示意图,如图5所示,在图4所示数据处理装置的基础上,图5所示数据处理装置还包括:
压缩单元360,用于对该预设格式Protobuf数据对应的Protobuf描述文件进行压缩;
所述生成单元350,具体用于生成该预设格式的Protobuf数据对应的topic、全路径名以及压缩后的Protobuf描述文件三者的映射关系。
在可选实施例中,所述处理单元340,具体用于基于所述目标Protobuf描述文件,获取所述目标格式的Protobuf数据的创建者Builder实例;
基于所述Builder实例对所述目标格式的Protobuf数据进行反序列化。
在可选实施例中,Protobuf数据与Protobuf描述文件的映射关系中还包括Protobuf数据对应的Protobuf文件的全路径名;
所述处理单元340,具体用于基于所述目标Protobuf描述文件,以及所述目标格式的Protobuf数据对应的全路径名,获取与该全路径名匹配的目标描述符Descriptor实例;
基于所述目标Descriptor实例,获取所述目标格式的Protobuf数据的Builder实例
请参见图6,为本发明实施例提供的一种数据处理装置的硬件结构示意图。该数据处理装置可以包括处理器601、存储有机器可执行指令的机器可读存储介质602。处理器601与机器可读存储介质602可经由系统总线603通信。并且,通过读取并执行机器可读存储介质602中与数据处理逻辑对应的机器可执行指令,处理器601可执行上文描述的数据处理方法。
本文中提到的机器可读存储介质602可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质602可以是RAM(Radom Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
本发明实施例还提供了一种包括机器可执行指令的机器可读存储介质,例如图6中的机器可读存储介质602,所述机器可执行指令可由数据处理装置中的处理器601执行以实现以上描述的数据处理方法。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
由上述实施例可见,当接收到针对目标格式的Protobuf数据的反序列化任务时,基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取目标格式的Protobuf数据对应的目标Protobuf描述文件,进而,基于目标Protobuf描述文件,对目标格式的Protobuf数据进行反序列化,通过基于Protobuf描述文件对Protobuf数据进行反序列化,将Protobuf数据的格式与反序列化程序解耦合,无需对项目的源代码进行重新编码,就可以反序列化新的格式的Protobuf数据,提升了反序列化的效率和灵活性,降低了反序列化的复杂度。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (15)
1.一种数据处理方法,其特征在于,包括:
接收针对目标格式的Protobuf数据的反序列化任务;
基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;Protobuf描述文件在使用时不需要重新编译;
基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。
2.根据权利要求1所述的方法,其特征在于,所述基于所存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件之前,所述方法还包括:
获取预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系;其中,所述预设格式的Protobuf数据为存在反序列化需求的Protobuf数据的格式;
存储所述预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系。
3.根据权利要求2所述的方法,其特征在于,所述获取预设格式Protobuf数据与对应的Protobuf描述文件的映射关系,包括:
对于任一预设格式的Protobuf数据,对该预设格式的Protobuf数据对应的Protobuf文件进行编译,生成对应的Protobuf描述文件;
获取该预设格式的Protobuf数据与该Protobuf描述文件的映射关系。
4.根据权利要求3所述的方法,其特征在于,所述存储该预设格式的Protobuf数据与该Protobuf描述文件的映射关系,包括:
将该预设格式的Protobuf数据存储到Kafka中;其中,不同格式的Protobuf数据对应不同的主题topic;
基于该预设格式的Protobuf数据对应的topic、该预设格式的Protobuf数据对应的Protobuf文件的全路径名,以及该预设格式的Protobuf数据对应的Protobuf描述文件,生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系;
存储该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系。
5.根据权利要求4所述的方法,其特征在于,确定该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系之前,还包括:
对该预设格式Protobuf数据对应的Protobuf描述文件进行压缩;
所述生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系,包括:
生成该预设格式的Protobuf数据对应的topic、全路径名以及压缩后的Protobuf描述文件三者的映射关系。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化,包括:
基于所述目标Protobuf描述文件,获取所述目标格式的Protobuf数据的创建者Builder实例;
基于所述Builder实例对所述目标格式的Protobuf数据进行反序列化。
7.根据权利要求6所述的方法,其特征在于,所述Protobuf数据与Protobuf描述文件的映射关系中还包括Protobuf数据对应的Protobuf文件的全路径名;
所述基于所述目标Protobuf描述文件,获取所述目标格式的Protobuf数据的创建者实例,包括:
基于所述目标Protobuf描述文件,以及所述目标格式的Protobuf数据对应的全路径名,获取与该全路径名匹配的目标描述符Descriptor实例;
基于所述目标Descriptor实例,获取所述目标格式的Protobuf数据的Builder实例。
8.一种数据处理装置,其特征在于,包括:
接收单元,用于接收针对目标格式的Protobuf数据的反序列化任务;
存储单元,用于存储Protobuf数据与Protobuf描述文件的映射关系;Protobuf描述文件在使用时不需要重新编译;
获取单元,用于基于所述存储单元存储的Protobuf数据与Protobuf描述文件的映射关系,获取所述目标格式的Protobuf数据对应的目标Protobuf描述文件;
处理单元,用于基于所述目标Protobuf描述文件,对所述目标格式的Protobuf数据进行反序列化。
9.根据权利要求8所述的装置,其特征在于,
所述获取单元,还用于获取预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系;其中,所述预设格式的Protobuf数据为存在反序列化需求的Protobuf数据的格式;
所述存储单元,还用于存储所述预设格式的Protobuf数据与对应的Protobuf描述文件的映射关系。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
生成单元,用于对于任一预设格式的Protobuf数据,对该预设格式的Protobuf数据对应的Protobuf文件进行编译,生成对应的Protobuf描述文件;
所述获取单元,具体用于获取该预设格式的Protobuf数据与该Protobuf描述文件的映射关系。
11.根据权利要求10所述的装置,其特征在于,
所述存储单元,还用于将该预设格式的Protobuf数据存储到Kafka中;其中,不同格式的Protobuf数据对应不同的主题topic;
所述生成单元,还用于基于该预设格式的Protobuf数据对应的topic、该预设格式的Protobuf数据对应的Protobuf文件的全路径名,以及该预设格式的Protobuf数据对应的Protobuf描述文件,生成该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系;
所述存储单元,具体用于存储该预设格式的Protobuf数据对应的topic、全路径名以及Protobuf描述文件三者的映射关系。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
压缩单元,用于对该预设格式Protobuf数据对应的Protobuf描述文件进行压缩;
所述生成单元,具体用于生成该预设格式的Protobuf数据对应的topic、全路径名以及压缩后的Protobuf描述文件三者的映射关系。
13.根据权利要求8-12任一项所述的装置,其特征在于,
所述处理单元,具体用于基于所述目标Protobuf描述文件,获取所述目标格式的Protobuf数据的创建者Builder实例;
基于所述Builder实例对所述目标格式的Protobuf数据进行反序列化。
14.根据权利要求13所述的装置,其特征在于,Protobuf数据与Protobuf描述文件的映射关系中还包括Protobuf数据对应的Protobuf文件的全路径名;
所述处理单元,具体用于基于所述目标Protobuf描述文件,以及所述目标格式的Protobuf数据对应的全路径名,获取与该全路径名匹配的目标描述符Descriptor实例;
基于所述目标Descriptor实例,获取所述目标格式的Protobuf数据的Builder实例。
15.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有机器可执行指令,所述机器可执行指令被处理器执行时实现权利要求1-7任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910944240.XA CN110673856B (zh) | 2019-09-30 | 2019-09-30 | 一种数据处理方法、装置及机器可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910944240.XA CN110673856B (zh) | 2019-09-30 | 2019-09-30 | 一种数据处理方法、装置及机器可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110673856A CN110673856A (zh) | 2020-01-10 |
CN110673856B true CN110673856B (zh) | 2023-03-28 |
Family
ID=69080535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910944240.XA Active CN110673856B (zh) | 2019-09-30 | 2019-09-30 | 一种数据处理方法、装置及机器可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110673856B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111478898B (zh) * | 2020-04-03 | 2022-03-11 | 爱瑟福信息科技(上海)有限公司 | Someip协议通信数据的序列化和反序列化方法及其系统 |
CN111935065A (zh) * | 2020-05-30 | 2020-11-13 | 中国兵器科学研究院 | 基于多视窗系统的数据通信方法及相关装置 |
CN112270162B (zh) * | 2020-09-25 | 2024-06-21 | 北京达佳互联信息技术有限公司 | 文本转换和报文传输方法、装置、设备、服务器及介质 |
CN113485684B (zh) * | 2021-06-30 | 2024-08-16 | 深圳市观麦网络科技有限公司 | 一种orm实现方法及相关设备 |
CN113742408B (zh) * | 2021-09-03 | 2024-02-02 | 唯品会(广州)软件有限公司 | 基于Protobuf协议动态解析的数据交互方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970737A (zh) * | 2013-01-24 | 2014-08-06 | 腾讯科技(深圳)有限公司 | 一种数据构造方法和装置 |
CN104199879A (zh) * | 2014-08-21 | 2014-12-10 | 广州华多网络科技有限公司 | 一种数据处理方法和数据处理装置 |
CN107861723A (zh) * | 2017-10-25 | 2018-03-30 | 深圳市华成峰科技有限公司 | 海量数据处理方法及其系统 |
CN108876628A (zh) * | 2018-06-28 | 2018-11-23 | 深圳数字动能信息技术有限公司 | 金融量化分析数据传输方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050065953A1 (en) * | 2003-09-19 | 2005-03-24 | Bower Shelley K. | System and method for changing defined elements in a previously compiled program using a description file |
-
2019
- 2019-09-30 CN CN201910944240.XA patent/CN110673856B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970737A (zh) * | 2013-01-24 | 2014-08-06 | 腾讯科技(深圳)有限公司 | 一种数据构造方法和装置 |
CN104199879A (zh) * | 2014-08-21 | 2014-12-10 | 广州华多网络科技有限公司 | 一种数据处理方法和数据处理装置 |
CN107861723A (zh) * | 2017-10-25 | 2018-03-30 | 深圳市华成峰科技有限公司 | 海量数据处理方法及其系统 |
CN108876628A (zh) * | 2018-06-28 | 2018-11-23 | 深圳数字动能信息技术有限公司 | 金融量化分析数据传输方法 |
Non-Patent Citations (2)
Title |
---|
Google Protobuf在Linux Socket通讯中的应用;李纪欣等;《电脑开发与应用》;20130425(第04期);全文 * |
面向Protobuf的Lua数据适配器研究与实现;郑建华等;《信息与电脑(理论版)》;20141115(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110673856A (zh) | 2020-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110673856B (zh) | 一种数据处理方法、装置及机器可读存储介质 | |
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
CN103218294B (zh) | 一种嵌入式系统的调试方法、调试转换装置和系统 | |
CN102298518B (zh) | 从技术未知的管理命令到多个管理协议的转换 | |
CN106850650B (zh) | 用于游戏客户端访问数据的方法及客户端游戏系统 | |
WO2020259417A1 (zh) | 一种区块链的数据解析方法及装置 | |
CN110457013B (zh) | 程序组件配置装置及方法 | |
CN102566984A (zh) | 一种配置参数的方法及装置 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
CN109783138A (zh) | 应用程序包构成的拆分方法、装置、终端及介质 | |
CN113434147B (zh) | 基于ProtoBuf协议的消息解析方法及装置 | |
CN111552464A (zh) | 一种sdk生成方法、装置、设备及介质 | |
CN117130618B (zh) | 智能卡可执行文件的增量编译方法、装置、设备 | |
CN106484375B (zh) | 一种指令块加载方法、软交换设备及系统 | |
CN116225450A (zh) | 文本转换方法和装置,计算设备和可读存储介质 | |
US8108828B2 (en) | System for generating optimized computer data field conversion routines | |
US8464235B2 (en) | Adaptive production of assembler | |
US8645758B2 (en) | Determining page faulting behavior of a memory operation | |
CN112486465B (zh) | 一种代码更新方法及装置 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN114579135B (zh) | 一种安装包生成方法及装置 | |
CN117435257B (zh) | 系统加载方法及装置、存储介质、计算机程序产品和芯片 | |
CN117289913A (zh) | 编译器源文件处理方法、电子设备和介质 | |
CN118041976A (zh) | 一种实现WebService服务动态生成REST服务的方法及装置 | |
CN115878282A (zh) | 跨平台交互方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |