一种数据迁移系统和方法

文档序号:6433528阅读:166来源:国知局

专利名称::一种数据迁移系统和方法一种数据迁移系统和方法
技术领域
本申请涉及计算机系统数据处理
技术领域
,特别是涉及一种数据迁移系统和方法。
背景技术
:目前,随着网络技术的发展和信息量的增加,网络上形成了数量巨大的分布的异构信息源。各企事业内部由于地理位置的不同或新需求的增加也形成了一个分布式的、异构的且数量巨大的数据集合。异构的数据源出现的一个很重要的原因是由于多种商业数据库的同时存在。异构数据源形式多样,从结构上来区分,其不仅可以包括数据库(如关系数据库)中结构化数据,而且还可以包括文件系统中非结构化的数据,如一般的文本文件、电子邮件、演示文稿和各种文档等。这些数据源往往分布在地理位置上,数据格式和代码不同一,这些都直接推动了对异构数据源的数据共享和透明访问的需求的产生。因此,如何将数据在这些异构数据源之间进行迁移,从而维持一个一致、完整的全局模式,具有重要的意义。在现有技术中,常用的数据迁移方法主要采用导出/导入方式。假设欲将数据从Oracle数据库迁移至HDFS(分布式文件系统,HadoopDistributedFileSystem)系统,贝丨J现有技术首先采用Oracle的数据导出命令或工具将源数据导出为文件,然后利用工具将文件格式、编码进行转化后拷贝到HDFS系统中。现有技术具有如下缺点1、数据的导出和转码过程都需要磁盘转储,由于磁盘转储需要大量的磁盘I/0(输入/输出,input/output),而磁盘是慢速设备,这就导致数据迁移的流程比较长,数据迁移的性能低下;另外,在长的数据迁移流程中,用户不仅需要自己衔接上下游过程,对每个过程进行监控,而且还要监控磁盘空间,这大大提高了运维成本;2、虽然,目前成熟的数据导入导出工具比较多,但是一般都只能支持一个或者几个特定类型的数据库;一旦拥有很多异构数据源,如Mysql、Oracle、Rac>Hive等数据库/文件系统,并且需要经常在这些异构数据源之间导入导出数据,那么需要开发/维护/学习使用一批这样的工具,并且随着数据源类型的增加,需要的导入导出工具数目会呈线性增长趋势,而导入导出工具的开发会花费大量的开发成本。
发明内容本申请所要解决的技术问题是,提供一种数据迁移系统和方法,以提高数据迁移的性能,降低数据迁移所花费的运维成本和开发成本。为了解决上述问题,本申请公开了一种数据迁移系统,包括配置读取模块,用于读取数据迁移任务的配置文件,所述配置文件中包括有数据读取信息和数据写入信息;读取模块,用于依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后,写入数据交换缓冲模块;数据交换缓冲模块,用于临时存储写入的中间格式的数据;及写入模块,用于从所述数据交换缓冲模块中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。另一方面,本申请还公开了一种数据迁移方法,包括读取数据迁移任务的配置文件,所述配置文件中包括有数据读取信息和数据写入信息;依据所述配置文件中的数据读取信息,进行数据的读取;将读取的数据转换为中间格式,并写入数据交换缓冲模块,其中,所述数据交换缓冲模块用于临时存储写入的中间格式的数据;从所述数据交换缓冲模块中读取所述中间格式的数据;依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式,并写入目标地址。优选的,所述方法还包括依据所述配置文件中的数据读取信息,装载相应的读取插件和数据交换缓冲插件,并向所述读取插件提供相应的运行环境,由所述读取插件依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后写入数据交换缓冲插件,由所述数据交换缓冲插件临时存储读取插件写入的中间格式的数据;依据所述配置文件中的数据写入信息,装载相应的写入插件,并向所述写入插件提供相应的运行环境,由所述写入插件从所述数据交换缓冲插件中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。优选的,所述方法还包括在进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;所述依据所述配置文件中的数据读取信息,进行数据的读取的步骤为,在多线程池的读取运行环境下,进行所述多个读取子任务的读取优选的,所述方法还包括在所述写入模块将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;所述写入目标地址的步骤为,在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据写入目标地址。优选的,所述数据交换缓冲模块为基于双缓冲队列的内存缓冲区。优选的,所述方法还包括在所述读取模块和/或数据交换缓冲模块和/或写入模块的运行过程中,监控相应的运行参数,所述运行参数包括读取和/或临时存储和/或写入数据的行数和/或字节数。优选的,所述数据读取信息包括如下信息中的一种或多种源数据库的IP地址、端口号、库名、登录用户名、登录密码、数据库表名、过滤条件;所述数据写入信息包括如下信息中的一种或多种数据写入路径、数据目标格式。优选的,所述配置文件为可扩展标记语言文件,所述可扩展标记语言文件的命名规则为源表名_目的表名_源数据库类型_目的数据库类型.xml。优选的,所述方法还包括存放插件的插件描述文件;依据所述插件描述文件中存储的装载插件所需信息,对相应的插件进行注册,并存储相应的插件注册信息;所述装载相应的读取插件和数据交换缓冲插件的步骤,包括将所述配置文件中的数据读取信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化;所述装载相应的写入插件的步骤,包括将所述配置文件中的数据写入信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化。与现有技术相比,本申请具有以下优点首先,本申请依据配置文件进行数据迁移,并且,在数据迁移过程中,利用数据交换缓冲模块临时存储从源地址读取的数据,由于数据交换缓冲模块中的数据立即被取走并写入至目标地址,故整个数据迁移过程无需磁盘中转。因此,相对于现有技术,能够缩短数据迁移的流程,提高数据迁移的性能;另外,在数据迁移流程中,用户无需监控磁盘空间,故也可以减少运维成本。其次,无论数据的源格式如何,本申请都会将读取的数据转换为预先规定的、写入模块能够识别的中间格式,并进行临时存储,从而能够实现对数据的通用缓冲管理,以便写入模块能够依据数据写入信息将该中间格式的数据转换为目标格式,并写入目标地址;所述中间格式使得读取模块和写入模块的功能独立,这样,读取模块和写入模块的开发能够单独进行,既能够快速支持新的异构数据源,又能够降低开发难度和开发成本。再者,本申请还可以采用线程池进行所述多个读取子任务的读取,和/或,多个写入子任务的写入,而任意两个读取/写入子任务之间互不影响,因此能够实现并行读取和/或并行写入,从而能够大大缩短数据迁移流程,同时进一步提高数据迁移性能。进一步,相对于现有技术,在长的数据迁移流程中,用户不仅需要自己衔接上下游过程,对每个过程进行监控,而且还要监控磁盘空间;本申请会在短的数据迁移流程中自动为用户呈现数据迁移的运行参数,例如,当前读取了多少字节数,临时存储了多少字节数,写入了多少字节数,所述呈现使得用户对数据迁移流程一目了然。最后,本申请可以采用框架+插件的结构开发数据迁移系统,作为系统的框架,插件式数据迁移平台相当于一个数据中转平台,而插件则为访问不同类型的数据源(数据库/文件系统)提供实现,支持以插件的形式开发每个数据源的访问功能;这样,用户可以很方便的往插件式数据迁移平台增加新的插件,使插件式数据迁移平台快速支持新的数据库或者文件系统,增强系统的灵活性和扩展性;同时,相对于现有技术,为了访问一个新的数据源,需要大量的人力开发和测试,才能开发一套导入导出工具,而本申请的插件只需较小的工作量和开发成本,因此能够大大降低开发成本。图1是本申请一种数据迁移系统实施例1的结构图;图2是本申请一种企业中数据迁移的示意图;图3是本申请一种数据迁移系统实施例2的结构图;图4是本申请一种数据迁移方法实施例1的流程图;图5是本申请一种数据迁移方法实施例2的流程图。具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。本申请实施例的核心构思之一在于,依据配置文件进行数据迁移,并且,在数据迁移过程中,利用数据交换缓冲模块临时存储从源地址读取的数据,由于数据交换缓冲模块中的数据立即被取走并写入至目标地址,故整个数据迁移过程无需磁盘中转。因此,相对于现有技术,能够缩短数据迁移的流程,提高数据迁移的性能;另外,在数据迁移流程中,用户无需监控磁盘空间,故也可以减少运维成本。参照图1,其示出了本申请一种数据迁移系统实施例1的结构图,具体可以包括配置读取模块101,用于读取数据迁移任务的配置文件,所述配置文件中可以包括有数据读取信息和数据写入信息;读取模块102,用于依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后,写入数据交换缓冲模块;数据交换缓冲模块103,用于临时存储写入的中间格式的数据;及写入模块104,用于从所述数据交换缓冲模块中读取所述中间格式的数据,并依据所述配置文件中的数据写入信息,将所述中间格式的数据转换为目标格式后,写入目标地址。本申请可以适用于任意数据库之间、任意文件系统之间或者任意数据库和文件系统之间的数据迁移。在实际中,本申请可以应用在企业仓库领域、电子商务数据仓库、企业信息集成等领域。参照图2,其示出了本申请一种企业中数据迁移的示意图,由于企业数据仓库用于支撑企业的运营和决策,因而需要企业中各个部门的数据,而各个部门的业务系统由于建设时间不同,决策者不同,往往采用了不同的系统和数据库,如财务系统采用DB2数据库,人力资源系统采用Oracle数据库,销售系统采用MSSQLserver数据库,CRM(客户关系管理系统,CustomerRelationshipManagement)米用HTTP(超文本传输,HyperTextTransferProtocol)接口的数据库,物流系统采用MySQL数据库,等等。因此,这时可以采用本申请将数据从企业业务系统导入到企业数据仓库中。另外,企业数据仓库的数据经过ETL(数据提取、转换和加载,Extraction-Transformation-Loading)过程后,形成了分析型的结果数据,还需要将这些结果数据导出到企业业务系统、采用Oracel数据库的MSTR(MicroStrategy)报表系统或采用MySQL的自建报表系统,或者可视化引擎中形成图表等图形表现形式,供企业经营决策者使用。每一次数据迁移都可以当作一个数据迁移任务,这样,本申请的数据迁移任务具体可以包括在异构数据库之间或者异构文件系统之间或者异构数据库和文件系统之间进行数据迁移的任务。本申请对具体的数据迁移任务不加以限制。关于配置文件本申请实施例采用配置文件来描述每个数据迁移任务的信息。在实际应用中可由一专门的配置模块,依据用户配置生成数据迁移任务的配置文件。在本申请实施例中,优选的是,所述配置文件可以为XML(可扩展标记语言文件,ExtensibleMarkupLanguage)格式,所述可扩展标记语言文件的命名规则可以为源表名_目的表名_源数据库类型_目的数据库类型.xmlο下面以MySQL->HDFS的数据迁移(表示迁移方向)为例,说明配置文件中应该描述数据迁移任务的信息。首先,由于要从mysql数据库读取数据,故需要了解源数据库的ip地址、端口、用户名、密码等数据读取信息,并将这些信息存放在每个数据迁移任务的XML文件中;其次,由于要将数据写入至HDFS系统,故还需要了解数据写入路径、数据目标格式等数据写入信息,并将这些信息存放在每个数据迁移任务的XML文件中。因此,在本申请的一种优选实施例中,所述数据读取信息具体可以包括如下信息中的一种或多种源数据库的IP地址、端口号、库名、登录用户名、登录密码、数据库表名、过滤条件;所述过滤条件可以是在where条件中过滤所需的记录,或者指定拖表所需要的列等等,本申请对具体的过滤条件不加以限制。所述数据写入信息具体可以包括如下信息中的一种或多种数据写入路径、数据目标格式。为了方便用户生成数据迁移任务的配置文件,可通过命令行配置向导生成基本的配置文件。必要时,如果还需深入定制,可以在生成的XML文件基础上进行再次修改。在本申请的一种优选实施例中,针对mysql分库分表较多的情况,可以使用变量达到同一模版支持多个数据迁移任务的目的。具体可以通过如下示例来说明假设需要同步Uic中bmw_USerS这表,而该表的数据量比较大,因此分散在16个库、1024张表中uic_main_0000bmw_users_uic_main_0001bmw_users_uic_main_0002bmw_users_uic_main_0003bmw_users_[O192-0255]uic_main_0004bmw_users_uic_main_0005bmw_users_uic_main_0006bmw_users_uic_main_0007bmw_users_uic_main_0008bmw_users_uic_main_0009bmw_users_uic_main_0010bmw_users_uic_main_00Ilbmw_users_uic_main_00I2bmw_users_uic_main_00I3bmw_users_uic_main_0014bmw_users_uic_main_00I5bmw_users_对于这类表,本优选实施例通常将变化的参数,比如库名和/或表名等作为变量保存在一个通用的配置文件中,然后在运行时,通过定义不同的参数值从而达到一个xml文件多表使用的目的。对应上例,在生成配置文件的过程中,可以将Dtable_name作为表名的变量,将Ddbname作为库名的变量,然后,在运行时为该变量赋值,一种赋值示例如下/home/taobao/datax/bin/datax.py-p"-Dtable_name=bmw_users_-Ddbname=uic_main_0008"job.xml上述不例定位了uic_main_0008bmw_users_这个数据库和数据表作为数据的源地址。关于中间格式无论数据的源格式如何,本申请都会将读取的数据转换为预先规定的、写入模块能够识别的中间格式,并写入数据交换缓冲模块,从而能够实现对数据的通用缓冲管理,以便写入模块能够依据数据写入信息将该中间格式的数据转换为目标格式,并写入目标地址。所述中间格式使得读取模块和写入模块的功能相对独立,使得读取模块和写入模块的开发能够单独进行,这既能够快速支持新的异构数据源,又能够降低开发难度和开发成本。在具体实现中,可以预先规定数组格式,或者Java中Map类格式的中间格式。其中,Map类以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。Map类的接口具体可以包括Map---实现MapMap.Entry—Map的内部类,描述Map中的按键/数值对。SortedMap---扩展Map,使按键保持升序排列当然除了数组格式、Java中Map类格式外,所述中间格式还可以其其它格式,本申请对具体的中间格式不加以限制。关于数据交换缓冲模块103在本申请的一种优选实施例中,所述数据交换缓冲模块103可以为基于双缓冲队列的内存缓冲区。统队列是读取线程和写入线程从同一个队列中存取数据,必然需要互斥访问,在互相同步等待中浪费了宝贵的时间,使队列吞吐量受影响。而双缓冲队使用两个队列,将读写分离,一个队列专门用来读,另一个专门用来写,当读队列空或写队列满时,将两个队列互换。这里为了保证队列的读写顺序,当读队列为空且写队列不为空的时候才允许两个队列互换。在本申请的又一种优选实施例中,所述系统还可以包括读取分解模块,用于在所述读取模块进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;所述读取模块,具体用于在多线程池的读取运行环境下,进行所述多个读取子任务的读取。例如,用户将某张Oracle数据表导入到HDFS文件系统,则所述读取分解模块可以将这张表按行切分为N个区间,假设N=100,则可以将所述100个读取子任务放入队列。又如,如果用户将HDFS文件系统的数据导入至某张Oracle数据表,则所述读取分解模块可以对HDFS文件系统的文件进行分解,本申请对具体的分解过程不加以限制。进一步,在多线程池的读取运行环境下,进行所述多个读取子任务的读取,主要具有如下优点1.线程的重复利用,一个线程完成一个读取子任务求后,会被重新丢回到该线程池,继续等待处理下一个读取子任务;2.线程的创建,假如当前的读取子任务多于当前了处理线程,新的读取子任务得不到处理后,线程池会主动创建新的线程处理新的读取子任务;3.线程的销毁,假如当前的读取子任务比较少,大部分线程处于空闲状态中得不到读取子任务,线程池会主动关闭一些长时间没处理读取子任务的线程,减少资源占用。在具体实现中,所述多线程池中的线程数目可由用户在配置文字中设置,也可具有默认值,例如,上例中可以设置线程数目为40。由于采用线程池进行所述多个读取子任务的读取,任意两个读取子任务之间互不影响,因此能够实现读取子任务的并行读取,从而能够大大缩短数据迁移流程,同时进一步提高数据迁移性能。同理,在本申请的再一种优选实施例中,所述系统还可以包括写入分解模块,用于在所述写入模块将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;所述写入模块,具体用于在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据写入目标地址。对于采用线程池进行所述多个写入子任务的写入,由于写入过程与上述读取过程类似,故在此不作赘述,相互参照即可。由于采用线程池进行所述多个写入子任务的写入,任意两个读取子任务之间互不影响,因此能够实现写入子任务的并行写入,从而能够大大缩短数据迁移流程,同时进一步提高数据迁移性能。在本申请的再一种优选实施例中,所述系统还可以包括监控计数模块,用于在所述读取模块和/或数据交换缓冲模块和/或写入模块的运行过程中,监控相应的运行参数,所述运行参数具体可以包括读取和/或临时存储和/或写入数据的行数和/或字节数。相对于现有技术,在长的数据迁移流程中,用户不仅需要自己衔接上下游过程,对每个过程进行监控,而且还要监控磁盘空间;本申请会在短的数据迁移流程中自动为用户呈现数据迁移的运行参数,例如,当前读取了多少字节数,临时存储了多少字节数,写入了多少字节数,所述呈现使得用户对数据迁移流程一目了然。参照图3,其示出了本申请一种数据迁移系统实施例2的结构图,具体可以包括插件式数据迁移平台301,可以进一步包括插件装载模块311,用于读取数据迁移任务的配置文件,并依据所述配置文件中的数据读取信息和数据写入信息,装载相应的读取插件、写入插件和数据交换缓冲插件;及执行引擎模块312,用于为插件提供运行环境;插件302,可以进一步包括读取插件321,用于依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后,写入数据交换缓冲插件322;数据交换缓冲插件322,用于临时存储读取插件写入的中间格式的数据;及写入插件323,用于从所述数据交换缓冲插件322中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息,将所述中间格式的数据转换为目标格式后,写入目标地址。本实施例2与实施例1的区别在于,采用框架+插件的结构开发数据迁移系统,作为系统的框架,插件式数据迁移平台301相当于一个数据中转平台,而插件302则为访问不同类型的数据源(数据库/文件系统)提供实现。本实施例以插件的形式开发每个数据源的访问功能,具有如下优点1、用户可以很方便地往插件式数据迁移平台301增加新的插件,使插件式数据迁移平台301支持新的数据库或者文件系统;为了访问一个新的数据源,现有技术需要大量的人力开发和测试,才能开发一套导入导出工具,而本申请的插件只需较小的工作量和开发成本;2、插件式数据迁移平台301通过封装插件的控制逻辑,将能够执行数据迁移任务的插件组合在一起,能够在受管理插件中建立其协作关系,进而通过插件实现系统功能。关于插件管理插件管理是插件式数据迁移平台301的核心功能,其主要用于根据插件的描述信息对插件进行统一的管理。管理的主要内容可以包括插件的装载、插件运行环境提供等。在具体实现中,用户可以根据插件式数据迁移平台301定义的接口,自行开发插件。例如,插件可以实现为一个JAR(Java归档文件,JavaArchive)包,用户将此JAR包放入插件式数据迁移平台301定义的plugins(插件)目录下,同时plugins,xml文件中进行注册,就可以使用此插件了。为了说明插件的装载功能,在本申请的一种优选实施例中,所述插件式数据迁移平台301还可以包括插件存放模块,用于存放插件的插件描述文件;插件注册模块,用于依据所述插件描述文件中存储的装载插件所需信息,对相应的插件进行注册,并存储相应的插件注册信息;此时,所述插件装载模块311,可以具体用于将所述配置文件中的数据读取信息、数据写入信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件。所述装载过程具体可以包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化。例如,所述插件描述文件中可以包括基本信息字段plugin、依赖插件信息字段required、功能定义信息字段define和功能实现信息字段implement等,其中,所述基本信息字段plugin存储的信息可以包括插件标识符。在具体实现中,所述插件标识符可以用数据源类型和相应的功能来表示,例如,插件标识符A_0,A代表Oracle数据库,O代表读取数据,又如,插件标识符F_l,F代表IDFS文件系统,O代表与入数据,等等。在实际中,所述插件的初始化可以进一步包括读入所述插件描述文件中的数据信息,将相应插件和插件式数据迁移平台301中其它部分连接在一起等等。本申请对具体的插件初始化和插件装载方案不加以限制。为了说明执行引擎模块312的功能,在本申请的一种优选实施例中,所述插件的功能还可以包括读取分解插件,用于在所述读取插件321进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;此时,所述执行引擎模块312,可以进一步包括并发读取环境提供子模块,用于为所述读取插件321提供多线程池的读取运行环境,由所述读取插件321在所述多线程池的读取运行环境下,进行所述多个读取子任务的读取。同理,在本申请的另一种优选实施例中,所述插件301还可以包括写入分解插件,用于在所述写入插件322将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;此时,所述执行引擎模块312,可以进一步包括并发写入环境提供子模块,用于为所述写入插件322提供多线程池的写入运行环境,由所述写入插件322在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据并发写入目标地址。在本申请的再一种优选实施例中,所述插件式数据迁移平台301还可以具有监控计数功能,相应地,其还可以包括监控计数模块,用于在所述读取插件321和/或数据交换缓冲插件322和/或写入插件323的运行过程中,监控相应的运行参数,所述运行参数具体可以包括读取和/或临时存储和/或写入数据的行数和/或字节数。需要说明的是,在具体实现中,还可以将读取插件321中将读取的数据转换为中间格式的功能集成在专门的第一插件中,也可以将写入插件323中依据所述配置文件中的数据写入信息,将所述中间格式的数据转换为目标格式的功能集成在专门的第二插件中;总之,本领域技术人员可以依据不同的功能分配开发不同的插件,本申请对插件的功能分配和开发不加以限制。另外,还可以在所述插件式数据迁移平台301中设置异常日志模块,用于平台的异常处理和日志记录。其中,所述异常处理可以包括异常对象的定义,也可以包括当异常出现时,根据实际情况封装异常对象产生;所述日志记录可以保存每个数据迁移任务的执行记录,例如,可以保存在平台主目录下的log文件夹下,日志文件可以数据迁移任务的xml配置文件名+"·"+时间戳+".log"为方式命名。对于系统实施例2而言,由于其与系统实施例1基本相似,所以描述的比较简单,相关之处参见系统实施例1的部分说明即可。参照图4,其示出了本申请一种数据迁移方法实施例1的流程图,具体可以包括步骤401、读取数据迁移任务的配置文件,所述配置文件中可以包括有数据读取信息和数据写入信息;步骤402、依据所述配置文件中的数据读取信息,进行数据的读取;步骤403、将读取的数据转换为中间格式,并写入数据交换缓冲模块,其中,所述数据交换缓冲模块可用于临时存储写入的中间格式的数据;步骤404、从所述数据交换缓冲模块中读取所述中间格式的数据;步骤405、依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式,并写入目标地址。在本申请实施例中,优选的是,所述数据读取信息可以包括如下信息中的一种或多种源数据库的IP地址、端口号、库名、登录用户名、登录密码、数据库表名、过滤条件;所述数据写入信息可以包括如下信息中的一种或多种数据写入路径、数据目标格式。在本申请实施例中,优选的是,所述配置文件可以为可扩展标记语言文件,所述可扩展标记语言文件的命名规则可以为源表名_目的表名_源数据库类型_目的数据库类型·xml。在本申请的一种优选实施例中,所述方法还可以包括在进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;此时,所述依据所述配置文件中的数据读取信息,进行数据的读取的步骤可以为,在多线程池的读取运行环境下,进行所述多个读取子任务的读取在本申请的另一种优选实施例中,所述方法还可以包括在所述写入模块将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;相应地,所述写入目标地址的步骤为,在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据写入目标地址。在本申请实施例中,优选的是,所述中间格式可以包括数组格式,或者Java中Map类格式。在本申请实施例中,优选的是,所述数据交换缓冲模块为基于双缓冲队列的内存缓冲区。在本申请的再一种优选实施例中,所述方法还可以包括在所述读取模块和/或数据交换缓冲模块和/或写入模块的运行过程中,监控相应的运行参数,所述运行参数可以包括读取和/或临时存储和/或写入数据的行数和/或字节数。参照图5,其示出了本申请一种数据迁移方法实施例2的流程图,具体可以包括步骤501、依据所述配置文件中的数据读取信息,装载相应的读取插件和数据交换缓冲插件,并向所述读取插件提供相应的运行环境,由所述读取插件依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后写入数据交换缓冲插件,由所述数据交换缓冲插件临时存储读取插件写入的中间格式的数据;步骤502、依据所述配置文件中的数据写入信息,装载相应的写入插件,并向所述写入插件提供相应的运行环境,由所述写入插件从所述数据交换缓冲插件中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。本实施例与实施例1的区别在于,以插件作为访问不同类型的数据源(数据库/文件系统)提供实现,也即以插件的形式开发每个数据源的访问功能;因此,本实施例通过封装插件的控制逻辑,将能够执行数据迁移任务的插件组合在一起,能够在受管理插件中建立其协作关系,进而通过插件实现系统功能。在本申请的一种优选实施例中,所述方法还可以包括存放插件的插件描述文件;依据所述插件描述文件中存储的装载插件所需信息,对相应的插件进行注册,并存储相应的插件注册信息;此时,所述装载相应的读取插件和数据交换缓冲插件的步骤,可以进一步包括将所述配置文件中的数据读取信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程可以包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化;所述装载相应的写入插件的步骤,可以进一步包括将所述配置文件中的数据写入信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程可以包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化。为了说明如何向所述读取插件提供相应的运行环境,在本申请的一种优选实施例中,所述插件还可以包括读取分解插件,用于在所述读取插件进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;此时,所述向所述读取插件提供相应的运行环境的步骤,可以包括为所述读取插件提供多线程池的读取运行环境,由所述读取插件在所述多线程池的读取运行环境下,进行所述多个读取子任务的读取。同理,在本申请的另一种优选实施例中,所述插件还可以包括写入分解插件,用于在所述写入插件将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;此时,所述向所述写入插件提供相应的运行环境的步骤,可以进一步包括为所述写入插件提供多线程池的写入运行环境,由所述写入插在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据并发写入目标地址。对于方法实施例2而言,由于其与方法实施例1基本相似,所以描述的比较简单,相关之处参见方法实施例1的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。以上对本申请所提供的一种数据迁移系统和方法,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。权利要求1.一种数据迁移系统,其特征在于,包括配置读取模块,用于读取数据迁移任务的配置文件,所述配置文件中包括有数据读取信息和数据写入信息;读取模块,用于依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后,写入数据交换缓冲模块;数据交换缓冲模块,用于临时存储写入的中间格式的数据'及写入模块,用于从所述数据交换缓冲模块中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。2.一种数据迁移方法,其特征在于,包括读取数据迁移任务的配置文件,所述配置文件中包括有数据读取信息和数据写入信依据所述配置文件中的数据读取信息,进行数据的读取;将读取的数据转换为中间格式,并写入数据交换缓冲模块,其中,所述数据交换缓冲模块用于临时存储写入的中间格式的数据;从所述数据交换缓冲模块中读取所述中间格式的数据;依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式,并写入目标地址。3.如权利要求2所述的方法,其特征在于,还包括依据所述配置文件中的数据读取信息,装载相应的读取插件和数据交换缓冲插件,并向所述读取插件提供相应的运行环境,由所述读取插件依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后写入数据交换缓冲插件,由所述数据交换缓冲插件临时存储读取插件写入的中间格式的数据;依据所述配置文件中的数据写入信息,装载相应的写入插件,并向所述写入插件提供相应的运行环境,由所述写入插件从所述数据交换缓冲插件中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。4.如权利要求2所述的方法,其特征在于,还包括在进行数据的读取前,将一个数据迁移任务分解成多个读取子任务;所述依据所述配置文件中的数据读取信息,进行数据的读取的步骤为,在多线程池的读取运行环境下,进行所述多个读取子任务的读取。5.如权利要求2所述的方法,其特征在于,还包括在所述写入模块将目标格式的数据写入目标地址前,将一个数据迁移任务分解成多个写入子任务;所述写入目标地址的步骤为,在所述多线程池的写入运行环境下,将与所述多个写入子任务相应的目标格式的数据写入目标地址。6.如权利要求2所述的方法,其特征在于,所述数据交换缓冲模块为基于双缓冲队列的内存缓冲区。7.如权利要求2所述的方法,其特征在于,还包括在所述读取模块和/或数据交换缓冲模块和/或写入模块的运行过程中,监控相应的运行参数,所述运行参数包括读取和/或临时存储和/或写入数据的行数和/或字节数。8.如权利要求2或3所述的方法,其特征在于,所述数据读取信息包括如下信息中的一种或多种源数据库的IP地址、端口号、库名、登录用户名、登录密码、数据库表名、过滤条件;所述数据写入信息包括如下信息中的一种或多种数据写入路径、数据目标格式。9.如权利要求2或3所述的方法,其特征在于,所述配置文件为可扩展标记语言文件,所述可扩展标记语言文件的命名规则为源表名目的表名源数据库类型目的数据库类型·xml。10.如权利要求3所述的方法,其特征在于,还包括存放插件的插件描述文件;依据所述插件描述文件中存储的装载插件所需信息,对相应的插件进行注册,并存储相应的插件注册信息;所述装载相应的读取插件和数据交换缓冲插件的步骤,包括将所述配置文件中的数据读取信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化;所述装载相应的写入插件的步骤,包括将所述配置文件中的数据写入信息,与所述插件注册模块中存储的插件注册信息进行匹配,如果匹配成功,则装载与所述插件注册信息相应的插件,所述装载过程包括依据所述插件描述文件生成相应的插件实例,并根据所述插件实例进行插件的初始化。全文摘要本申请提供了一种数据迁移系统和方法,其中的系统具体包括配置读取模块,用于读取数据迁移任务的配置文件,所述配置文件中包括有数据读取信息和数据写入信息;读取模块,用于依据所述配置文件中的数据读取信息,进行数据的读取,并在将读取的数据转换为中间格式后,写入数据交换缓冲模块;数据交换缓冲模块,用于临时存储写入的中间格式的数据;及写入模块,用于从所述数据交换缓冲模块中读取所述中间格式的数据,并在依据所述配置文件中的数据写入信息将所述中间格式的数据转换为目标格式后,写入目标地址。本申请能够提高数据迁移的性能,降低数据迁移所花费的运维成本和开发成本。文档编号G06F17/30GK102999537SQ20111027878公开日2013年3月27日申请日期2011年9月19日优先权日2011年9月19日发明者王磊申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1