一种基于Avro的结构化数据序列化传输方法及装置制造方法及图纸

技术编号:26342243 阅读:21 留言:0更新日期:2020-11-13 20:31
本发明专利技术公开了一种基于Avro的结构化数据序列化传输方法及装置,所述方法包括:步骤S1,利用数据导出模块从源端数据库获取所要导出数据表的表结构和表数据,根据该表结构动态构建Avro的Schema并创建Avro编码器,利用所述Avro编码器序列化所述表数据,得到序列化结果数据块;步骤S2,所述数据导出模块通过网络将所述序列化结果数据块传递到数据装载模块;步骤S3,所述数据装载模块利用Avro解码器反序列化所接收的序列化数据快,得到原始的数据表数据,并将其装载至备端数据库。

【技术实现步骤摘要】
一种基于Avro的结构化数据序列化传输方法及装置
本专利技术涉及计算机容灾备份
,特别是涉及一种基于Avro的结构化数据序列化传输方法及装置。
技术介绍
序列化是将数据对象状态转换为可存储或传输的格式的过程,与序列化相反的是饭序列化,它将流转换为数据对象,这两个过程结合起来,可以轻松地存储和传输数据。目前,数据导出程序将从源端数据库导出的数据按照一定格式序列化,再将序列化结果传递到数据装载程序,装载程序将收到的数据块反序列化,得到原始数据并装载到备端数据库,是数据库备份的主要流程。数据序列化和反序列化是否高效,序列化后的数据体积是否足够小,直接影响着数据库备份的性能。传统的数据序列化方法主要有JSON和XML,其中XML因为序列化效率不高,并且有冗长的描述性字段在追求高性能的场合已经被弃用,JSON采用键值对的方式保存数据,跟XML比较在数据的冗余度、以及序列化的速度上都有了长足的进步,是现在主流的数据序列化方法。但是,JSON在处理数据表的数据时有着很多缺点:一、JSON采用键值对的方式保存数据,这样在数据表的数据有很多行的时候,会保存很多重复的数据列名;二、JSON不能直接保存二进制数据,如果需要在JSON中保存二进制数据,通常需要将其先Base64编码以后再转成16进制可打印字符,这就需要额外的序列化时间,也使序列化结果数据的体积变得更大;三、JSON的序列化和反序列化性能也不够出色。目前,另外一种流行的序列和反序列化方法是Google的protobuf。它是一种二进制的消息流,具有跨平台、解析速度快、序列化数据体积小、扩展性高等特点。但是,protobuf的二进制消息流不具有自描述特性,这导致它序列化的数据不能被装载程序很方便的反序列化,使用protobuf序列化、反序列化数据需要提前为数据库的每一张表定制一个proto结构描述文件并部署到源备两端,由于数据库备份的时候通常会备份很多数据表,而每个数据表的结构一般不能提前预知,这导致提前部署proto文件很麻烦,使用protobuf就受到很大限制。
技术实现思路
为克服上述现有技术存在的不足,本专利技术之目的在于提供一种基于Avro的结构化数据序列化传输方法及装置,以实现序列化速度快、序列化结果体积小、序列化结果自描述的目的。为达上述目的,本专利技术提出一种基于Avro的结构化数据序列化传输方法,包括:步骤S1,利用数据导出模块从源端数据库获取所要导出数据表的表结构和表数据,根据该表结构动态构建Avro的Schema并创建Avro编码器,利用所述Avro编码器序列化所述表数据,得到序列化结果数据块;步骤S2,所述数据导出模块通过网络将所述序列化结果数据块传递到数据装载模块;步骤S3,所述数据装载模块利用Avro解码器反序列化所接收的序列化数据快,得到原始的数据表数据,并将其装载至备端数据库。优选地,步骤S1进一步包括:步骤S100,从源端数据库获取所要导出的数据表的表结构;步骤S101,根据获得的数据表的表结构动态构建一个Avro的Schema;步骤S102,根据动态构建的Schema创建Avro编码器;步骤S103,所述数据导出模块从源端数据库读取表数据,利用所述Avro编码器将所述数据表数据处理成序列化结果数据块。优选地,于步骤S2中,于创建Avro编码器同时,在字节缓冲区中创建一个带Schema的Avro数据头。优选地,于步骤S103中,所述数据导出模块从源端数据库读取表数据,按行插入Avro编码器,所述Avro编码器以流的方式将序列化的数据写入字节缓冲区,当该数据表的所有行都读取完成或者读取超过了一定行数,关闭所述Avro编码器,得到内嵌所述Schema的序列化结果数据块。优选地,于步骤S103中,Avro序列化后的数据按行存放。优选地,于步骤S103中,所述Avro编码器对不同Avro类型写入数据块的处理如下:对于BOOLEAN、INT、LONG、FLOAT、DOUBLE的Avro类型,在所述序列化结果数据块中将直接存放,占用固定的数据类型长度;对于STRING、BYTES的变长的Avro类型,在所述序列化结果数据块中先存放字节流或者二进制流的长度,再放置原始的字节流或者二进制流;对于Avro的逻辑类型,将它们转换成BYTES类型处置,以节约存储空间;对于允许NULL值的UNION类型,先存放一个UNION的INDEX值,再按照实际的类型存储。优选地,于步骤S1中,获取的表结构包括但不限于表名和列名以及每一列的具体数据类型以及是否允许出现NULL值等信息。优选地,于步骤S101中,以所述数据表的表名作为所述Schema的名称,所述数据表的每一列对应所述Schema内的一个Field,列名为Field的名称,并在数据列的类型和SchemaField的类型之间建立映射关系。优选地,所述数据导出模块与所述数据装载模块通过JDBC接口从源端数据库读取、向备端数据库装载数据。为达到上述目的,本专利技术还提供一种基于Avro的结构化数据序列化传输装置,包括:数据导出模块,用于从源端数据库获取所要导出数据表的表结构和表数据,根据该表结构动态构建Avro的模式Schema并创建Avro编码器,利用所述Avro编码器序列化所述表数据,得到序列化结果数据块,并将得到的序列化结果数据块通过网络传递至数据装载模块;数据装载模块,用于利用Avro解码器反序列化所接收的序列化数据快,得到原始的数据表的数据,并将其装载至备端数据库。与现有技术相比,本专利技术具有如下有益效果:1、本专利技术中,每一个数据块只在数据头的Schema信息里保存了数据列的名称信息,这在数据表有很多行数据的情况下,不需要像JSON一样保存很多份冗余的数据列名称信息。2、本专利技术中,二进制数据是直接保存的,省去了转换的时间开销,也使序列化的结果体积更小。3、本专利技术中,每张数据表序列化的Schema都是根据表结构动态生成的,具有使用简单的优点。附图说明图1为本专利技术一种基于Avro的结构化数据序列化传输方法的步骤流程图;图2为本专利技术具体实施例中动态生成的Schema示例图;图3为本专利技术具体实施例中序列化得到的数据块格式示意图;图4为本专利技术一种基于Avro的结构化数据序列化传输装置的系统架构图;图5为本专利技术实施例中基于Avro的结构化数据序列化传输装置的示意图。具体实施方式以下通过特定的具体实例并结合附图说明本专利技术的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本专利技术的其它优点与功效。本专利技术亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本专利技术的精神下进行各种修饰与变更。图1为本专利技术一种基于Avro的结构化数据序列化传输方法的步骤流程图。如图1所示,本专利技术一本文档来自技高网
...

