一种数据导入方法、装置、服务平台及存储介质

文档序号:1904486 发布日期:2021-11-30 浏览:15次 >En<

阅读说明:本技术 一种数据导入方法、装置、服务平台及存储介质 (Data import method, device, service platform and storage medium ) 是由 王晋花 朱柯见 卢家顺 刘志文 付裕 吕达 于 2020-05-25 设计创作,主要内容包括:本申请实施例公开了一种数据导入方法、装置、服务平台及存储介质。该方法包括:确定待导入数据文件的目标存储节点;拆分所述待导入数据文件,得到预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。上述技术方案在拆分得到的数据子文件的数量达到预设数量时导入目标存储节点,使得拆分与导入并发执行,提高了数据文件的导入效率。(The embodiment of the application discloses a data import method, a data import device, a service platform and a storage medium. The method comprises the following steps: determining a target storage node of a data file to be imported; and splitting the data file to be imported, and importing the data file to be imported into the target storage node to obtain a preset number of data subfiles until the data file to be imported is split and imported. According to the technical scheme, when the number of the data subfiles obtained by splitting reaches the preset number, the target storage nodes are imported, so that splitting and importing are carried out concurrently, and the importing efficiency of the data files is improved.)

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。此外,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

图1为本申请实施例提供的一种数据导入方法的流程图,本实施例可适用于将外部业务系统提供的数据文件导入数据库的情况,尤其是将大数据量的数据文件导入分布式数据库,该方法可以由数据导入装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成在数据导入服务平台中,其中,数据导入服务平台可以是具备处理功能的智能终端或服务器。参考图1,该方法包括如下步骤:

S110、确定待导入数据文件的目标存储节点。

待导入数据文件可以是外部业务系统提供,需要由数据导入服务平台导入分布式数据库系统的数据文件,本实施例待导入数据文件的类型不进行限定,一般情况下,待导入数据文件的数据量和数量较大。在一种情况下,外部业务系统可以通过FTP(文件传输协议,File Transfer Protocol)协议或其他文件传输协议如SFTP(安全文件传输协议,SSH FileTransfer Protocol)协议将需要导入的数据文件预先存放至数据导入服务平台的指定位置。目标存储节点可以是存储数据文件的数据库或数据库中的某个具体存储位置。目标存储节点的数量可以是一个或多个,同一个待导入数据文件对应的目标存储节点可以是一个或多个。

在一种情况下,待导入数据文件和目标存储节点可以根据用户通过用户端发送的数据导入请求确定。数据导入请求可以包括但不限于待导入数据文件对应的IP地址以及待导入的数据库标识信息等,其中,待导入数据文件对应的IP地址为待导入数据文件在数据导入服务平台的存放位置,根据IP地址可以获取待导入的数据文件。数据库标识信息用于唯一标识存放数据文件的数据库,例如可以是数据库对应的编号,每一个数据库对应一个唯一的编号。用户端可以是手机、笔记本电脑或平板电脑等智能终端。在另一种情况下,待导入数据文件和目标存储节点可以根据外部业务系统发送的数据导入请求确定,确定过程与前面类似。

S120、拆分所述待导入数据文件,得到预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。

信息业务的发展带来了数据量的与日俱增,也因此加大了数据文件的数据量,在将其导入数据库时对系统造成了较大的压力。为了降低导入压力,本实施例对待导入的数据文件进行拆分。在一种情况下,可以逐个拆分待导入数据文件,得到多个数据子文件。在另一种情况下,可以批量拆分待导入数据文件,得到多个数据子文件。批量拆分是同时拆分多个待导入数据文件,为了提高效率,本实施例以批量拆分待导入数据文件为例。批量拆分的数量可以自行设定。

在一种情况下,可以根据待导入数据文件的大小将其拆分为多个数据子文件,例如待导入数据文件的大小为100M,可以将其拆分为N个数据子文件,这N个数据子文件的大小可以相同也可以不同,N的大小可以固定,也可以根据待导入数据文件的大小动态调整,例如待导入数据文件的数据量较大时,N较大,待导入数据文件的数据量较小时,N较小。在另一种情况下,可以根据待导入数据文件的行数将其拆分为多个数据子文件,例如可以将待导入数据文件按照由前到后的顺序,每5000行拆分为一个数据子文件。数据子文件的行数可以预先设置。需要说明的是,当待导入数据文件剩余的行数小于预先设置的行数时,可以直接将剩余的行数作为一个数据子文件。在有数据导出需求时,为了保证导出数据文件的完整性,在拆分数据文件时,可以对拆分的每一个数据子文件按照内容的完整性进行编号,例如将待导入数据文件按照由前到后的顺序拆分为5个数据子文件,则可以将这5个数据子文件分别编号为A-1、A-2、A-3、A-4、A-5,A用于唯一标识待导入的数据文件,拼接A-1、A-2、A-3、A-4和A-5即可得到完整的数据文件。

