掌桥专利:专业的专利平台
掌桥专利
首页

基于多线程的数据导入方法、系统及存储介质

文献发布时间:2023-06-19 10:06:57


基于多线程的数据导入方法、系统及存储介质

技术领域

本发明涉及大数据处理技术,尤其涉及一种基于多线程的数据导入方法、系统及存储介质。

背景技术

在大数据时代,需要导入的数据量越来越大。数据导入功能是应用系统里除手工输入的另一个数据输入的入口,针对的是大批量数据的输入到系统,比起手工输入效率有着很大的提升,减少人工机械性地重复输入。

现有技术中的数据导入流程为,先把全部文件中的消息数据一次性读取进系统内存中,然后循环进行每一行数据的转换,数据校验以及数据入库。

但是,如果需要导入的数据量过大,存在的弊端如下:

1)系统一次性读取消息数据导致内存溢出风险;

2)导入过程非常缓慢,如果需要导入的数据为数十万条,则导入时间需要40min以上,提升处理速度的。

所以,亟需一种可以提高导入效率的大量数据导入方法。

发明内容

本发明提供一种基于多线程的数据导入方法、系统及计算机可读存储介质,其主要解决大量数据导入数据库时,导入效率低下的问题。

为实现上述目的,本发明提供一种基于多线程的数据导入方法,应用于电子装置,所述方法包括:

通过读取主线程获取消息数据,并将所述消息数据放入队列缓存池中;

通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的所述消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验;

各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将所述处理成功数据放入阻塞队列一,将所述处理失败数据放入阻塞队列二;其中,

当所述阻塞队列一的数据量达到所述阻塞队列一的消息数量阈值,则通过写入线程一读取所述阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;同时,当所述阻塞队列二的数据量达到所述阻塞队列二的消息数量阈值,则通过写入线程二读取所述阻塞队列二的所述处理失败数据,将所述处理失败数据导入数据库中。

进一步,可选的,在所述通过读取主线程获取消息数据,并将所述消息数据放入队列缓存池中的步骤之后,还包括队列缓存池消息数量判定过程,所述队列缓存池消息数量判定过程包括:

判定所述队列缓存池的消息数量是否达到队列缓存池的消息数量阈值;

若是,则读取主线程停止读取文件,进入通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据步骤;

若否,则读取主线程继续获取消息数据,并将所获取的消息数据放入所述队列缓存池。

进一步,可选的,在所述读取主线程通过读取文件获取消息数据之前,还包括数据量判定过程;所述数据量判定过程包括:

若判定所述文件的消息数据总量小于所述队列缓存池的消息数量阈值,则所述读取主线程直接读取所述文件的全部消息数据,并对所读取的消息数据进行数据转化和数据校验;

将校验合格的消息数据导入数据库中。进一步,可选的,所述队列缓存池的消息数量阈值根据实际服务器内存和处理数据的速度进行设定。

进一步,可选的,所述读取主线程读取文件的方式包括read_table函数和read_csv函数;其中,所述read_table函数用于读取文本文件;所述read_csv函数用于读取csv、tsv、txt、xls和xlsx文件。

进一步,可选的,在各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据的步骤中,所述校验条件为非空校验、身份证号码规则校验和手机号码规则校验中的一种或几种。

为实现上述目的,本发明提供一种基于多线程的数据导入系统,包括消息数据获取单元、数据校验单元、阻塞队列读取单元和消息数据导入单元;其中,

所述消息数据获取单元,用于读取主线程通过读取文件获取消息数据,将所获取的消息数据放入队列缓存池中;

所述数据校验单元,用于通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的所述消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验;

所述阻塞队列读取单元,各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将所述处理成功数据放入阻塞队列一,将所述处理失败数据放入阻塞队列二;所述消息数据导入单元,用于当阻塞队列一的数据量达到阻塞队列一的消息数量阈值,则通过写入线程一读取阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;当阻塞队列二的数据量达到阻塞队列二的消息数量阈值,则写入线程二读取阻塞队列二的所述处理成功数据,将所述处理成功数据导入数据库。

