一种把数据源文件中的数据导入到数据库中的方法技术

技术编号:11077018 阅读:107 留言:0更新日期:2015-02-25 15:15
本发明专利技术公开了一种把数据源文件中的数据导入到数据库中的方法,包括以下步骤:A.读取所述数据源文件中的数据;B.把所述数据逐行存入至原始数据队列中;C.设定多个数据处理入库线程;D.通过所述多个数据处理入库线程对所述原始数据队列中的数据进行预处理,并通过所述多个数据处理入库线程把所述预处理后的数据并行地写入到所述数据库中。本发明专利技术通过多线程实现数据并行导入,充分利用了硬件资源,从而提高存储效率,使得数据导入的速度大大提高。

【技术实现步骤摘要】

本专利技术涉及数据存储领域,具体地,本专利技术涉及。
技术介绍
随着应用系统数量的不断增长,大量的数据导入需求随之而生,而现有数据库(例如,INFORMIX,MYSQL等)仅提供简单的按顺序规则的导数工具,其效率和扩展性上不尽如人意。 目前各家银行所使用的数据库大多为INFORMIX数据库,其官方提供的常用数据导入方法有load和dbload两种,但这两种方法在数据处理方面都存在着很大的局限性: 首先,这两种方法的导入速度较慢。以100万行每行27列的数据文件为例:通过load方式把该数据文件导入到数据库中时,任何导入过程中的报错都会造成因数据量过大导致数据库锁资源耗尽而回滚。通过dbload方式把该数据文件导入到数据库中时,其需要耗时184440毫秒。 其次,这两种方法只能对文本文件实施线性读取导入。load和dbload由于是官方提供的工具,因此不可扩展,只能按每行的顺序线性地进行数据导入。 第三,这两种方法的错误输出格式不可自定义。load方法的出错信息被输出在屏幕上,并且一旦发生出错,整批数据均视为出错,程序不再继续处理数据导入。dbload虽然可以自定义错误日志名,但格式是固定的,无法实现自定义。 基于以上原因,急需一种具有较高存储效率的,并且能够克服上述缺陷的,数据导入方法,从而满足大数据量导入的需求。
技术实现思路
随着大数据时代的企业级应用系统,数据迁移或处理变得越发频繁,传统的数据导入方式已经不能满足现有的需求。千万级数据量的导入动辄需要花费几个小时,因此数据的导入效率亟待提高。鉴于此,本专利技术提供了。 本专利技术公开了,包括以下步骤:A.读取所述数据源文件中的数据;B.把所述数据逐行存入至原始数据队列中;C.设定多个数据处理入库线程;D.通过所述多个数据处理入库线程对所述原始数据队列中的数据进行预处理,并通过所述多个数据处理入库线程把所述预处理后的数据并行地写入到所述数据库中。 特别的,所述步骤D具体包括:a.各个所述数据处理入库线程分别从所述原始数据队列中读取预定数量的数据,并逐条进行预处理;b.各个所述数据处理入库线程分别把所述预处理后的数据存入至各自的预处理队列中;c.各个所述数据处理入库线程把所述预处理队列中的数据并行地写入到所述数据库中;d.各个所述数据处理入库线程清空所述预处理队列中的数据;e.各个所述数据处理入库线程分别确认所述原始数据队列中是否还有未处理过的数据:如果存在未处理过的数据,则执行步骤a。 特别的,在所述步骤c具体包括:1.依次从所述预处理队列中提取所述数据;I1.确认所述被提取的数据是否存在错误;当存在错误时,实施步骤: v1.确定所述错误数据在所述预处理队列中的位置; vi1.把所述位置之前的数据写入到所述数据库中; vii1.把所述位置上的错误数据的对象信息写入到出错队列 中; ix.在所述预处理队列中删除所述位置上和之前的数据; X.执行步骤I ; 当不存在错误时:把提取的所述数据写入到所述数据库中。 特别的,所述对象信息包括:位置信息、内容、错误原因。 特别的,还包括步骤:通过出错处理线程来处理所述出错队列。 [0021 ] 特别的,根据用户定义的格式输出所述出错队列中的信息。 特别的,所述原始数据队列的深度和所述预处理队列的深度是可配置化的。 特别的,在步骤a中,基于所述预处理队列的深度来确定所述预定数量。 特别的,所述预处理队列的深度是50。 特别的,所述数据库是符合JDBC规范的数据库。 特别的,所述数据库是INFORMIX数据库或者MYSQL数据库。 综上所述,根据本专利技术所公开的方法具有如下优点: I)本专利技术通过多线程实现数据并行导入,充分利用了硬件资源,从而提高存储效率,使得数据导入的速度大大提高。以100万行每行27列的数据文件为例,通过本专利技术所公开的方法完成数据导入仅需59473毫秒; 2)本专利技术可适用于所有符合JDBC规范的数据库,从而实现跨数据库统一的数据导入处理; 3)本专利技术可按需求个性化对每一行数据进行处理,摆脱数据库自带工具的逐列读取不可扩展的弊端;并且本专利技术可自定义输出结果,例如直接输出屏幕、保存文件、保存数据库等。 【附图说明】 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本专利技术的其它特征、目的和优点将会变得更加明显: 图1示出了根据本专利技术所公开的把数据源文件中的数据导入到数据库中的方法流程图; 图2示出了根据本专利技术所公开的把数据源文件中的数据导入到数据库中的过程示意图; 图3示出了根据本专利技术所公开的数据处理线程把预处理后的数据写入到数据库中的不意图;以及 图4示出了根据本专利技术所公开的处理数据导入出错的方法流程图。 【具体实施方式】 在以下优选的实施例的具体描述中,将参考构成本专利技术一部分的所附的附图。所附的附图通过示例的方式示出了能够实现本专利技术的特定的实施例。示例的实施例并不旨在穷尽根据本专利技术的所有实施例。可以理解,在不偏离本专利技术的范围的前提下,可以利用其他实施例,也可以进行结构性或者逻辑性的修改。因此,以下的具体描述并非限制性的,且本专利技术的范围由所附的权利要求所限定。 以下将结合附图1-4,说明。需要说明的是,尽管附图中以特定顺序描述了方法的步骤,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果,相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。 如图1、2所示,在步骤110中,文件读取模块中的文件读取线程210通过逐行读取的方式从数据源文件200中读取数据。其中,由于在此步骤中的文件读取速度远远大于在后续步骤中数据处理和存储的速度,因此本方案中只设定了一个文件读取线程用以读取数据源文件200中的数据。 在步骤120中,文件读取线程210把从数据源文件200中读取到的数据写入到同时启动的原始数据队列220中。该队列220的深度可以由用户自定义。在一个优选的实施例中,该原始数据队列220的深度可以是根据数据源文件和导入装置的硬件配置来决定的。当数据源文件较大和/或者导入装置的内存较大时,该原始数据队列220的深度可以设定的比较深。在一个具体的实施例中,该原始数据队列220的深度为5000,即:该原始数据队列可以保存5000条行数据。 当原始数据队列220中的数据被后续的线程(数据处理入库线程230)读取之后,该数据将被删除,并且文件读取线程210将从数据源文件200中获取新的数据放入至原始数据队列220中,该过程将被反复实施直至数据源文件200的数据被全部读取完毕。 在步骤130中,在批量入库模块中设定多个数据处理入库线程230,该多个数据处理入库线程230的功能都是相同的。该数据处理入库线程230用于从原始数据队列220中读取数据,并把数据在预处理后写入到数据库240中,该过程将被反复实施直至原始数据队列220中数据都被导入完毕。在本专利技术中,该数据库240是符合JDBC规范的数据库,例如:INFORMIX数据库或者MYSQL数据库。 参见图3,每本文档来自技高网...