数据子文件的导入方式可以根据实际情况选择,例如可以在待导入数据文件全部拆分完毕后再执行导入过程,也可以在拆分的过程中伴随导入,为了提高导入效率,本实施例以后者为例,即采用拆分与导入并发的方式实现数据文件的存储。在导入数据子文件时,可以逐个导入也可以批量导入,本实施例以批量导入为例,当数据子文件的数量达到预设数量时,将预设数量的数据子文件同时导入目标存储节点,与逐个导入的方式相比,批量导入可以减少导入次数,节省时间。本实施例对预设数量不进行限定,例如可以设置为100,即数据子文件的数量每达到100,便将这100个数据子文件导入目标存储节点。需要说明的是,当剩余数据子文件的数量小于预设数量时,直接导入目标存储节点。

本申请实施例提供一种数据导入方法,通过确定待导入数据文件的目标存储节点;拆分所述待导入数据文件,得到预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。该方法在拆分得到的数据子文件的数量达到预设数量时导入目标存储节点,使得拆分与导入并发执行,提高了数据文件的导入效率。

图2为本申请实施例提供的另一种数据导入方法的流程图。

S210、获取数据导入请求,所述数据导入请求包括地址信息、库信息和表信息。

数据导入请求可以由用户通过用户端发送,用户端可以是手机、笔记文电脑或平板电脑等智能终端。本实施例的数据导入请求以包括地址信息、库信息和表信息为例。地址信息用于标识待导入数据文件的存放位置,不同的存放位置对应不同的地址信息,根据地址信息可以获取待导入的数据文件。库信息可以是存储数据子文件的库的名称、编号等信息。表信息可以是存储数据子文件的表的名称、编号等信息,该表位于前面所述的库中,一个库中可以包含多个表,不同的表具有唯一的标识信息。也就是说数据子文件最终需要导入到指定库的指定表中。

S220、根据所述地址信息,获取所述待导入数据文件。

根据地址信息,查找数据导入服务平台,即可获取待导入的数据文件。

S230、根据所述库信息和表信息,确定目标数据库,并将所述目标数据库记为所述待导入数据文件的目标存储节点。

目标数据库为包含上述库信息对应的库以及表信息对应的表的数据库,本实施例的数据库中可以包含多个库,为了便于描述,可以将数据库中包含的库称为子数据库,也就是说同一个数据库中可以包含多个子数据库,每一个子数据库中可以包含多个表,以存储数据子文件。不同的数据库还可以位于一个数据库集群中,数据库集群可以是包含多个数据库的集群,也可以是包含多个数据库集群的集合,实施例对数据库集群所包含的数据库或数据库集群的数量不进行限定。遍历各数据库集群,即可得到包含上述子数据库信息和表信息的数据库,也即得到了目标数据库。当包含子数据库信息和表信息的数据库为多个时,还可以根据待导入数据文件的列字段计算目标数据库,实施例对具体的计算过程不进行限定。

S240、校验所述待导入数据文件。

通常情况下,待导入数据文件的结构与目标数据库中用于存储数据文件的表的结构一致才可以保证数据子文件导入成功。为此本实施例在拆分待导入数据文件之前先对待导入数据文件进行校验,避免直接拆分待导入数据文件,执行导入操作后发现数据子文件的结构与目标数据库中用于存储数据文件的表的结构不一致而无法导入的情况,提高导入效率。

在一种情况下可以通过如下方式校验所述待导入数据文件:

根据所述表信息,确定所述目标存储节点中所述表信息对应的结构信息;

根据所述结构信息,校验所述待导入数据文件的数据行;

如果所述待导入数据文件中各数据行的列字段信息与所述结构信息一致,则校验成功;否则,校验失败。

表信息对应的结构信息可以包括表的列名和每一列对应的类型等信息。只有当待导入数据文件中待导入数据每一列的列名和类型与目标数据库中所对应表的列名和每一列的类型一致时,才可以将待导入数据文件成功导入对应的表中。在一种情况下可以读取待导入数据文件的每一行,然后利用目标数据库中所对应表的结构信息校验该行所对应的列字段是否正确,直至该行结束。这种方式可以检查行数据是否错误。