进一步,可选的,所述消息数据获取单元包括读取模块、队列缓存池存入模块和判定模块;所述读取模块,用于读取主线程通过读取文件获取消息数据;队列缓存池存入模块,用于将所述读取模块获取的消息数据放入队列缓存池中;所述判定模块,用于判定所述队列缓存池的消息数量是否达到队列缓存池的消息数量阈值;若是,则读取主线程停止读取文件,进入通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据步骤;若否,则读取主线程继续获取消息数据,并将所获取的消息数据放入所述队列缓存池。

为实现上述目的,本发明还提供一种电子装置,该电子装置包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的程序,所述程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的基于多线程的数据导入方法的步骤。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,实现上述的基于多线程的数据导入方法的步骤。

本发明提出的基于多线程的数据导入方法、系统、电子装置及计算机可读存储介质,通过设置队列缓存池和阻塞队列,将读取主线程从文件里读取到队列缓存池里,N个线程把数据从队列缓存池里读取并对数据进行校验,分为失败数据与成功数据两个数据写入线程,完成数据对数据库的数据导入。有益效果如下:

1)、本发明的基于多线程的数据导入方法通过设置队列缓存池和阻塞队列,将读取主线程从文件里读取到队列缓存池里,N个线程把数据从队列缓存池里读取并对数据进行校验,通过失败数据与成功数据两个数据写入线程,完成数据对数据库的数据导入;能够在确定系统稳定的情况下充分地利用系统资源;

2)、本发明的基于多线程的数据导入方法通过将耗时的处理步骤异步化,将整个过程拆分为多个独立的子功能,由各个子线程独立处理,处理过程清晰化,减少后期维护的工作量;

3)、实现了整个数据导入的处理速度的倍增,并且能够直观地了解到处理的进度,用户体验得到了很大的提升,提高用户的满意度。

附图说明

图1为本发明的基于多线程的数据导入方法的一实施例的流程图;

图2为本发明的基于多线程的数据导入方法的一实施例原理示意图;

图3为本发明的基于多线程的数据导入系统的一实施例的逻辑结构示意图;

图4为本发明的电子装置的实施例的结构示意图;

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明通过设置队列缓存池和阻塞队列,将读取主线程从待读取文件里读取消息数据到队列缓存池里,然后通过N个读取子线程把所述消息数据从队列缓存池里读取并对所述消息数据进行校验;将校验后的消息数据分为处理成功数据和处理失败数据,然后通过写入线程一和写入线程二分别将所述处理成功数据和所述处理失败数据导入数据库。通过充分地利用系统资源,将耗时的处理步骤异步化,将整个过程拆分为多个独立的子功能,由各个子线程独立处理,处理过程清晰化,从而提高了数据导入的效率。

为了提高用户编码效率,本发明提供一种基于多线程的数据导入方法。图1示出了本发明基于多线程的数据导入方法的实施例的流程。参照图1所示,该方法可以由一个装置执行,该装置可以由软件和/或硬件实现。

基于多线程的数据导入方法包括:步骤S110-步骤S140。

S110、通过读取主线程获取消息数据,并将所述消息数据放入队列缓存池中。

线程是数据导入进程内部的一个执行单元,每个线程有自己的一组CPU寄存器和堆栈。而建立数据导入进程后,实际上就启动执行了该进程的主线程,主线程以函数地址形式(比如说main或WinMain函数)将程序的启动点提供给Windows系统,若主线程终止,则进程也就随之终止。具体地说,通过pthread_create()函数,创建线程。而这里的主线程是一种读取线程。

所述队列缓存池的消息数量阈值根据实际服务器内存和处理数据的速度进行设定。其中,队列缓存池的消息数量阈值是通过设定一次读取的数据量,从而避免服务器内存溢出,进而保证数据的处理效率。

在一个具体的实施例中,在S110的步骤中,还包括队列缓存池消息数量判定过程。

所述队列缓存池的消息数量判定过程包括:判定所述队列缓存池的消息数量是否达到队列缓存池的消息数量阈值;若是,则读取主线程停止读取文件,进入通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的所述消息数据步骤;若否,则读取主线程继续获取所述消息数据,并将所获取的消息数据放入所述队列缓存池。