【技术保护点】
一种把数据源文件中的数据导入到数据库中的方法,包括以下步骤:A.读取所述数据源文件中的数据;B.把所述数据逐行存入至原始数据队列中;C.设定多个数据处理入库线程;D.通过所述多个数据处理入库线程对所述原始数据队列中的数据进行预处理,并通过所述多个数据处理入库线程把所述预处理后的数据并行地写入到所述数据库中。

【技术特征摘要】
1.一种把数据源文件中的数据导入到数据库中的方法,包括以下步骤: A.读取所述数据源文件中的数据; B.把所述数据逐行存入至原始数据队列中; C.设定多个数据处理入库线程; D.通过所述多个数据处理入库线程对所述原始数据队列中的数据进行预处理,并通过所述多个数据处理入库线程把所述预处理后的数据并行地写入到所述数据库中。2.根据权利要求1所述的方法,其中,所述步骤D具体包括: a.各个所述数据处理入库线程分别从所述原始数据队列中读取预定数量的数据,并逐条进行预处理; b.各个所述数据处理入库线程分别把所述预处理后的数据存入至各自的预处理队列中; c.各个所述数据处理入库线程把所述预处理队列中的数据并行地写入到所述数据库中; d.各个所述数据处理入库线程清空所述预处理队列中的数据; e.各个所述数据处理入库线程分别确认所述原始数据队列中是否还有未处理过的数据:如果存在未处理过的数据,则执行步骤a。3.根据权利要求2所述的方法,其中,在所述步骤c具体包括: 1.依次从所述预处理队列中提取所述数据; I1.确认所述被提取的数据是否存在错误; 当存在错误时...

【专利技术属性】
技术研发人员:王懋成刘迪吴文青
申请(专利权)人:中国建设银行股份有限公司
类型:发明
国别省市:北京;11

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

1