在另一种情况下还可以检查列数据是否错误,过程与检查行数据类似。

S250、是否校验成功,如果是,执行S260,否则,执行S280。

S260、根据配置文件中拆分文件的参数信息拆分所述待导入数据文件,得到数据子文件。

如果校验成功,执行拆分操作,拆分待导入数据文件。拆分文件的参数信息是拆分待导入数据文件的依据,例如可以是拆分文件的行数或拆分文件的大小,本实施例以拆分文件的行数为例,即将待导入数据文件的每N行拆分为一个数据子文件,当行数不足N时,可以直接将当前行数作为一个数据子文件。

S270、当所述数据子文件的数量达到预设数量时,将预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。

本实施例在数据子文件的数量达到预设数量时,采用批量导入的方式提高了导入效率,并且在执行导入操作时,拆分操作继续,使得拆分与导入并发执行,进一步提高了导入效率。实施例对预设数量的大小不进行限定,例如可以设置为100,即数据子文件的数量达到100时,将其导入目标存储节点。

S280、将校验失败的待导入数据文件导入错误文件缓存。

错误文件缓存用于存储校验失败的数据文件,在一种情况下可以将校验失败的整个待导入数据文件导入错误文件缓存,也可以仅将待导入数据文件中校验失败的数据行导入至错误文件缓存。将校验失败的数据导入错误文件缓存,可以保证数据不丢失,确保大数据量文件导入数据库的准确性。

S290、汇总数据文件导入结果,并反馈给对应的用户端。

数据文件导入结果可以包括校验结果以及导入结果,校验结果可以包括校验失败的数据行以及校验失败的原因,导入结果可以包括导入成功的数据子文件的标识信息、导入失败的数据子文件的标识信息以及导入失败的数据子文件。可以理解的是,即使前期校验成功,在执行导入操作时也会因为某种原因导致导入失败,在首次出现导入失败时,还可以对该数据子文件进行导入重试,重试次数可自行设置。将汇总后的数据文件导入结果反馈给用户端可以使用户清楚的了解各数据文件的导入情况。

本申请实施例提供一种数据导入方法,在上述实施例的基础上先校验待导入数据文件,校验成功后,再执行拆分和导入的并发操作,提高了导入效率,并将校验失败的数据文件存储至错误文件缓存,保证了数据不丢失,确保了大数据量文件导入数据库的准确性。

数据文件的拆分与导入是数据导入服务平台的核心,下面结合一个生产者消费者模型对数据文件的拆分与导入过程进行描述。

图3为本申请实施例提供的一种基于生产者消费者模型的数据文件拆分与导入的过程示意图。

协调线程根据接收的数据导入请求创建生产者线程和消费者线程,消费者线程作为数据导入服务平台的发送线程,用于发送拆分文件。发送线程通过协调线程启动后,等待允许发送的条件变量通知,也可以称为阻塞于条件变量,条件变量即上述实施例所述的数据子文件的预设数量,发送线程收到通知后检查是否有预设数量的数据子文件产生,若有则发送,否则继续阻塞等待通知。生产者线程作为数据导入服务平台的拆分线程,用于拆分待导入数据文件,拆分线程启动后进入循环拆分模式,拆分过程如下:获取待导入数据文件,按照表元数据缓存对待导入数据文件的每个列字段顺序分析,例如先读取待导入数据文件,获取一行中的一个列字段,利用元数据校验该列字段是否正确,如此顺序分析每一个列字段直至一行结束。其中,表元数据缓存为用于存储表的元数据的存储装置,元数据即与上述实施例所述的表的结构信息匹配的数据,元数据的结构即为目标数据库所对应表的结构,利用元数据可以校验待导入数据文件的列字段是否正确。校验之后,拆分线程根据预先配置的拆分文件的行数拆分待导入数据文件,当拆分文件的数量达到预设数量时,通知发送线程发送拆分文件,拆分线程继续拆分,拆分线程与发送线程并发执行,提高了数据导入性能。发送线程收到通知后,将拆分好的数据子文件发送出去并继续检查是否有需要发送的数据子文件,重复发送结束后继续阻塞等待发送通知。协调线程确定待导入数据文件拆分结束后,设置拆分结束标签,并通知发送线程和拆分线程退出。发送线程收到通知后,先发送已拆分文件,再检查拆分线程是否拆分结束,若结束则向协调线程发送内部事件指示拆分阶段结束。