实现方式为:先获取锁;用while循环检测元素个数是否等于items长度,如果相等,表示当前的队列缓存池满了,调用notFull的await()方法阻塞读取主线程;否则调用enqueue()方法读取主线程继续读取消息数据,最后解锁。从而实现读取主线程会一直读取信息数据,直到达到设定的阈值数。若达到了设定的阈值数,即缓存队列中没有空间了,读取主线程被阻断,即会停止读取信息数据。直到缓存队列中,有了空位读取主线程才会继续读取。

也就是说,将待导入的消息数据的一部分存入队列缓存池中,这里的队列缓冲池以及阻塞队列一和阻塞队列二均是阻塞队列,若该阻塞队列数据满了,则停止继续读取数据,直到队列数据有空位时,才会继续读取。其中,该阻塞队列为Synchronous Queue、ArrayBlocking Queue和Linked Blocking Queue中的一种。

在具体的实施过程中,将队列缓存池的消息数量阈值设定为2000-5000行。所述读取主线程读取文件的方式包括read_table函数和read_csv函数;其中,所述read_table函数用于读取文本文件;所述read_csv函数用于读取csv、tsv、txt、xls和xlsx文件。

在一个具体的实施例中,为了当对待导入的文件的数据量总量较小的情况时,也能实现正常进行数据导入。在读取主线程通过读取文件获取消息数据步骤之前,还包括数据量判定过程。在所有操作之前,进行数据总量判定,当待导入的文件的消息数据总量小于队列缓存池的消息数量阈值的时候,若按照原始程序,系统因为队列缓存池未达到队列缓存池的消息数量阈值,会一直返回读取,无法进行导入程序。比如说,当文件中的消息总量仅有1500条,未达到设定的2000条。则无法使用该系统进行数据导入。也就是说,例如,如果将队列缓存池的消息数量阈值设定为5000;则,主线程读取先读取5000条数据,若消息数据总数少于5000条,则主线程将会处理完所有的导入流程。若总的消息数据的量大于5000条,则继续进行下一步。

具体地说,所述数据量判定过程的具体步骤包括:判定所述待读取文件的消息数据总量是否小于所述队列缓存池的消息数量阈值;

若是,则读取主线程直接读取所述文件的全部消息数据,并对所读取的消息数据进行数据转化和数据校验;将所述校验合格的消息数据导入数据库中;

若否,则执行上述基于多线程的数据导入方法。

具体的实现方式为:先获取锁drainTo();用while循环检测元素个数是否小于items长度,如果小于,表示不需要调用读取子线程;调用notFull的await()方法阻塞读取子线程;一次性从待读取文件中获取所有可用的数据对象,最后解锁。从而实现通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。

总的来说,通过设置队列缓存池的消息数量阈值实现通过设定一次读取的数据量,大道避免服务器内存溢出,进而保证数据的处理效率的技术效果;而通过设置数据量判定过程,解决待导入的文件的消息数据总量小于队列缓存池的消息数量阈值的时候,若按照原始程序,系统因为队列缓存池未达到队列缓存池的消息数量阈值,会一直返回读取,无法进行导入程序的问题。

S120、通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的所述消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验。

在具体地实施过程中,在多线程运行的情况下,若线程是并发的,则会出现一个线程把自己的数据还没有写完,另外的线程已经开始写了,进而导致整个内存区产生混乱。具体地说,数据写入进度信息包括:线程传递文件是否已经读取完毕的信号给子线程,子线程传递是否有异常需中断处理、处理进度等消息给主线程。

因此,线程信息同步是必须的。也就是说,因此在子线程和主线程之间均设置通信接口。进而可以让所有子线程把各自的数据写入进度信息同步给主线程。具体地说,里面的多线程实现方式是通过Callable接口实现。

