(12)发明专利申请
(10)申请公布号 CN 105335412 A
(43)申请公布日 2016.02.17
(21)申请号 201410375147.9(22)申请日 2014.07.31
(71)申请人阿里巴巴集团控股有限公司
地址英属开曼群岛大开曼资本大厦一座四
层847号邮箱(72)发明人史策
(74)专利代理机构北京市清华源律师事务所
11441
代理人沈泳 李赞坚(51)Int.Cl.
G06F 17/30(2006.01)
权利要求书3页 说明书15页 附图2页
(54)发明名称
用于数据转换、数据迁移的方法和装置(57)摘要
本申请公开了一种用于数据转换的方法和装置、以及一种用于数据迁移的方法和装置。其中所述用于数据转换的方法包括:从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则,所述数据转换规则,用于指定根据待转换数据生成目标数据所需执行的转换操作;解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。采用本申请提供的方法,实现了数据转换代码的复用,有效减少开发人员的工作量;而且由于采用了领域特定语言进行数据转换规则的描述,简单易懂,学习成本低,即使是执行数据转换操作的普通用户也可以胜任对配置文件中的数据转换规则的配置或修改工作。 C N 1 0 5 3 3 5 4 1 2 A CN 105335412 A
权 利 要 求 书
1/3页
1.一种用于数据转换的方法,其特征在于,包括:
从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则,所述数据转换规则,用于指定根据待转换数据生成目标数据所需执行的转换操作;
解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。2.根据权利要求1所述的用于数据转换的方法,其特征在于,所述生成的与所述数据转换规则对应的数据转换算法,是采用抽象语法树存储的。
3.根据权利要求1或2所述的用于数据转换的方法,其特征在于,用于描述数据转换规则的所述领域专用语言的语法规则包括:
数据转换规则由一个或者一个以上数据转换语句组成,相邻语句之间采用特定分隔符号分隔;和,
每个数据转换语句由用等号连接的目的字段名和转换表达式组成;和,目的字段名不能包含等号以及所述特定分隔符号;和,转换表达式包括以下形式:常量、内置变量、或者用运算符连接的常量和/或内置变量;和,
内置变量的名称包含预先设定的表示该变量的取值来自待转换数据的字母、以及与该变量对应的待转换数据中的特定字段的下标。
4.根据权利要求3所述的用于数据转换的方法,其特征在于,所述语法规则中的运算符包括:加法、减法、乘法、除法、或者取模运算符中的一种或者多种。
5.根据权利要求3所述的用于数据转换的方法,其特征在于,所述语法规则还包括:支持的数据类型包括:长整形long、双精度浮点型double、日期类型Date、字符串类型String,上述类型的常量采用对应的字面量词法表示;
支持的数据类型还包括:大数字类型BigInteger和BigDecimal,上述类型的常量采用显示的类型转换方式表示。
6.根据权利要求5所述的用于数据转换的方法,其特征在于,所述语法规则还包括:支持内置变量采用显示的类型转换方式表示。7.一种用于数据转换的装置,其特征在于,包括:规则读取单元,用于从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;
算法生成单元,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;
数据转换单元,用于读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。
8.根据权利要求7所述的用于数据转换的装置,其特征在于,所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。
9.一种用于数据迁移的方法,其特征在于,包括:从数据源端读取待迁移数据;
根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转
2
CN 105335412 A
权 利 要 求 书
2/3页
换规则生成的;
将执行转换操作后的数据写入数据目的端。
10.根据权利要求9所述的用于数据迁移的方法,其特征在于,在将所述待迁移数据转换为符合数据目的端数据模型的数据之前,执行下述操作:
从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法。11.根据权利要求10所述的用于数据迁移的方法,其特征在于,所述生成的与数据转换规则对应的数据转换算法,是采用抽象语法树存储的。
12.根据权利要求10所述的用于数据迁移的方法,其特征在于,用于描述数据转换规则的所述领域专用语言的语法规则包括:
数据转换规则由一个或者一个以上数据转换语句组成,相邻语句之间采用特定分隔符号分隔;和,
每个数据转换语句由用等号连接的目的字段名和转换表达式组成;目的字段名不能包含等号以及所述特定分隔符号;和,转换表达式包括以下形式:常量、内置变量、或者用运算符连接的常量和/或内置变量;和,
内置变量的名称包含预先设定的表示该变量的取值来自待迁移数据的字母、以及与该变量对应的待迁移数据中的特定字段的下标。
13.根据权利要求12所述的用于数据迁移的方法,其特征在于,所述语法规则还包括:支持的运算符包括:加法、减法、乘法、除法、或者取模运算符中的一种或者多种;和/或,
支持的数据类型包括:长整形long、双精度浮点型double、日期类型Date、字符串类型String,上述类型的常量采用对应的字面量词法表示;和/或,
支持的数据类型还包括:大数字类型BigInteger和BigDecimal,上述类型的常量采用显示的类型转换方式表示;和/或,
支持内置变量采用显示的类型转换方式表示。
14.根据权利要求9-13任一所述的用于数据迁移的方法,其特征在于,包括:将从数据源端读取的待迁移数据存储在数据缓冲区中;相应的,所述将所述待迁移数据转换为符合数据目的端数据模型的数据是指,从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据。
15.根据权利要求14所述的用于数据迁移的方法,其特征在于,在从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据之前,执行下述步骤:
按照所述配置文件中指定的并发数目,创建相应数目的工作线程;相应的,所述从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据是指,由已创建的工作线程并发执行上述读取和转换操作。
16.根据权利要求15所述的用于数据迁移的方法,其特征在于,包括:
判断所述执行转换操作后的数据的规模是否大于或者等于所述配置文件中指定的批量导入阈值;
若是,则执行所述将执行转换操作后的数据写入数据目的端的步骤;
3
CN 105335412 A
权 利 要 求 书
3/3页
若否,则缓存所述执行转换操作后的数据。
17.根据权利要求16所述的用于数据迁移的方法,其特征在于,包括:
监测在所述将执行转换操作后的数据写入数据目的端的步骤中是否发生错误;若发生错误,则执行下述步骤:
记录所述错误的相关信息,并累计错误次数;
判断所述错误次数是否小于或者等于所述配置文件中指定的错误记录阈值;若是,则将所述错误的相关信息写入日志文件。
18.一种用于数据迁移的装置,其特征在于,包括:数据读取单元,用于从数据源端读取待迁移数据;数据转换单元,用于根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转换规则生成的;
数据写入单元,用于将执行转换操作后的数据写入数据目的端。19.根据权利要求18所述的用于数据迁移的装置,其特征在于,所述装置还包括:规则读取单元,用于从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;
算法生成单元,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法。
20.根据权利要求19所述的用于数据迁移的装置,其特征在于,所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。
21.根据权利要求18-20任一所述的用于数据迁移的装置,其特征在于,所述装置还包括:
数据缓冲单元,用于将从数据源端读取的待迁移数据存储在数据缓冲区中;相应的,所述数据转换单元具体用于,从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据。
22.根据权利要求21所述的用于数据迁移的装置,其特征在于,所述装置还包括:线程创建单元,用于按照所述配置文件中指定的并发数目,创建相应数目的工作线程;
相应的,所述数据转换单元执行的读取数据和转换数据的操作由上述工作线程并发执行。
23.根据权利要求22所述的用于数据迁移的装置,其特征在于,所述装置还包括:判断单元,用于判断所述执行转换操作后的数据的规模是否大于或者等于所述配置文件中指定的批量导入阈值;若是,则触发所述数据写入单元动作;若否,则缓存所述执行转换操作后的数据。
24.根据权利要求23所述的用于数据迁移的装置,其特征在于,所述装置还包括:错误监测记录单元,用于监测在将执行转换操作后的数据写入数据目的端的步骤中是否发生错误;若发生错误,记录所述错误的相关信息,并累计错误次数,当所述错误次数小于或者等于所述配置文件中指定的错误记录阈值时,将所述错误的相关信息写入日志文件。
4
CN 105335412 A
说 明 书
用于数据转换、数据迁移的方法和装置
1/15页
技术领域
[0001]
本申请涉及数据处理技术,具体提供一种用于数据转换的方法和装置。本申请同时提供一种用于数据迁移的方法和装置。
背景技术
[0002] 随着互联网的发展,社交数据、在线交易记录、社交媒体等数据日益增多,大量企业开始拥有海量的客户信息,不仅需要计算机存储和处理的数据数量成指数级增长,而且数据类型也越来越复杂。这些数据通常存储在各种数据源中,有的存储在传统的关系型数据库中,例如:mySQL、oracle等数据库系统;有的存储在近年来蓬勃发展的NoSQL数据库中,例如:HBase、Redis等数据库系统;有的则存储在文件系统中,例如:分布式系统集群Hadoop的分布式文件系统HDFS(Hadoop Distributed File System,HDFS)中。[0003] 由于系统备份、升级、数据交换或者数据共享等需求,有时需要在上述各种数据源之间进行数据迁移,即:从作为源端的数据源中导出数据,并将导出的数据导入到作为目的端的数据源中。由于各种数据源的数据模型不同,例如,关系型数据库与NoSQL数据库的数据组织方式不同,或者虽然两个数据源都属于关系型数据库,但是数据表的结构不同,都会导致在上述导出、导入的过程中需要进行数据转换操作,将从源端读取的数据转换为符合目的端数据模型的数据。
[0004] 现有技术中针对数据导入导出过程中的数据转换需求,通常有两种解决方案。一种是case by case的,即针对每一次的数据迁移需求,根据具体的数据源端和数据目的端的数据模型,编写代码实现数据的导出、转换和导入操作;另一种是采用DataX工具进行迁移,即采用DataX提供的从数据源端读取数据、并进行数据转换的reader插件和向数据目的端写入数据的writer插件,实现不同数据源之间的数据迁移。[0005] 在实际应用中,上述两种解决方案存在如下缺陷:[0006] 方案一,如果采用case by case的方式在多个数据源之间进行数据迁移,每增加一个数据源,就需要依次编写该数据源与其它数据源之间的数据迁移代码,例如,新增一个数据源与已有的3个数据源之间进行数据迁移,则需要开发人员分别针对3个数据源编写三套代码。显然采用这种方式程序代码无法复用,而且当数据转换规则发生变化时,必须重新修改和编译代码,开发人员需要付出大量重复劳动,增加了开发成本,而且代码难以维护。
[0007] 方案二,采用DataX架构提供的插件,在某种程度上可以减少开发人员的工作量,但是DataX已有的某些数据源端reader,并没有提供数据转换功能,因此开发人员仍然需要按照DataX的架构自行开发相关的代码,例如,云梯reader不提供数据变换能力,开发人员需要通过map/reduce任务产出计算好的待导入的数据;此外,要使用DataX提供的插件,还需要使用者学习该插件的配置方法,特别是reader插件通常采用专业的SQL语句进行数据转换规则的配置,学习成本高,因此在数据转换规则变更的情况下,负责进行业务数据迁移的普通用户通常难以胜任对配置文件的修改工作,仍然需要开发人员参与。
5
CN 105335412 A
说 明 书
2/15页
发明内容
本申请提供一种用于数据转换的方法和装置,以解决现有的数据转换代码无法复用、以及数据转换规则配置复杂的问题。本申请另外提供一种用于数据迁移的方法和装置。[0009] 本申请提供一种用于数据转换的方法,包括:
[0008]
从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则,所述数据转换规则,用于指定根据待转换数据生成目标数据所需执行的转换操作;[0011] 解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;[0012] 读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。[0013] 可选的,所述生成的与数据转换规则对应的数据转换算法,是采用抽象语法树存储的。
[0014] 可选的,用于描述数据转换规则的所述领域专用语言的语法规则包括:[0015] 数据转换规则由一个或者一个以上数据转换语句组成,相邻语句之间采用特定分隔符号分隔;和,
[0016] 每个数据转换语句由用等号连接的目的字段名和转换表达式组成;和,[0017] 目的字段名不能包含等号以及所述特定分隔符号;和,[0018] 转换表达式包括以下形式:常量、内置变量、或者用运算符连接的常量和/或内置变量;和,
[0019] 内置变量的名称包含预先设定的表示该变量的取值来自待转换数据的字母、以及与该变量对应的待转换数据中的特定字段的下标。[0020] 可选的,所述语法规则中的运算符包括:加法、减法、乘法、除法、或者取模运算符中的一种或者多种。[0021] 可选的,所述语法规则还包括:[0022] 支持的数据类型包括:长整形long、双精度浮点型double、日期类型Date、字符串类型String,上述类型的常量采用对应的字面量词法表示;[0023] 支持的数据类型还包括:大数字类型BigInteger和BigDecimal,上述类型的常量采用显示的类型转换方式表示。[0024] 可选的,所述语法规则还包括:
[0025] 支持内置变量采用显示的类型转换方式表示。
[0010]
相应的,本申请还提供一种用于数据转换的装置,包括:
[0027] 规则读取单元,用于从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;
[0028] 算法生成单元,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;
[0029] 数据转换单元,用于读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。
[0030] 可选的,所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。[0031] 此外,本申请还提供一种用于数据迁移的方法,包括:[0032] 从数据源端读取待迁移数据;
[0026]
6
CN 105335412 A[0033]
说 明 书
3/15页
根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转换规则生成的;
[0034] 将执行转换操作后的数据写入数据目的端。[0035] 可选的,在将所述待迁移数据转换为符合数据目的端数据模型的数据之前,执行下述操作:
[0036] 从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;[0037] 解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法。[0038] 可选的,所述生成的与数据转换规则对应的数据转换算法,是采用抽象语法树存储的。
[0039] 可选的,用于描述数据转换规则的所述领域专用语言的语法规则包括:[0040] 数据转换规则由一个或者一个以上数据转换语句组成,相邻语句之间采用特定分隔符号分隔;和,
[0041] 每个数据转换语句由用等号连接的目的字段名和转换表达式组成;[0042] 目的字段名不能包含等号以及所述特定分隔符号;和,[0043] 转换表达式包括以下形式:常量、内置变量、或者用运算符连接的常量和/或内置变量;和,
[0044] 内置变量的名称包含预先设定的表示该变量的取值来自待迁移数据的字母、以及与该变量对应的待迁移数据中的特定字段的下标。[0045] 可选的,所述语法规则还包括:[0046] 支持的运算符包括:加法、减法、乘法、除法、或者取模运算符中的一种或者多种;和/或,
[0047] 支持的数据类型包括:长整形long、双精度浮点型double、日期类型Date、字符串类型String,上述类型的常量采用对应的字面量词法表示;和/或,[0048] 支持的数据类型还包括:大数字类型BigInteger和BigDecimal,上述类型的常量采用显示的类型转换方式表示;和/或,
[0049] 支持内置变量采用显示的类型转换方式表示。[0050] 可选的,所述方法还包括:
[0051] 将从数据源端读取的待迁移数据存储在数据缓冲区中;[0052] 相应的,所述将所述待迁移数据转换为符合数据目的端数据模型的数据是指,从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据。[0053] 可选的,在从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据之前,执行下述步骤:
[0054] 按照所述配置文件中指定的并发数目,创建相应数目的工作线程;[0055] 相应的,所述从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据是指,由已创建的工作线程并发执行上述读取和转换操作。[0056] 可选的,所述方法包括:
[0057] 判断所述执行转换操作后的数据的规模是否大于或者等于所述配置文件中指定的批量导入阈值;
7
CN 105335412 A[0058]
说 明 书
4/15页
若是,则执行所述将执行转换操作后的数据写入数据目的端的步骤;[0059] 若否,则缓存所述执行转换操作后的数据。[0060] 可选的,所述方法包括:
[0061] 监测在所述将执行转换操作后的数据写入数据目的端的步骤中是否发生错误;若发生错误,则执行下述步骤:
[0062] 记录所述错误的相关信息,并累计错误次数;
[0063] 判断所述错误次数是否小于或者等于所述配置文件中指定的错误记录阈值;若是,则将所述错误的相关信息写入日志文件。[0064] 相应的,本申请还提供一种用于数据迁移的装置,包括:[0065] 数据读取单元,用于从数据源端读取待迁移数据;[0066] 数据转换单元,用于根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转换规则生成的;[0067] 数据写入单元,用于将执行转换操作后的数据写入数据目的端。[0068] 可选的,所述装置还包括:[0069] 规则读取单元,用于从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;
[0070] 算法生成单元,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法。
[0071] 可选的,所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。[0072] 可选的,所述装置还包括:[0073] 数据缓冲单元,用于将从数据源端读取的待迁移数据存储在数据缓冲区中;[0074] 相应的,所述数据转换单元具体用于,从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据。[0075] 可选的,所述装置还包括:[0076] 线程创建单元,用于按照所述配置文件中指定的并发数目,创建相应数目的工作线程;
[0077] 相应的,所述数据转换单元执行的读取数据和转换数据的操作由上述工作线程并发执行。
[0078] 可选的,所述装置还包括:[0079] 判断单元,用于判断所述执行转换操作后的数据的规模是否大于或者等于所述配置文件中指定的批量导入阈值;若是,则触发所述数据写入单元动作;若否,则缓存所述执行转换操作后的数据。[0080] 可选的,所述装置还包括:[0081] 错误监测记录单元,用于监测在将执行转换操作后的数据写入数据目的端的步骤中是否发生错误;若发生错误,记录所述错误的相关信息,并累计错误次数,当所述错误次数小于或者等于所述配置文件中指定的错误记录阈值时,将所述错误的相关信息写入日志文件。
[0082] 与现有技术相比,本申请具有以下优点:
8
CN 105335412 A[0083]
说 明 书
5/15页
本申请提供的用于数据转换的方法,从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则,解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法,然后读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。采用本申请提供的方法,针对不同的数据转换规则,仅需要在配置文件中采用领域特定语言描述数据转换规则,不需要重新编写代码,就可以完成数据转换操作,从而实现了数据转换代码的复用,有效减少开发人员的工作量;而且由于采用了领域特定语言进行数据转换规则的描述,简单易懂,学习成本低,即使是执行数据转换操作的普通用户也可以胜任对配置文件中的数据转换规则的配置或修改工作。[0084] 本申请提供的用于数据迁移的方法,通过从数据源端读取待迁移数据,根据从配置文件中读取的采用领域专用语言描述的数据转换规则生成的数据转换算法,将所述待迁移数据转换为符合数据目的端数据模型的数据,并将执行转换操作后的数据写入数据目的端,从而在不同数据模型的数据源之间进行数据迁移,只需要在配置文件中用领域特定语言描述数据转换规则,不需要修改数据转换部分的代码,实现了数据转换部分代码的复用,而且由于采用自定义的领域特定语言描述数据转换规则,通俗易懂,学习成本低,即使是负责数据迁移的业务人员也可以根据需要对配置文件中的数据转换规则进行修改。附图说明
[0085] [0086] [0087] [0088] [0089]
图1是本申请的一种用于数据转换的方法的实施例的流程图;
图2是本申请实施例提供的数据转换规则对应的抽象语法树的示意图;图3是本申请的一种用于数据转换的装置的实施例的示意图;图4是本申请的一种用于数据迁移的方法的实施例的流程图;图5是本申请的一种用于数据迁移的装置的实施例的示意图。
具体实施方式
[0090] 在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。[0091] 在本申请中,分别提供了一种用于数据转换的方法和装置、以及一种用于数据迁移的方法和装置。下面对本申请的实施例逐一进行详细说明。[0092] 请参考图1,其为本申请的一种用于数据转换的方法的实施例的流程图。所述方法包括如下步骤:[0093] 步骤101:从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则。
[0094] 将配置信息存储在配置文件中,程序代码根据从配置文件中读取的配置信息执行相应的处理,采用这种方式,可以减少修改代码、编译代码的工作量,能够提高代码的灵活性和实现代码的复用。因此本实施例的技术方案也采用了这一思路,将数据转换规则预先写入配置文件中,在需要重新定义或者修改数据转换规则时,只需要修改配置文件,从而实现了数据转换代码的复用。
[0095]
本申请所述的数据转换规则,用于指定根据待转换数据生成目标数据所需执行的
9
CN 105335412 A
说 明 书
6/15页
转换操作,例如:将待转换数据A与某个预先设定的常量C相乘,从而得到目标数据D,就是一个简单的数据转换规则,其指定了根据待转换数据A生成目标数据D所需执行的转换操作:A与常量C相乘。所述转换操作可以包括加、减、乘、除、取模、以及数据类型转换等多种操作,本例子中给出的乘法操作仅仅是示意性的,在具体实施中,可以根据需要设置所需的更为复杂的数据转换规则。
在具体实施时,所述数据转换规则可以存储在不同格式的配置文件中,例如,ini
文件、Reg文件或者是xml文件中。由于xml格式是W3C(万维网联盟)的标准,具有可移植性好、树形层次结构方便定位信息、扩展性好等特点,在本实施例的一个具体例子中采用xml文件作为配置文件,其中关于数据转换规则的描述如下所示:
[0096] [0097]
其中,“name=F1;chinese=F2;math=F3;sum=(Long)F2+(Long)F3”部分,即为采用领域专用语言描述的数据转换规则。[0099] 所谓领域专用语言,即通常所说的DSL(Domain Specific Language),是针对某个特定领域而开发的语言。开发人员通常使用的C/C++、Java、Python等都属于通用语言,通用语言从解决问题的角度看待代码,可以为各个领域编程,有较强的通用性;DSL则不像通用语言那样目标范围涵盖一切软件问题,而是专门针对某一特定领域问题设计的语言,为了更加快速地描述问题、解决问题,DSL通常是从特定领域客户的角度出发看待代码,其风格更面向客户,语法也更加友好。[0100] 作为一种语言,每一种DSL都有其自己的语法规则,本实施例的一个具体例子中自定义了一种用于描述数据转换规则的DSL语言——数据转换规则配置语言,其语法规则定义如下:
[0101] 1)数据转换规则由一个或者一个以上数据转换语句组成,相邻语句之间采用特定分隔符号分隔;
[0102] 2)每个数据转换语句由用等号连接的目的字段名和转换表达式组成;[0103] 3)目的字段名不能包含等号以及所述特定分隔符号;[0104] 4)转换表达式包括以下形式:常量、内置变量、或者用运算符连接的常量和/或内置变量;
[0105] 5)内置变量的名称包含预先设定的表示该变量的取值来自待转换数据的字母、以及与该变量对应的待转换数据中的特定字段的下标;[0106] 6)运算符包括:加法、减法、乘法、除法、或者取模运算符中的一种或者多种;[0107] 7)支持的数据类型包括:长整形long、双精度浮点型double、日期类型Date、字符
[0098]
10
CN 105335412 A
说 明 书
7/15页
串类型String,上述类型的常量采用对应的字面量词法表示;[0108] 支持的数据类型还包括:大数字类型BigInteger和BigDecimal,上述类型的常量采用显示的类型转换方式表示;
[0109] 8)支持内置变量采用显示的类型转换方式表示。[0110] 需要说明的是,对于常量可以采用字面量词法表示,例如,99表示一个长整形常量,99.0则表示一个双精度浮点型常量,对于没有字面量写法的某些数据类型,例如BigInteger和BigDecimal,则可以采用显示的类型转换来表示,例如:(BigInteger)99。对于内置变量同样可以采用显示的类型转换来表示,以便在后续的步骤中采用正确的数据类型进行数据转换。
[0111] 上述示例xml文件中的数据转换规则就是遵循上述语法规则进行描述的。在该示例中,表示该变量的取值来自待转换数据的字母为F,所述待转换数据包括四个字段,采用下标方式表示分别为F0、F1、F2、F3(按照计算机界的常规约定,下标是从0开始计的)。数据转换规则中的“name=F1;”指定了目标数据name的值等于待转换数据的第二个字段的值,“sum=(Long)F2+(Long)F3;”指定了目标数据sum的值等于待转换数据的第三个字段的值和第四个字段的值的和,并且在进行求和运算前,要先将这两个字段转换为Long型,其中,位于等号右侧的“(Long)F2+(Long)F3”部分也称为数据转换表达式。为了提高数据转换规则的可读性,本实施例的上述具体例子中采用的自定义DSL语言——数据转换规则配置语言,还支持Java风格的注释。例如:数据转换语句“sum=(Long)F2+(Long)F3”也可以写为“sum=(Long)F2/*语文*/+(Long)F3/*数学*/”,从而表明F2对应待转换数据中的语文成绩字段,而F3对应待转换数据中的数学成绩字段,采用这种注释方式,可以提高数据转换规则的可读性。[0113] 通过上面的具体例子可以看出,采用自定义的DSL语言描述数据转换规则,简洁明了地指明了如何根据待转换数据生成目标数据,这种表达方式通俗易懂,普通的操作人员即使不了解专业的开发技术,也可以完成对数据转换规则的配置或修改任务。[0114] 上述例子仅仅是示意性的,在具体实施过程中,可以根据实际的需要,定义描述数据转换规则的DSL语言的语法,并按照语法在配置文件中对数据转换规则进行描述。[0115] 步骤102:解析所述数据转换规则,生成采用抽象语法树存储的与所述数据转换规则对应的数据转换算法。[0116] 本步骤中,通过解析所述数据转换规则,生成与之对应的数据转换算法。生成的数据转换算法在内存中可以采用不同的形式存储,在本实施例中,采用抽象语法树存储所述数据转换算法。
[0117] 抽象语法树(Abstract Syntax Tree—AST)是语言或者代码的抽象语法结构的树状表现形式。抽象语法树不同于语法分析树,后者反映的是具体语法结构,而抽象语法树往往忽略语言中的某些细节(例如括号),使用最少的信息来表示语言本身的抽象的语法结构,是分析树的抽象形式或压缩形式。[0118] 本步骤的解析过程,就是将采用文本形式描述的数据转换规则转换成在内存结构中存储的数据转换算法的过程,即:在内存中采用抽象语法树存储数据转换规则对应的数据转换算法。
[0112] [0119]
上述解析过程通常包括词法分析和语法分析这两个过程:
11
CN 105335412 A[0120]
说 明 书
8/15页
1)词法分析:把读入的普通文本流(即:数据转换规则字符串)分解为一个一个的元素(也称为记号或者Token),即:将文本流转换为记号流或Token串,并为每一个元素生成对应的表达式对象(expression object);[0121] 2)语法分析:按照数据转换规则描述的先后顺序,将上述表达式对象采用树形结构组合起来,就得到对应的抽象语法树,该抽象语法树中存储的就是对应的数据转换算法。[0122] 在抽象语法树的表示中,每一个叶节点都表示诸如常量或变量这样的运算对象,而其它内部节点则表示运算符。采用抽象语法树作为算法的存储结构,不但在存储上节省空间,而且对于算法的实现,也简便了许多。请参考图2,其为数据转换语句data1=(F1+2)×F3对应的抽象语法树的示意图。[0123] 在具体实现中,可以自行编写代码实现上述分解表达式及构建AST的解析功能,也可以利用一些工具,例如:语法分析生成程序或者是开源的解析器生成工具ANTLR等生成所需的语法解析器。
[0124] 如果数据转换规则中包含多条数据转换语句,可以根据语句分隔符号(例如上述xml文件中采用分号作为语句分隔符号)将多条数据转换语句分开,然后针对每条数据转换语句,执行本步骤所述的解析操作,分别生成与每一条数据转换语句对应的抽象语法树,为后续步骤103的数据转换操作做好准备。
[0125]
步骤103:读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转
换。
在具体实施中,根据所述待转换数据的存储方式不同,执行相应的读取操作,例
如:可以从数据文件中读取,也可以从数据表格中读取,或者从数据库中读取。具体的读取方式可以根据具体需求确定,本实施例不做限定。读取待转换数据后,就可以根据存储在抽象语法树中的数据转换算法执行数据转换操作。[0127] 对于在步骤102中生成的抽象语法树,通常有两个选择:解释或编译。解释,简单地说,就是遍历抽象语法树,同时执行所需的操作;编译,就是将抽象语法树转换为具体的目标机代码,对于机器执行来说更简单、通常速度也更快。具体到本实施例的技术方案,需要根据抽象语法树存储的数据转换算法计算数据转换表达式的值,因此采用上述第一种选择,即:遍历抽象语法树,在每一个节点执行相应的操作,计算出数据转换表达式的值,并将该值赋值给对应的目标数据,从而完成该目标数据的数据转换操作。[0128] 下面仍以附图2中的抽象语法树为例,说明本步骤如何根据所述抽象语法树中存储的数据转换算法进行数据转换。在图示抽象语法树中共有7个节点,每个节点都可以对应一个表达式对象(expression object)。采用深度优先遍历抽象语法树的方式,依次计算每个节点的值,对于节点1、节点2和节点4,由于这三个节点都是叶子节点(也称原子节点),可以执行表达式对象的类似getValue()这样的方法,并向上一级直接返回得到的值,对于非叶子节点3和节点5,由于各自包含了运算符,则需要执行相应的运算并向上一级返回运算结果。[0129] 具体说,对于节点1,因为该表达式对象包含的是内置变量F1,因此getValue()函数返回的是待转换数据的第二个字段(请参见步骤101中的说明)的值;对于节点2,因为该表达式对象包含的是常量,因此直接向上一级返回该常量值本身;对于节点3,该表达式对象包含的是加法运算符,则需要接收左子节点对应的表达式对象的值(即:1号节点返回
[0126]
12
CN 105335412 A
说 明 书
9/15页
的值)和右子节点对应的表达式对象的值(即:2号节点返回的值),然后执行相加运算,并将运算结果返回上一级节点;节点4与节点1的处理过程类似,返回待转换数据的第4个字段的值;节点5与节点3的处理过程类似,计算左子节点对应的表达式对象的值(即:节点3返回的值)和右子节点对应的表达式对象的值(即:节点4返回的值)的乘积,并将计算结果返回上一级节点;节点7是该抽象语法树的根节点,包含的是赋值运算(assignment),因此直接根据右子节点返回的值为左子节点对应的变量赋值,至此就完成了目标数据data1的数据转换操作。
[0130] 如果所述数据转换规则包含多条数据转换语句,也就是说在步骤102中生成了不止一棵抽象语法树,那么在本步骤中,以待转换数据作为输入,针对每一棵抽象语法树,执行上述计算过程,从而完成整个数据转换操作。[0131] 通过上面的描述可以看出,采用本实施例提供的方法,针对不同的数据转换规则,仅需要在配置文件中采用领域特定语言描述数据转换规则,不需要重新编写代码,就可以完成数据转换操作,从而实现了数据转换代码的复用,有效减少开发人员的工作量;而且由于采用了领域特定语言进行数据转换规则的描述,简单易懂,学习成本低,即使是执行数据转换操作的普通用户也可以胜任对配置文件中的数据转换规则的修改工作。
在上述的实施例中,提供了一种用于数据转换的方法,与之相对应的,本申请还提
供一种用于数据转换的装置。请参看图3,其为本申请的一种用于数据转换的装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。[0133] 本实施例的一种用于数据转换的装置,包括:规则读取单元301,用于从预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;算法生成单元302,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法;数据转换单元303,用于读取待转换数据,并根据所述数据转换算法对所述待转换数据进行转换。[0134] 可选的,包括:所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。
[0135] 与上述的一种用于数据转换的方法相对应的,本申请还提供一种用于数据迁移的方法。请参考图4,其为本申请提供的一种用于数据迁移的方法实施例的流程图,本实施例与第一实施例步骤相同的部分不再赘述,下面重点描述不同之处。[0136] 为了便于理解,先对本实施例的技术方案作简要说明。本实施例所述的数据迁移是指,从数据源端读取数据,并将读取的数据写入数据目的端的过程。由于数据源端和数据目的端的数据模型可能不同,因此需要对从数据源端读取的数据进行转换,然后再执行写入操作。
[0137] 基于上述在不同数据模型的数据源之间需要进行数据转换的需求,本实施例的技术方案提供了一种数据迁移方法,即:根据配置文件中采用领域特定语言描述的数据转换规则生成对应的数据转换算法,并根据该算法将从数据源端读取的待迁移数据转换为符合数据目的端数据模型的数据,并写入数据目的端。采用在配置文件中用领域特定语言描述数据转换规则的方式,不仅可以实现数据转换部分代码的复用,而且由于采用自定义的领域特定语言描述数据转换规则,通俗易懂,学习成本低,即使是负责数据迁移的业务人员也可以根据需要对配置文件中的数据转换规则进行修改,从而减少开发人员的工作量。
[0132]
13
CN 105335412 A[0138]
说 明 书
10/15页
在计算机领域通常认为,数据模型(Data Model)是与数据库系统相关联的,即:数据库系统中用以提供信息表示和操作手段的形式构架,也可以这样认为,数据模型是数据库中数据的存储方式,是数据库系统的基础。关系型数据库与NoSQL数据库的数据模型自然是不同的,即使两个数据源都属于关系型数据库,如果所包含的表结构不同,通常也认为是两个数据模型不同的数据源。
而本实施例技术方案所述的数据模型是相对宽泛的概念,泛指数据的组织和存储
方式,不仅仅局限在上面描述的数据库系统中,例如,还可以将数据模型的概念应用于采用一定的数据组织和存储方式的文件系统等。因此本实施例技术方案所涉及的在数据模型不同的数据源之间进行数据迁移,并不仅仅局限于在数据库表之间的数据迁移,也包括在数据组织和存储方式不同的数据源之间进行数据迁移,例如:在HDFS(Hadoop的分布式文件系统)与OceanBase(一种关系型数据库)之间进行数据迁移。在上述数据模型不同的数据源之间进行数据迁移,都可以应用本实施例提供的方法。[0140] 下面,对本实施例的技术方案作进一步的详细说明。本实施例提供的一种用于数据迁移的方法包括:[0141] 步骤401:从数据源端读取待迁移数据。
[0142] 本步骤的主要任务是从数据源端读取待迁移数据。在具体实施中,需要判断是否已经与数据源端建立了数据连接,如果尚未建立,则需要在执行本步骤之前先建立数据连接。例如,如果数据源端是关系型数据库中的某个数据表,则可以通过ODBC或者JDBC接口与该关系型数据库建立连接,建立连接过程中所需的数据库名称、用户名和密码等信息,可以直接写入程序代码中,也可以预先在配置文件中设置、并在建立连接时从该配置文件中读取。本实施例的一个具体例子中,通过JDBC提供的getConnection()接口与MySQL数据库建立连接。
[0143] 与数据源端数据库建立连接后,就可以执行本步骤从数据源端读取待迁移数据,例如,对于数据源端是关系型数据库的情况,可以调用JDBC提供的函数实现,具体说,在当前建立的数据连接的基础上,创建一个Statement对象,并调用该对象的executeQuery(query)方法,其中query是从数据源端读取数据的SQL select语句;如果数据源端是NoSQL数据库,则通常可以调用NoSQL数据库系统提供的Get()函数或者类似的函数,通过指定键值获取对应的value值。[0144] 如果数据源端不是数据库,而是文件系统,则不用建立数据连接,只需要打开数据源端对应的数据文件,然后就可以在本步骤中调用系统提供的fread()或者类似函数读取待迁移数据。
[0139]
上述读取待迁移数据的过程,可以每次读取一行数据(例如,关系型数据库中的
一条记录),该行数据中通常包含多个字段。在本实施例的一个具体例子中,本步骤从统计学生成绩的数据表中读取一条记录,其中包含序号、姓名、语文成绩、数学成绩这样四个字段,后续步骤402根据上述待迁移数据进行数据转换,生成包含姓名、语文成绩、数学成绩和总成绩这样四个字段的数据,后续步骤403负责将转换后的数据写入目的端的数据表中(关于步骤402和403请参见下文相应部分的说明)。随后可以读取下一条待转换数据,重复执行上述过程,直至将待转换数据全部处理完毕,从而完成了数据迁移操作。[0146] 上面描述的实施方式简单易行,可以实现本实施例的技术方案,但是在待迁移数
[0145]
14
CN 105335412 A
说 明 书
11/15页
据数量比较多的情况下,上述实施方式的执行效率可能不能满足要求。为了提高整个处理过程的执行效率,本实施例提供了一种采用了生产者和消费者模式的优选实施方式,即:在读取操作和转换写入操作之间添加了一个数据缓冲区,本步骤中可以根据需要采用逐条或者批量读取的方式连续读取待迁移的数据,并且把读取的每一行数据都存储在数据缓冲区中(生产的过程),后续步骤需要对这些数据进行处理时,可以从缓冲区中取出数据处理(消费的过程)。采用这种模式,一方面可以将生产者代码和消费者代码解耦,另一方面可以让生产者和消费者并发工作,不用互相等待,还可以平滑生产或者消费过程中可能存在的速度不均衡的问题。[0147] 步骤402:根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转换规则生成的。
[0148] 本步骤根据已生成的数据转换算法,将步骤401中获取的待迁移数据转换为符合数据目的端数据模型的数据。所述数据转换算法是预先生成的,其生成过程包括步骤402-1和402-2,下面对这两个步骤进行说明。[0149] 步骤402-1:从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则。
[0150] 关于数据转换规则、领域专用语言的描述请参见第一实施例中步骤101中的相关部分,此处不再赘述。
[0151] 在本实施例的一个具体例子中,预先采用自定义的用于描述数据转换规则的DSL语言——数据转换规则配置语言(关于其语法规则,请参见第一实施例步骤101中的说明),在xml配置文件中写入了数据转换规则,在本步骤中,从该xml配置文件中读取所述数据转换规则,为步骤402-2做好准备。[0152] 步骤402-2:解析所述数据转换规则,生成采用抽象语法树存储的与所述数据转换规则对应的数据转换算法。[0153] 解析数据转换规则,通常包括词法分析和语法分析这两个过程,完成这两个过程的处理后,可以生成一颗抽象语法树,该抽象语法树中存储了所述数据转换规则对应的数据转换算法。也可以这样理解,对数据转换规则进行解析的过程,就是将采用文本形式描述的数据转换规则转换成在内存结构中存储的数据转换算法的过程。所述解析过程与第一实施例基本相同,请参见第一实施例步骤102中的相关说明。通过预先执行上述步骤402-1和402-2生成数据转换算法后,就可以执行本步骤的数据转换操作了。与第一实施例中描述的计算过程类似,本步骤中通过遍历用于存储数据转换算法的抽象语法树,并在每一个节点执行相应的操作,计算出数据转换表达式的值,并将该值赋值给对应的目标数据,从而完成该目标数据的数据转换操作。具体的计算过程请参见第一实施例步骤103的相关说明,此处不再赘述。[0155] 如果所述数据转换规则包含多条数据转换语句,也就是说在步骤402-2中生成了不止一棵抽象语法树,那么在本步骤中,以当前读取的一行待迁移数据作为输入,针对每一棵抽象语法树,依次执行上述计算过程,从而根据该待迁移数据中的字段,计算出符合目的端数据模型的各个目标字段的值,完成了本条待迁移数据的数据转换操作。[0156] 在本实施例的一个具体例子中,执行数据迁移的源端数据表中包括序号、姓名、语
[0154]
15
CN 105335412 A
说 明 书
12/15页
文成绩、数学成绩这样四个字段,目的端数据表中包括姓名(name)、语文成绩(chinese)、数学成绩(math)和总成绩(sum)这样四个字段,xml文件中配置的数据转换规则为“name=F1;chinese=F2;math=F3;sum=(Long)F2+(Long)F3”。采用本实施例提供的方法,在上述预先执行的步骤402-2中生成了与上述数据转换规则对应的四棵抽象语法树,在本步骤中以当前读取的一行待迁移数据作为输入,针对每一棵抽象语法树进行计算,得到了name、chinese、math和sum这样四个目标字段的值,从而根据待迁移数据得到了符合目的端数据模型的目标数据。[0157] 在具体实施中,如果采用了生产者和消费者模式,即:在步骤401中将待迁移数据写入了数据缓冲区中,那么本步骤需要从所述数据缓冲区中逐行读取待迁移数据,如果所述待迁移数据在数据缓冲区中是采用一行字符串的形式存储的,则还需要从读取的字符串中提取出各个字段(例如,利用数据缓冲区提供的类似get(index)接口,从字符串数据中提取出与index对应的字段),然后以各个字段组成的待迁移数据为输入,利用抽象语法树存储的数据转换算法计算出符合数据目的端数据模型的数据。[0158] 在具体实施中,如果待迁移的数据量比较大,即使采用了上述生产者和消费者模式,因为本步骤的数据转换操作涉及抽象语法树的遍历以及相应的计算处理,相对比较耗时,有可能成为系统的瓶颈。基于上述考虑,为了提高整个系统的处理性能,可以采用多线程并发执行的实施方式,具体说,在执行本步骤之前,可以按照预先生成的配置文件中指定的并发数目,创建相应数目的工作线程,由这些工作线程并发执行上述从数据缓冲区读取数据以及转换数据的操作,在提高CPU利用率的同时,提高整个系统的效率。步骤403:将执行转换操作后的数据写入数据目的端。[0160] 在具体实施中,为了将执行转换操作后的数据写入数据目的端,通常需要先与数据目的端的数据库建立数据连接,或者是打开数据目的端的相关数据文件,其处理方式与步骤401描述的相关部分类似,此处不再赘述。
[0161] 如果所述数据目的端是数据库中的数据表,在建立数据连接后就可以向数据表中写入转换后的数据。例如,对于数据目的端是关系型数据库的情况,可以调用JDBC提供的函数实现,具体说,在当前建立的数据连接的基础上,创建一个Statement对象,并调用该对象的execute(sql)方法,其中参数sql是向数据表中写入数据的SQL insert语句;如果数据目的端是NoSQL数据库,则通常可以调用NoSQL数据库系统提供的Put()函数或者类似的函数,通过指定rowkey、列簇、列名等信息,将转换后的数据写入对应的数据表中。execute(sql)方法,query表示查询
[0162] 如果数据目的端不是上述数据库,而是文件系统,则在打开数据目的端对应的数据文件后,按照文件系统预先设定好的数据格式,调用系统提供的fwrite()或者类似函数将执行转换操作后的数据写入所述数据文件中。[0163] 在具体实施过程中,如果数据目的端没有部署在实施了本实施例技术方案的本地设备上,那么向数据目的端写入数据的操作通常包括发送数据、传输数据、接收数据、写入数据这样几个环节,如果要写入数据目的端的数据量比较大,每一条数据都经过上述环节才能完成写入操作,那么时间开销会比较大,影响数据迁移过程的整体性能。出于上述考虑,本实施例技术方案提供了一种批量写入的优选实施方式。
[0159] [0164]
具体说,本步骤在将执行转换操作后的数据写入数据目的端之前,先判断所述数
16
CN 105335412 A
说 明 书
13/15页
据的规模是否大于或者等于配置文件中指定的批量导入阈值;若是,则将所述数据采用批量导入的方式写入数据目的端;若否,则将所述数据暂时存储在本地内存或者其他存储介质中。
[0165] 在本实施例的一个具体例子中,预先设置好的xml配置文件片段如下所示:
[0166]
其中,预先配置的batch-size即为本步骤所述的批量导入阈值,该项的值为512,表示每完成512行数据的转换操作,执行一次向数据目的端的写入操作。采用这种批处理方式,可以减少通过网络传输执行写入操作的时间开销。[0168] 除了batch-size外,上述xml文件中的concurrentcy一项对应在上述步骤402中的多线程的并发数目,其中的error-limit一项则用于控制错误日志写入操作,相关说明请参见下文描述。需要说明的是,上述xml文件片段是从完整配置文件中截取的一部分,而且其中的具体取值都仅仅是示意性的,在具体实施过程中,可以根据实际需要,配置其他参数以及取值。
[0169] 在具体实施过程中,由于待迁移数据往往来自不同的业务端,数据量巨大、数据类型繁多,数据的完整性、一致性难以得到保证,因此在向数据目的端写入转换后的数据时,不可避免地可能出现写入数据失败的现象,例如:通过JDBC接口向数据目的端写入数据时,如果其中某个字段不符合目的端对该字段的类型定义,JDBC会报告数据写入错误。
[0167]
这种情况下,可以将写入过程中发生的错误写入日志中,以供后续对部分未迁移成功的数据进行修改并重新导入时参考,有助于问题数据的定位和维护。从文件的存储和便于管理的角度考虑,日志文件的大小通常有一定的限制,为了避免因为记录上述错误信息导致日志文件过大,可以在配置文件中指定错误记录阈值(参见上面示例xml文件片段中的error-limit),并对在本次数据迁移过程中发生的数据写入错误进行累积,当发生的错误次数小于或者等于该阈值,将所述错误及相关信息写入日志文件中,否则不记录所述错误及相关信息。
[0171] 通过上面的描述可以看出,采用本实施例提供的方法在不同数据模型的数据源之间进行数据迁移,只需要在配置文件中用领域特定语言描述数据转换规则,不需要修改数
[0170]
17
CN 105335412 A
说 明 书
14/15页
据转换部分的代码,从而实现了数据转换部分代码的复用,减少开发人员的工作量,而且由于采用自定义的领域特定语言描述数据转换规则,通俗易懂,学习成本低,即使是负责数据迁移的业务人员也可以根据需要对配置文件中的数据转换规则进行配置或修改,从而减少开发人员的工作量。
[0172] 在上述的实施例中,提供了一种用于数据迁移的方法,与之相对应的,本申请还提供一种用于数据迁移的装置。请参看图5,其为本申请的一种用于数据迁移的装置的实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。[0173] 本实施例的一种用于数据迁移的装置,包括:数据读取单元501,用于从数据源端读取待迁移数据;数据转换单元502,用于根据已生成的数据转换算法将所述待迁移数据转换为符合数据目的端数据模型的数据,所述数据转换算法是根据预先生成的配置文件中的、采用领域专用语言描述的数据转换规则生成的;数据写入单元503,用于将执行转换操作后的数据写入数据目的端。[0174] 可选的,所述装置还包括:[0175] 规则读取单元,用于从所述预先生成的配置文件中读取采用领域专用语言描述的数据转换规则;
[0176] 算法生成单元,用于解析所述数据转换规则,生成与所述数据转换规则对应的数据转换算法。
[0177] 可选的,所述算法生成单元生成的数据转换算法,是采用抽象语法树存储的。[0178] 可选的,所述装置还包括:[0179] 数据缓冲单元,用于将从数据源端读取的待迁移数据存储在数据缓冲区中;[0180] 相应的,所述数据转换单元具体用于,从所述数据缓冲区中读取待迁移数据,并将其转换为符合数据目的端数据模型的数据。[0181] 可选的,所述装置还包括:[0182] 线程创建单元,用于按照所述配置文件中指定的并发数目,创建相应数目的工作线程;
[0183] 相应的,所述数据转换单元执行的读取数据和转换数据的操作由上述工作线程并发执行。
[0184] 可选的,所述装置还包括:判断单元,用于判断所述执行转换操作后的数据的规模是否大于或者等于所述配置文件中指定的批量导入阈值;若是,则触发所述数据写入单元动作;若否,则缓存所述执行转换操作后的数据。[0186] 可选的,所述装置还包括:[0187] 错误监测记录单元,用于监测在将执行转换操作后的数据写入数据目的端的步骤中是否发生错误;若发生错误,记录所述错误的相关信息,并累计错误次数,当所述错误次数小于或者等于所述配置文件中指定的错误记录阈值时,将所述错误的相关信息写入日志文件。
[0188] 本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保
[0185]
18
CN 105335412 A
说 明 书
15/15页
护范围应当以本申请权利要求所界定的范围为准。[0189] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0190] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。[0192] 2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0191]
19
CN 105335412 A
说 明 书 附 图
1/2页
图1
图2
图3
20
CN 105335412 A
说 明 书 附 图
2/2页
图4
图5
21
因篇幅问题不能全部显示,请点此查看更多更全内容