上述拆分线程和发送线程采用了以条件变量通知的生产者消费者模型,实现了按批次数据分发与数据导入的解耦并发。该模型同时支持数据切片功能,即可将一个大数据文件按照拆分行数进行拆分,形成多个小文件,使数据导入功能具有更好的灵活性以适用于更多的应用场景,如数据库某存储节点扩容、对导入文件只获取指定分片数据等。具体过程如图4所示。

协调线程根据接收的拆分命令启动拆分线程后返回。拆分线程启动后进入循环拆分模式,每拆分一个批次就发送一次通知,此处虽然无发送线程在等待通知,但该设计并不影响拆分继续进行。拆分线程结束后,设置文件拆分结束标志,并向协调线程发送内部事件指示拆分阶段结束。

下面通过两个具体的应用场景对数据导入过程进行描述。

应用场景一:分布式数据库并发导入

如图5所示,分布式数据库并发导入系统的结构包括分布式数据库平台1和数据导入服务平台2。其中,分布式数据库平台1是现有分布式数据库的实体与核心,主要负责数据存储与系统状态的管理和监控。分布式数据库平台1包含存储节点11、存储节点管理监控模块12、元数据服务模块13以及数据库集群管理模块14。元数据服务模块13负责向数据导入服务平台2提供数据库表的元数据信息,并负责提供鉴权服务。分布式数据库系统中所有元数据信息都由其保存和管理,为其他模块提供其所需要的元数据信息。存储节点监控管理模块12负责实时监控对应存储节点11的运行状态与统计信息。在数据导入过程中,负责连接数据库节点,执行数据导入服务平台2下发的导入命令,同时为存储节点11提供服务响应、文件收发、状态反馈等服务。存储节点11用于存储数据。图5中以三个存储节点管理监控模块12和三个存储节点11为例。每一个存储节点管理监控模块12可以监控多个存储节点11。

数据导入服务平台2提供从外部业务系统到分布式数据库平台1的批量数据导入服务,如图5所示,数据导入服务平台2包括文件处理模块21、文件分发模块22和状态统计模块23,文件处理模块21和文件分发模块22是使用条件变量通知的生产者消费者模型实施的基础。文件处理模块21用于提供与外部业务系统的数据交换接口、接收用户通过用户端发送的数据导入请求以及对待导入数据文件进行拆分等。文件分发模块22用于通知存储节点管理监控模块12,进行文件下发。

参考图6,图6为本申请实施例提供的一种在应用场景一下的数据导入过程示意图。外部业务系统将大数据量的待导入数据文件通过FTP或其他文件传输协议存放至数据导入服务平台的指定位置。图6以通过外部业务系统发送数据导入请求为例,数据导入服务平台收到数据导入请求后,根据数据导入请求中的集群号、库名和表名等信息向元数据服务模块发送元数据获取请求信息,获取表名对应的表结构信息,并根据表结构信息校验待导入数据文件;以及根据集群号、库名和表名等信息确定目标存储节点。之后进入拆分过程,根据预先配置的拆分文件的行数拆分待导入数据文件,当拆分数量达到预设数量时,向数据库集群管理模块发送数据导入请求,数据库集群管理模块将数据导入请求转发给存储节点管理监控模块,存储节点管理监控模块收到数据导入请求后连接数据库节点执行数据子文件的下载、导入,最终将数据子文件导入至数据库的指定表中。存储节点管理监控模块执行结束后,将下载状态统计上报,并向数据库集群管理模块返回数据导入结果,数据库集群管理模块收到数据导入结果后转发给数据导入服务平台,数据导入服务平台汇总各节点的数据文件导入结果,并反馈给外部业务系统。

应用场景二:异构数据库之间的数据迁移

本申请实施例提供的数据导入方法不仅可以适用于需要频繁导入数据的分布式数据库系统,还可以适用于仅使用数据切片进行数据库某存储节点扩容的场景,具有普适性和灵活性。

现代化企业运营中,随着企业规模的扩大和业务的升级,原有的数据中心的架构体系、系统性能及存储容量逐渐不能满足业务的需要,因此需要进行企业信息系统的改造和升级,而数据迁移是其中非常重要的环节。图7所示的异构数据库之间的数据迁移系统以包括oracle数据库31、迁移系统32和mysql数据库33为例,将数据文件从oracle数据库31迁移到mysql数据库33。