在具体的实施过程中,通过设置通信接口建立消息通知机制,进而实现整个数据导入过程中的状态信息同步,进而准确把控数据导入过程中的每个节点。也就是说基于上述的通信接口功能,子线程反馈自身的处理进度给主线程,这样主线程就知道子线程的工作情况,进一步的,前端用户可通过查看导入结果列表,了解数据导入情况,也就是说上述处理状态进度也可以实时地反馈给用户。

通过线程池设置了N个子读取线程,将线程数量控制在一定的数量范围之内,避免因线程过多导致系统异常。子线程的设置数量,用户可以根据自己的服务器性能以及业务需要在系统配置里进行调整。其中,子线程的实现监听读取并分批调用插入数据接口。

在一个具体的实施例中,通过设置线程的最大生命周期来进行线程管理,以实现CPU在多条线程之间切换;具体地说,就是为线程的运行状态设定时间阈值,当到达时间阈值时,将该线程结束运行。这里的生命周期有两个约束条件:一是该参数针对的是超过corePoolSize数量的线程;二是处于非运行状态的线程。例如:如果corePoolSize(最小线程数)为10,maxinumPoolSize(最大线程数)为20,而此时线程池中有15个线程在运行,过了一段时间后,其中有3个线程处于等待状态的时间超过keepAliveTime指定的时间,则结束这3个线程,此时线程池中则还有12个线程正在运行。

在具体的实施过程中,由于使用了全局变量,要记录是哪一个线程在调用函数,每个函数需要一个额外的参数来记录线程的名字;例如another_func函数需要一个threadName参数,如果调用的函数多了,则每一个都需要一个这样的参数。

S130、各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将所述处理成功数据放入阻塞队列一,将所述处理失败数据放入阻塞队列二。

其中,在各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据的步骤中,所述校验条件为非空校验、身份证号码规则校验和手机号码规则校验中的一种或几种。

具体地说,这里的校验条件是根据实际的业务需要所设定的,比如业务方导入的内容需要做校验,比如门店号,商品号等是否系统存在,需要程序校验。所述校验条件包括:非空校验、身份证号码规则和手机号码规则中的一种或几种。校验条件被预先配置在所述数据库中,采用自动触发或手动触发方式将所述规则校验的规则信息导入到所述缓存档中。

S140、当阻塞队列一的数据量达到阻塞队列一的消息数量阈值,则通过写入线程一读取阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;当阻塞队列二的数据量达到阻塞队列二的消息数量阈值,则通过写入线程二读取阻塞队列二的所述处理失败数据,将所述处理失败数据导入数据库。

写入线程一和写入线程二对于阻塞队列一和阻塞队列二的监控的具体实现方式为:

将阻塞队列一中的数据读取到写入线程一自身的数据列表中,然后根据数据列表数量是否达到设定的每批次插入数据库的行数,若达到了,则执行步骤S140。每5000行,提交一次批量插入,放置一次提交的数据过多,给数据库过大的压力。

总之,通过设定阻塞队列的消息数量阈值(即每批次插入数据库的行数)以减少请求数据库网络时带来的性能损耗,从而达到提高插入数据库的效率的技术效果。

具体地说,将消息数据插入数据库,是将数据信息批量的插入数据库相关的业务表或者错误信息表中。在一个具体的实施例中,具体的导入方式可以为用Excel导入。

在一个具体的实施例中,在S110步骤执行之前,还包括待导入文件的预处理步骤,所述的待导入文件的预处理步骤包括:

为了处理待导入文件的列与数据库之间的匹配关系,在用户触发导入后,直接调用导入数据进程,然后对所述数据文件进行列配置的查找,所述数据文件通过列配置与数据库相匹配。

本发明的基于多线程的数据导入方法通过设置队列缓存池和阻塞队列,将读取主线程从文件里读取到队列缓存池里,N个线程把数据从队列缓存池里读取并对数据进行校验,通过失败数据与成功数据两个数据写入线程,完成数据对数据库的数据导入;能够在确定系统稳定的情况下充分地利用系统资源;实现了整个数据导入的处理速度的倍增,并且能够直观地了解到处理的进度,用户体验得到了很大的提升,提高用户的满意度。

图2示出了本发明基于多线程的数据导入方法的原理示意图。参照图2所示,

