一种数据传输方法及装置与流程

文档序号:11830267阅读:173来源:国知局
一种数据传输方法及装置与流程
本发明属于数据库
技术领域
,尤其涉及异构数据系统之间数据传输方法及装置。
背景技术
:在当前大数据时代,越来越多的企业与公司逐渐意识到对大数据的获取、分析、挖掘可以为后期商务决策、市场预估、公司发展等提供极具价值的参考模型。大数据能够发挥的价值基于数据量之大、数据入口之大、数据采集规模之大,能提供充分的数据依据为企业发展服务。然而大数据需要解决的首要问题在于将大量用户、系统生成的数据进行大集中,只有数据大集中才能产生大数据。如图1所示,各类在线业务系统(用户中心、商品中心、交易中心)下生成的海量数据存放在各类异构数据系统之中,数据同步需要将各类数据源生成的数据进行传输、同步、汇总到统一的大数据存储/计算体系之中(例如Hadoop、或者阿里集团的ODPS)。因此数据同步将直接面临各类数据类型不一、存取接口不一、事务模型不一、流量控制模型不一,等各类问题。同时,随着对接的数据存储日益增长,数据同步将面临几何级的数据传输通道增加,给后期数据同步能力扩展造成了巨大的开发、运维、技术支持成本。对于一个复杂的数据同步网络,如图2所示,在网络中存在很多不同的数据源时,如同时存在Hadoop、Mysql、Oracle、Sqlserver、ODPS等数据源,将这些数据源进行数据同步比较困难。Sqoop是Hadoop开源社区提供的基于HadoopMapReduce运行框架,将Hadoop和RDBMS间数据同步的工具,Sqoop在解决异构数据传输过程中,仅仅面对Hadoop/HDFS和RDBMS两类存储系统的交互,使用了最简单的CSV文本作为传输交换协议。以Mysql传输数据到HDFS为例:用户使用SqoopClient启动Sqoop,Sqoop在Hadoop上启动MapReduce的Job,该Job实际运行的是Sqoop的数据传输任务。Sqoop在MapReduce的Map阶段启动数据通道,将Mysql数据进行抽取同时转为CSV格式作为中间格式。Sqoop将上述CSV格式数据直接写入Hadoop/HDFS文件系统中。然而该方法仅仅支持Hadoop和RDBMS间数据同步,存在如下的技术问题:a.数据传输易失真:以开源社区的Sqoop为例,数据全部使用CSV文本格式进行保存,存在将其他非String类型转为String类型的过程,该过程容易导致数据转换失真。b.部分类型无法支持:以开源社区的Sqoop为例,由于文本化的CSV格式决定了不能转换为String格式的数据必定是无法支持的,导致同步产品功能存在缺陷,例如二进制数据无法通过该方式进行数据传输。c.数据类型丢失:一旦其他类型转为String,类型完全丢失,对于类型存在强要求的传输领域无法适配,例如数据同步用户要求源端为整形数据,到目标端一定全部为整形数据,否则失败。但由于类型丢失,该需求无法完成。d.数据类型转换行为未定义,使用各个数据源的转换方式,没有统一的转换行为定义,导致数据同步对接不同数据系统使用不同的转换方式,转换行为随数据系统变化而变化,甚至随数据系统特定版本变化而变化,导致数据系统升级易导致数据同步数据变化诱发数据质量问题。技术实现要素:本发明的目的就是提供一种数据传输方法及装置,解决现有技术仅支持特定的数据系统间的数据传输,并且存在数据失真、数据类型丢失等技术问题。为了实现上述目的,本发明技术方案如下:一种数据传输方法,用于在源数据系统与目的数据系统间传输数据,其特征在于,所述数据传输方法包括步骤:从源数据系统读取数据的当前字段,根据当前字段的数据类型、以及 预设的抽象数据类型与源数据系统的数据类型的对应关系,将当前字段映射到预设的抽象数据类型;读取已经映射为抽象数据类型的当前字段,根据预设的抽象数据类型与目的数据系统数据类型的对应关系,将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型。其中,所述预设的抽象数据类型包括Long、Double、String、Date、Bool和Bytes,对应不同的源数据系统和目的数据系统,分别预设有抽象数据类型与源数据系统的数据类型的映射关系表、抽象数据类型与目的数据系统的数据类型的映射关系表;进一步地,所述根据当前字段的数据类型、以及预设的抽象数据类型与源数据系统的数据类型的对应关系,将当前字段映射到预设的抽象数据类型,包括步骤:判断当前字段的数据类型,查找抽象数据类型与源数据系统的数据类型的映射关系表,找到直接对应的抽象数据类型;将当前字段的数据类型映射到所找到的直接对应的抽象数据类型;同理,所述根据预设的抽象数据类型与目的数据系统数据类型的对应关系,将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型,包括步骤:根据当前字段的抽象数据类型,查找抽象数据类型与目的数据系统的数据类型的映射关系表,找到直接对应的目的数据系统的数据类型;将当前字段的抽象数据类型映射到直接对应的目的数据系统的数据类型。本发明所述Long支持无限长度,所述Double支持无限精度,所述String支持无限字符长度。进一步地,所述数据传输方法,还包括步骤:当读取的抽象数据类型当前字段的数据类型在目的数据系统中没有可以直接映射的对应数据类型时,将当前字段对应的抽象数据类型转换为与目的数据系统数据类型有直接映射关系的抽象数据类型。通过本步骤可以有效降低抽象数据类型与源数据系统和目的数据系 统数据类型之间映射关系表的复杂度。进一步地,所述将当前字段对应的抽象数据类型转换为与目的数据系统数据类型有直接映射关系的抽象数据类型,具体转换规则包括:1)、Long转换为Date,将Long数值视作Unix时间戳转换为Date,精度为毫秒;2)、Long转换为Bool,0视为false,否则为true;3)、String转换为Long,整数型字符串支持转换为Long,否则报错,不支持科学计数法字符串;4)、String转换为Double,浮点型字符串支持转换为Long,否则报错,不支持科学计数法;5)、String转换为Date,根据自定义时间格式满足用户时间格式时转换,否则报错;6)、String转换为Bool,“true”转为true,”false”转为false,其他报错;7)、Date转为Long,将Date转为Unix时间戳;8)、Date转换为String,根据自定义时间格式转换为字符串;9)、Bool转换为Long,true转为1,false转为0;10)、Bytes转换为String,根据用户指定的字符集编码转为String。本发明还提出了一种数据传输装置,用于在源数据系统与目的数据系统间传输数据,所述数据传输装置包括:读模块,用于从源数据系统读取数据的当前字段,根据当前字段的数据类型、以及预设的抽象数据类型与源数据系统的数据类型的对应关系,将当前字段映射到预设的抽象数据类型;写模块,用于读取已经映射为抽象数据类型的当前字段,根据预设的抽象数据类型与目的数据系统数据类型的对应关系,将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型。进一步地,所述数据传输装置还设置有配置模块,用于预设抽象数据类型,所述预设的抽象数据类型包括Long、Double、String、Date、Bool和Bytes,对应不同的源数据系统和目的数据系统,分别预设有抽象数据类型与源数据系统的数据类型的映射关系表、抽象数据类型与目的数据系 统的数据类型的映射关系表;则,所述读模块在将当前字段映射到预设的抽象数据类型时,执行如下操作:判断当前字段的数据类型,查找抽象数据类型与源数据系统的数据类型的映射关系表,找到直接对应的抽象数据类型;将当前字段的数据类型映射到所找到的直接对应的抽象数据类型;同理,所述写模块在将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型,执行如下操作:根据当前字段的抽象数据类型,查找抽象数据类型与目的数据系统的数据类型的映射关系表,找到直接对应的目的数据系统的数据类型;将当前字段的抽象数据类型映射到直接对应的目的数据系统的数据类型。进一步地,所述写模块还用于在读取的抽象数据类型当前字段的数据类型在目的数据系统中没有可以直接映射的对应数据类型时,将当前字段对应的抽象数据类型转换为与目的数据系统数据类型有直接映射关系的抽象数据类型。本发明提出的数据传输方法及装置,通过设定统一的抽象数据类型,完成任意异构数据系统之间数据的传输,同时不存在数据转换失真现象;采用了最大精度/长度保存中间数据,避免数据精度丢失情况;支持二进制类型数据传输,其他更多类型也可以通过扩展抽象数据类型来支持,即使出现新开发的数据库也能同样很好的支持;并且由于使用抽象数据类型来进行传输,避免数据类型丢失情况。附图说明图1为大数据存储/计算系统数据传输示意图;图2为复杂的数据传输网络示意图;图3为本发明数据系统之间数据传输方法流程图;图4为本发明不同数据系统间数据传输示意图;图5为本发明数据传输装置结构示意图。具体实施方式下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。如图3所示,本发明实施例一种数据传输方法包括如下步骤:步骤S1、从源数据系统读取数据的当前字段,根据当前字段的数据类型、以及预设的抽象数据类型与源数据系统的数据类型的对应关系,将当前字段映射到预设的抽象数据类型。本实施例预设了能适配绝大部分主流数据类型的抽象数据类型,具体如表1所示:抽象数据类型备注说明Long(整形类型)无限长度,支持所有定点数,包括Int、Short、Long、BigIntegerDouble(浮点类型)无限精度,支持所有浮点数,包括Float、Double、BigDecimalString(字符串类型)无限字符长度,支持字符串类型,使用通用字符集(Unicode)Date(时间类型)支持时间类型,包括日期、时间、日期时间类型Bool(布尔类型)支持布尔值Bytes(字节类型)支持二进制,例如存放诸如MP3等非结构化数据表1如表1所示,本实施例预设的抽象数据类型覆盖范围广,能够对接绝大部分数据系统支持的主流数据类型,从而能够将不同数据系统的数据类型映射到预设的抽象数据类型上,或从预设的抽象数据类型转换为目的数据系统需要的数据类型。以Mysql为例,具有如表2所示的列表,详细设置了Mysql各种数据类型与本实施例抽象数据类型的映射关系:抽象数据类型Mysql插件对应类型Longint,tinyint,smallint,mediumint,int,bigintDoublefloat,double,decimalStringvarchar,char,tinytext,text,mediumtext,longtext,yearDatedate,datetime,timestamp,timeBoolbit,boolBytestinyblob,mediumblob,blob,longblob,varbinary表2对于从Mysql抽取数据的逻辑,该逻辑的过程如下:读取源数据系统的当前字段,判断该字段的数据类型,如果是int、tinyint、smallint、mediumint、int、bigint等数据类型,就转换为抽象数据类型Long,如果是float、double、decimal等数据类型,就转换为抽象数据类型Double,其他根据表2以此类推。容易理解的是,对于Hadoop、Oracle、Sqlserver、ODPS等数据系统,同样设置有如表2类似的列表,便于根据设置的列表完成源数据系统与本实施例抽象数据类型的转换,或完成本实施例抽象数据类型与目的数据系统数据类型的转换。在本实施例中不一一列举其他数据系统数据类型与本实施例抽象数据类型的对应关系。进一步地,表1也只预设了目前绝大多数主流数据系统数据类型与本实施例抽象数据类型的映射关系,本
技术领域
人员应该知道,对于未列出的映射关系,可以在实际的应用中进行扩展设置。例如其他更多类型可以通过扩展抽象数据类型来支持,即使出现新开发的数据库也能同样很好的支持,例如为支持一种新数据系统新定义的JSON字段类型,同样扩展抽象数据类型的种类,即可实现JSON类型对接。步骤S2、读取已经映射为抽象数据类型的当前字段,根据预设的抽象数据类型与目的数据系统数据类型的对应关系,将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型。从源数据系统读取的当前字段映射为本实施例统一的抽象数据类型后,可以直接存储在内存之中,便于进行读取并转换为目的数据系统对应的数据类型,也可以存储在专门的存储设备中,本发明并不限于具体的实现形式。而将当前字段写入到目的数据系统中时,抽象数据类型与目的数据系统的数据类型对应关系同样如表1所示,如果目的数据系统是Mysql,则 采用表2的对应关系进行转换,表2是表1的一种具体实施例。容易理解的是,所有对接的数据系统的数据抽取、写入均使用表1的数据模型进行传递数据,将不同的数据源支持的不同数据类型统一抽象到同一套数据模型中,保证所有的数据系统使用同一套协议进行通信,使得任意异构数据存储均可以实现互联互通。图4示出了几个不同数据系统间按照本发明数据传输方法进行传输的示意图。通过上述步骤就实现了抽取数据到写入数据的数据传输阶段全部使用抽象数据类型进行传输。同时为避免类似CSV格式数据类型传输过程丢失情况,本实施例抽象数据类型采用了强数据类型(数据类型之间建立对应关系),而非类似CSV的弱数据类型,不会导致数据失真。而现有技术对于数据传输处理各个数据类型的转换交由各个数据系统自行处理,以Sqoop为例,Sqoop将数据全部使用文本化的CSV格式,这样在数据传输到目的数据系统过程将文本化的数据转换到目的数据格式依靠目的数据系统自行转换,转换过程不统一且不可靠。由于现有技术中存在非常多种类的数据系统,各公司的数据系统数据类型不一,有些源数据系统的数据类型在目的数据系统中没有同类的数据类型。例如:源数据系统Mysql中的Date,在目的数据系统如阿里巴巴的OTS中就没有同类的数据类型,但是OTS中有bigint,用户需要用bigint来与Mysql中的Date数据类型对应。为了解决上述问题,本实施例采用先将Mysql中的Date映射为抽象数据类型的Date,然后将抽象数据类型Date的数据转换为抽象数据类型Long,而抽象数据类型Long与bigint存在直接的映射关系,这样就很方便地将抽象数据类型Long映射到目的数据系统OTS中的bigint。这样做的好处是,在设定目的数据系统数据类型与抽象数据类型的映射关系时,只需要设定Long与bigint的映射关系,而不要设置Date与bigint的映射关系。否则每一种抽象数据类型都对应非常复杂的其他数据系统的数据类型,将导致数据类型间的映射关系混乱,表2的内容将非常复杂。因此,本实施例的数据传输方法还包括步骤:当读取的抽象数据类型当前字段的抽象数据类型在目的数据系统中 没有可以直接映射的对应数据类型时,将当前字段对应的抽象数据类型转换为与目的数据系统数据类型有直接映射关系的抽象数据类型。即将抽象数据类型Date向转换为抽象数据类型Long,由于抽象数据类型Long与目的数据系统的bigint有直接映射关系,从而在写入目的数据系统时,可以从抽象数据类型Long映射到bigint。本实施例针对不同抽象数据类型之间的相互转换,内置不同的规则,避免跨类型数据转换行为未定义。表3示出了一种典型的抽象数据类型之间的转换关系:表3其中,Y表示自动类型转换或同类型转换,N表示不能跨类型转换,数字代表有条件类型转换:[1]Long转换为Date,将Long数值视作Unix时间戳转换为Date,精度为毫秒。[2]Long转换为Bool,0视为false,否则为true。[3]String转换为Long,整数型字符串支持转换为Long,否则报错。不支持科学计数法字符串。[4]String转换为Double,浮点型字符串支持转换为Long,否则报错。不支持科学计数法。[5]String转换为Date,用户自定义时间格式(例如YYYY-MM-DD),满足用户时间格式可以转换,否则报错。[6]String转换为Bool,“true”转为true,”false”转为false,其他报错。[7]Date转为Long,将Date转为Unix时间戳。[8]Date转换为String,根据用户自定义时间格式(例如YYYY-MM-DD)转换为字符串。[9]Bool转换为Long,true转为1,false转为0。[10]Bytes转换为String,根据用户指定的字符集编码转为String。从而无论源数据系统、目的数据系统是何种数据库,都能根据该数据库中字段的数据类型进行相应的映射,转换为统一的数据类型体系。由于数据没有发生跨类型数据转换,不存在数据转换失真现象;同时统一的数据类型体系采用了最大精度/长度保存中间数据,避免数据精度丢失情况;本实施例预设的抽象数据类型还支持二进制类型数据传输。并且由于使用抽象数据类型来进行传输,例如整形数据同样使用整形数据类型进行传输,避免数据类型丢失情况。本实施例还提出了基于上述传输方法的装置,如图5所示,包括:读模块,用于从源数据系统读取数据的当前字段,根据当前字段的数据类型、以及预设的抽象数据类型与源数据系统的数据类型的对应关系,将当前字段映射到预设的抽象数据类型;写模块,用于读取已经映射为抽象数据类型的当前字段,根据预设的抽象数据类型与目的数据系统数据类型的对应关系,将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型。本实施例中,对应不同的源数据系统和目的数据系统,分别预设有抽象数据类型与源数据系统的数据类型的映射关系表、抽象数据类型与目的数据系统的数据类型的映射关系表。映射关系表可以预先设置好,直接存储在读模块和写模块中,也可以另外设置专门的配置模块,用于预设抽象数据类型及映射关系表并存储映射关系表。专门设置配置模块便于进行扩展,根据具体的数据系统进行调整,实现起来更加灵活。本实施例读模块在将当前字段映射到预设的抽象数据类型时,执行如下操作:判断当前字段的数据类型,查找抽象数据类型与源数据系统的数据类型的映射关系表,找到直接对应的抽象数据类型;将当前字段的数据类型映射到所找到的直接对应的抽象数据类型;同理,写模块在将已经映射为抽象数据类型的当前字段映射到目的数据系统对应的数据类型,执行如下操作:根据当前字段的抽象数据类型,查找抽象数据类型与目的数据系统的数据类型的映射关系表,找到直接对应的目的数据系统的数据类型;将当前字段的抽象数据类型映射到直接对应的目的数据系统的数据类型。进一步地,写模块还用于在读取的抽象数据类型当前字段的数据类型在目的数据系统中没有可以直接映射的对应数据类型时,将当前字段对应的抽象数据类型转换为与目的数据系统数据类型有直接映射关系的抽象数据类型。以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1