具体的,通过迁移系统32的管理界面321发起一个数据迁移任务,信息采集模块322向oracle数据库31采集需要迁移的数据信息,包括迁移起止时间、迁移数据元表结构等,并将相关信息保存到存储模块323中。分析模块324对信息采集模块322采集的信息进行分析校验,通过转换工具将迁移数据元表结构转化成mysql数据库支持的语法结构,并保存到存储模块323中。迁移模块325执行从oracle数据库31到mysql数据库33的数据迁移时,导入过程与上述实施例提供的数据导入方法原理相同,即通过生产者消费者模型并发执行数据文件的拆分与发送,快速导入mysql数据库33,完成数据迁移任务。数据切片实现的多个小文件并发导入相比单一文件导入,性能显著提升。

图8为本申请实施例提供的一种数据导入装置的结构图,该装置可以执行上述实施例提供的数据导入方法,参考图8,该装置包括:

节点确定模块41,用于确定待导入数据文件的目标存储节点;

第一导入模块42,用于拆分所述待导入数据文件,得到预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。

本申请实施例提供的数据导入装置,通过确定待导入数据文件的目标存储节点;拆分所述待导入数据文件,得到预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。该装置在拆分得到的数据子文件的数量达到预设数量时导入目标存储节点,使得拆分与导入并发执行,提高了数据文件的导入效率。

在上述实施例的基础上,该装置还包括:

校验模块,用于在拆分所述待导入数据文件之前,校验所述待导入数据文件。

在上述实施例的基础上,节点确定模块41,具体用于:

获取数据导入请求,所述数据导入请求包括地址信息、库信息和表信息;

根据所述地址信息,获取所述待导入数据文件;

根据所述库信息和表信息,确定目标数据库,并将所述目标数据库记为所述待导入数据文件的目标存储节点。

在上述实施例的基础上,第一导入模块42,具体用于:

如果校验成功,根据配置文件中拆分文件的参数信息拆分所述待导入数据文件,得到数据子文件;

当所述数据子文件的数量达到预设数量时,将预设数量的数据子文件导入所述目标存储节点,直至所述待导入数据文件拆分且导入完毕。

在上述实施例的基础上,所述校验模块,具体用于:

根据所述表信息,确定所述目标存储节点中所述表信息对应的结构信息;

根据所述结构信息,校验所述待导入数据文件的数据行;

如果所述待导入数据文件中各数据行的列字段信息与所述结构信息一致,则校验成功;否则,校验失败。

在上述实施例的基础上,该装置还包括:

第二导入模块,用于如果校验失败,将校验失败的待导入数据文件导入错误文件缓存。

在上述实施例的基础上,该装置还包括:

汇总模块,用于在所述待导入数据文件拆分且导入完毕之后,汇总数据文件导入结果,并反馈给对应的用户端。

本申请实施例提供的数据导入装置可执行上述实施例中的数据导入方法,具备执行方法相应的功能模块和有益效果。

图9为本申请实施例提供的一种数据导入服务平台的结构图。

参考图9,该数据导入服务平台包括处理器51、存储器52、输入装置53和输出装置54,该数据导入服务平台中处理器51的数量可以是一个或多个,图9中以一个处理器51为例。处理器51与存储器52、输入装置53和输出装置54可以通过总线或其他方式连接,图9中以通过总线连接为例。

存储器52作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请实施例中数据导入方法对应的程序指令/模块。处理器51通过运行存储在存储器52中的软件程序、指令以及模块,从而执行数据导入服务平台的各种功能应用以及数据处理,即实现上述实施例的数据导入方法。

存储器52主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器52可进一步包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至数据导入服务平台。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置53可用于接收输入的数字或字符信息,以及产生与数据导入服务平台的用户设置以及功能控制有关的键信号输入。输出装置54可包括显示屏等显示设备、扬声器以及蜂鸣器等音频设备。

本申请实施例提供的数据导入服务平台与上述实施例提供的数据导入方法属于同一构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行数据导入方法相同的有益效果。

本申请实施例还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请上述实施例所述的数据导入方法。

当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的数据导入方法中的操作,还可以执行本申请任意实施例所提供的数据导入方法中的相关操作,且具备相应的功能和有益效果。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是机器人,个人计算机,服务器,或者网络设备等)执行本申请上述实施例所述的数据导入方法。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于PDF文件的知识元抽取方法、设备及介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!