本发明的一种基于多线程的数据导入方法的原理。

对于待导入文件要先进行一个数据量判定过程;数据量判定过程的具体步骤包括:判定所述文件的消息数据总量是否小于所述队列缓存池的消息数量阈值;若是,则读取主线程直接读取所述文件的全部消息数据,并对所读取的消息数据进行数据转化和数据校验;将所述校验合格的消息数据导入数据库中;若否,则执行下述基于多线程的数据导入方法。

读取主线程通过读取文件获取消息数据,将所获取的消息数据放入队列缓存池中;

执行队列缓存池消息数量判定过程,所述队列缓存池消息数量判定过程包括:

判定所述队列缓存池的消息数量是否达到队列缓存池的消息数量阈值;

若是,则读取主线程停止读取文件,进入通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据步骤;

若否,则返回继续读取主线程继续获取消息数据,并将所获取的消息数据放入所述队列缓存池。

通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验;

各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将符合预先设定的校验条件的作为所述处理成功数据,并把处理成功数据放入阻塞队列一;将不符合预先设定的校验条件的作为所述处理失败数据,并把处理失败数据放入阻塞队列二;

当阻塞队列一的数据量达到阻塞队列一的消息数量阈值,则通过写入线程一读取阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;当阻塞队列二的数据量达到阻塞队列二的消息数量阈值,则通过写入线程二读取阻塞队列二的所述处理失败数据,将所述处理失败数据导入数据库。

总之,本发明的基于多线程的数据导入方法通过设置队列缓存池和阻塞队列,实现数据的多线程数据导入,充分地利用系统资源;将耗时的处理步骤异步化,将整个过程拆分为多个独立的子功能,由各个子线程独立处理,处理过程清晰化,从而提高了数据导入的效率。

图3为本发明的基于多线程的数据导入系统的逻辑结构示意图;参照图3所示,

为实现上述目的,本发明提供一种基于多线程的数据导入系统300,包括消息数据获取单元310、数据校验单元320、阻塞队列读取单元330和消息数据导入单元340;其中,

所述消息数据获取单元310,用于读取主线程通过读取文件获取消息数据,将所获取的消息数据放入队列缓存池中;

所述数据校验单元320,用于通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验;

所述阻塞队列读取单元330,各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将所述处理成功数据放入阻塞队列一,将所述处理失败数据放入阻塞队列二;

所述消息数据导入单元340,用于当阻塞队列一的数据量达到阻塞队列一的消息数量阈值,则通过写入线程一读取阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;当阻塞队列二的数据量达到阻塞队列二的消息数量阈值,则通过写入线程二读取阻塞队列二的所述处理成功数据,将所述处理成功数据导入数据库。

在一个具体的实施例中,所述消息数据获取单元310包括读取模块311、队列缓存池存入模块312和判定模块313。

所述读取模块311,用于读取主线程通过读取文件获取消息数据;队列缓存池存入模块312,用于将所述读取模块获取的消息数据放入队列缓存池中;所述判定模块313,用于判定所述队列缓存池的消息数量是否达到队列缓存池的消息数量阈值;若是,则读取主线程停止读取文件,进入通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的消息数据步骤;若否,则读取主线程继续获取消息数据,并将所获取的消息数据放入所述队列缓存池。

本发明的基于多线程的数据导入系统通过设置队列缓存池和阻塞队列,实现数据的多线程数据导入,充分地利用系统资源;将耗时的处理步骤异步化,将整个过程拆分为多个独立的子功能,由各个子线程独立处理,处理过程清晰化,从而提高了数据导入的效率。

本发明提供一种基于多线程的数据导入方法,应用于一种电子装置4。

图4示出了根据本发明基于多线程的数据导入方法一实施例的应用环境。

参照图4所示,在本实施例中,电子装置4可以是服务器、智能手机、平板电脑、便携计算机、桌上型计算机等具有运算功能的终端设备。

该电子装置4包括:处理器42、存储器41、通信总线43及网络接口44。