【技术保护点】
1.一种基于Avro的结构化数据序列化传输方法,包括:/n步骤S1,利用数据导出模块从源端数据库获取所要导出数据表的表结构和表数据,根据所述表结构动态构建Avro的Schema并创建Avro编码器,利用所述Avro编码器序列化所述表数据,得到序列化结果数据块;/n步骤S2,所述数据导出模块通过网络将所述序列化结果数据块传递到数据装载模块;/n步骤S3,所述数据装载模块利用Avro解码器反序列化所接收的序列化数据快,得到原始的数据表数据,并将其装载至备端数据库。/n

【技术特征摘要】
1.一种基于Avro的结构化数据序列化传输方法,包括:
步骤S1,利用数据导出模块从源端数据库获取所要导出数据表的表结构和表数据,根据所述表结构动态构建Avro的Schema并创建Avro编码器,利用所述Avro编码器序列化所述表数据,得到序列化结果数据块;
步骤S2,所述数据导出模块通过网络将所述序列化结果数据块传递到数据装载模块;
步骤S3,所述数据装载模块利用Avro解码器反序列化所接收的序列化数据快,得到原始的数据表数据,并将其装载至备端数据库。


2.如权利要求1所述的一种基于Avro的结构化数据序列化传输方法,其特征在于,步骤S1进一步包括:
步骤S100,从源端数据库获取所要导出的数据表的表结构;
步骤S101,根据获得的数据表的表结构动态构建一个Avro的Schema;
步骤S102,根据动态构建的Schema创建Avro编码器;
步骤S103,所述数据导出模块从源端数据库读取表数据,利用所述Avro编码器将所述数据表数据处理成序列化结果数据块。


3.如权利要求2所述的一种基于Avro的结构化数据序列化传输方法,其特征在于:于步骤S2中,于创建Avro编码器同时,在字节缓冲区中创建一个带Schema的Avro数据头。


4.如权利要求3所述的一种基于Avro的结构化数据序列化传输方法,其特征在于:于步骤S103中,所述数据导出模块从源端数据库读取表数据,按行插入Avro编码器,所述Avro编码器以流的方式将序列化的数据写入字节缓冲区,当该数据表的所有行都读取完成或者读取超过了一定行数,关闭所述Avro编码器,得到内嵌所述Schema的序列化结果数据块。


5.如权利要求4所述的一种基于Avro的结构化数据序列化传输方法,其特征在于:于步骤S103中,Avro序列化后的数据按行存放。


6.如权利要求5所述的一种基于Avro的结构化数据序列化传输方法...

【专利技术属性】
技术研发人员:李剑陈勇铨杜晋瑞杨彬
申请(专利权)人:上海英方软件股份有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1