存储器41包括至少一种类型的可读存储介质。所述可读存储介质可以是非易失性的,也可以是易失性的。所述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器41等的非易失性存储介质。在一些实施例中,所述可读存储介质可以是所述电子装置4的内部存储单元,例如该电子装置4的硬盘。在另一些实施例中,所述可读存储介质也可以是所述电子装置4的外部存储器41,例如所述电子装置4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。

在本实施例中,所述存储器41的可读存储介质通常用于存储安装于所述电子装置4的基于多线程的数据导入程序40等。所述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。

处理器42在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器51中存储的程序代码或处理数据,例如执行基于多线程的数据导入程序40等。

通信总线43用于实现这些组件之间的连接通信。

网络接口44可选地可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该电子装置4与其他电子设备之间建立通信连接。

图4仅示出了具有组件41-44的电子装置4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

可选地,该电子装置4还可以包括用户接口,用户接口可以包括输入单元比如键盘(Keyboard)、语音输入装置比如麦克风(microphone)等具有语音识别功能的设备、语音输出装置比如音响、耳机等,可选地用户接口还可以包括标准的有线接口、无线接口。

可选地,该电子装置4还可以包括显示器,显示器也可以称为显示屏或显示单元。在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。显示器用于显示在电子装置4中处理的信息以及用于显示可视化的用户界面。

可选地,该电子装置4还可以包括射频(Radio Frequency,RF)电路,传感器、音频电路等等,在此不再赘述。

在图4所示的装置实施例中,作为一种计算机存储介质的存储器41中可以包括操作系统、以及基于多线程的数据导入程序40;处理器42执行存储器41中存储的基于多线程的数据导入程序40时实现如下步骤:读取主线程通过读取文件获取消息数据,将所获取的消息数据放入队列缓存池中;通过两个以上的读取子线程从所述队列缓存池中同时读取设定数量的所述消息数据;各读取子线程并行对本线程所读取的所述消息数据进行数据转化和数据校验;各读取子线程将本线程内的校验合格的消息数据按照是否符合预先设定的校验条件分为处理成功数据和处理失败数据;将所述处理成功数据放入阻塞队列一,将所述处理失败数据放入阻塞队列二;当阻塞队列一的数据量达到阻塞队列一的消息数量阈值,则通过写入线程一读取阻塞队列一的所述处理成功数据,将所述处理成功数据导入数据库;当阻塞队列二的数据量达到阻塞队列二的消息数量阈值,则通过写入线程二读取阻塞队列二的所述处理失败数据,将所述处理失败数据导入数据库。

在其他实施例中,基于多线程的数据导入程序40还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器41中,并由处理器42执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序程序段。基于多线程的数据导入程序40可以分为消息数据获取单元310、数据校验单元320、阻塞队列读取单元330和消息数据导入单元340。

此外,本发明还提出一种计算机可读存储介质,主要包括存储数据区和存储程序区,其中,存储数据区可存储根据区块链节点的使用所创建的数据等,存储程序区可存储操作系统、至少一个功能所需的应用程序,所述计算机可读存储介质中包括基于多线程的数据导入方法程序,所述基于多线程的数据导入方法程序被处理器执行时实现如基于多线程的数据导入方法的操作。

本发明之计算机可读存储介质的具体实施方式与上述基于多线程的数据导入方法、系统、电子装置的具体实施方式大致相同,在此不再赘述。

总的来说,本发明基于多线程的数据导入方法、系统、电子装置及计算机可读存储介质,通过设置队列缓存池和阻塞队列,将读取主线程从文件里读取到队列缓存池里,N个线程把数据从队列缓存池里读取并对数据进行校验,通过失败数据与成功数据两个数据写入线程,完成数据对数据库的数据导入;能够在确定系统稳定的情况下充分地利用系统资源;通过将耗时的处理步骤异步化,将整个过程拆分为多个独立的子功能,由各个子线程独立处理,处理过程清晰化,减少后期维护的工作量。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干程序用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

相关技术
  • 基于多线程的数据导入方法、系统及存储介质
  • 基于数据可变的数据导入方法、系统、设备及存储介质
技术分类

06120112423047