数据导入方法、装置、计算机设备及可读存储介质
技术领域
本发明属于计算机技术领域,更具体地说,是涉及一种数据导入方法、装置、计算机设备及可读存储介质。
背景技术
随着计算机科技的不断发展,信息系统的应用也越来越广泛。在常规的信息系统中,存在着各种各样的数据导入功能,由用户上传需要导入的数据,服务器对数据进行处理后存入数据库,从而实现数据的导入。
现有技术的不足之处在于,在数据量较大的情况下,导入数据往往变得非常缓慢,常常需要等待十几甚至几十分钟才能完成,数据导入效率较低,用户体验较差。
发明内容
有鉴于此,本发明实施例提供一种数据导入方法、装置、计算机设备及可读存储介质,可以解决现有技术中数据导入效率较低的技术问题。
一方面,本发明实施例提供一种数据导入方法,包括:
对待导入的多条数据进行分组,获得多组数据;
将所述多组数据存入缓存;
通过多个线程对缓存中的多组数据进行处理,获得处理结果;
将所述处理结果存入数据库。
可选的,通过多个线程对缓存中的多组数据进行处理,包括:
获取缓存中的每组数据的标识信息;
将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应;
通过每组数据的标识信息对应的线程对该组数据进行处理。
可选的,通过每组数据的标识信息对应的线程对该组数据进行处理,包括:
通过对应的线程对每组线程中的每条数据执行如下操作:对所述数据进行校验;校验成功后,对所述数据进行处理。
可选的,在将所述处理结果存入数据库之后,还包括:
获取校验失败和/或处理失败的数据;
将校验失败和/或处理失败的数据反馈给用户。
可选的,对待导入的多条数据进行分组,获得多组数据,包括:
获取用户上传的表格,所述表格中存储有待导入的数据;
对所述表格进行解析,将所述待导入的数据转换为列表数据;
对所述列表数据进行分组,获得多组数据。
可选的,将校验失败和/或处理失败的数据反馈给用户,包括:
在用户导入的表格中增加一列,在增加的列中,查找校验失败和/或处理失败的数据对应的单元格;
在所述校验失败和/或处理失败的数据对应的单元格中添加所述数据导入失败的原因;
将添加有失败原因的表格推送给用户。
可选的,对待导入的多条数据进行分组,获得多组数据,包括:
若待导入的数据的条数小于第一预设阈值,则按K条一组对待导入的数据进行分组;
若待导入的数据的条数在第一预设阈值与第二预设阈值之间,则将待导入的数据分为M组;
若待导入的数据的条数大于第二预设阈值,则将待导入的数据分为N组;
其中,所述第二预设阈值大于所述第一预设阈值,K、M、N均为大于1的自然数,且M小于N。
另一方面,本发明实施例还提供一种数据导入装置,包括:
获取模块,用于对待导入的多条数据进行分组,获得多组数据;
第一存入模块,用于将所述多组数据存入缓存;
处理模块,用于通过多个线程对缓存中的多组数据进行处理,获得处理结果;
第二存入模块,用于将所述处理结果存入数据库。
可选的,所述处理模块具体用于:
获取缓存中的每组数据的标识信息;
将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应;
通过每组数据的标识信息对应的线程对该组数据进行处理。
可选的,所述处理模块具体用于:
获取缓存中的每组数据的标识信息;
将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应;
通过对应的线程对每组线程中的每条数据执行如下操作:对所述数据进行校验;校验成功后,对所述数据进行处理。
可选的,所述处理模块还用于:
获取校验失败和/或处理失败的数据;
将校验失败和/或处理失败的数据反馈给用户。
可选的,所述获取模块具体用于:
获取用户上传的表格,所述表格中存储有待导入的数据;
对所述表格进行解析,将所述待导入的数据转换为列表数据;
对所述列表数据进行分组,获得多组数据。
可选的,所述处理模块还用于:
获取校验失败和/或处理失败的数据;
在用户导入的表格中增加一列,在增加的列中,查找校验失败和/或处理失败的数据对应的单元格;
在所述校验失败和/或处理失败的数据对应的单元格中添加所述数据导入失败的原因;
将添加有失败原因的表格推送给用户。
可选的,所述获取模块具体用于:
若待导入的数据的条数小于第一预设阈值,则按K条一组对待导入的数据进行分组;
若待导入的数据的条数在第一预设阈值与第二预设阈值之间,则将待导入的数据分为M组;
若待导入的数据的条数大于第二预设阈值,则将待导入的数据分为N组;
其中,所述第二预设阈值大于所述第一预设阈值,K、M、N均为大于1的自然数,且M小于N。
另一方面,本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现上述任一项所述方法的步骤。
另一方面,本发明实施例还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被一个或多个处理器执行时实现上述任一项所述方法的步骤。
本发明实施例提供的数据导入方法、装置、计算机设备及可读存储介质的有益效果在于:与现有技术相比,本发明实施例提供的数据导入方法、装置、计算机设备及可读存储介质,通过对待导入的多条数据进行分组,获得多组数据,将所述多组数据存入缓存,并采用多个线程对缓存中的多组数据进行处理,获得处理结果,再将所述处理结果存入数据库,能够有效提高数据导入效率,无需用户长时间等待,提高了用户体验度。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的数据导入方法的流程图;
图2为本发明实施例二提供的数据导入方法的流程图;
图3为本发明实施例三提供的数据导入方法的流程图;
图4为本发明实施例四提供的数据导入装置的结构框图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
实施例一
本发明实施例一提供一种数据导入方法。图1为本发明实施例一提供的数据导入方法的流程图。如图1所示,本实施例中的数据导入方法,可以包括:
步骤101、对待导入的多条数据进行分组,获得多组数据。
所述待导入的多条数据可以由用户输入,也可以从其它系统或设备获取,例如可以接收信息管理平台发送的多条数据,或者接收传感装置采集到的多条数据。
当获取到待导入的多条数据后,可以对待导入的多条数据进行分组,将多条数据分为多组,其中组数小于条数。如何分组可以根据实际需要来设置。
优选的是,本步骤中的对待导入的多条数据进行分组,获得多组数据,可以包括:
若待导入的数据的条数小于第一预设阈值,则按K条一组对待导入的数据进行分组;若待导入的数据的条数在第一预设阈值与第二预设阈值之间,则将待导入的数据分为M组;若待导入的数据的条数大于第二预设阈值,则将待导入的数据分为N组。
其中,所述第二预设阈值大于所述第一预设阈值,K、M、N均为大于1的自然数,且M小于N。
可以理解的是,在按K条一组对多条数据进行分组时,可能最后一组的数据不足K条。具体的,若待导入的数据的条数小于第一预设阈值,则按K条一组对待导入的数据进行分组,可以包括:
在待导入的数据的条数小于第一预设阈值且大于K时,将数据分为L组,其中L-1组的数据条数为K,剩余一组的数据条数小于或等于K;在待导入的数据的条数小于或等于K时,全部数据为一组。
上述第一预设阈值、第二预设阈值、K、M、N的取值可以根据实际需要设置,尤其可以根据待导入的数据的性质以及计算机设备的处理能力来设置。
可选的,所述第一预设阈值可以为1000,所述第二预设阈值可以为10000,K为100,M为20,N为50。相应的分组方法可以包括:
(1)当待导入的数据小于100条时,不分组。
(2)当待导入的数据大于100条且小于1000条时,100条一组。
(3)当待导入的数据大于1000条且小于10000条时,将数据分为20组。
(4)当待导入的数据大于10000条时,将数据分为50组。
这样,在数据较少时,按照每组固定条数对数据进行分组,在数据较多时,按照固定组数对数据进行分组,能够有效保证线程数保持在一个相对稳定的范围内,提高数据处理的效率和稳定性。
步骤102、将所述多组数据存入缓存。
在分组完成后,可以将各组数据存入缓存。优选的是,所述缓存可以为Redis缓存。Redis缓存是一个开源的、使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供了多种语言的API,具有速度快、支持多种数据类型、适用范围广等优势。
步骤103、通过多个线程对缓存中的多组数据进行处理,获得处理结果。
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
本步骤中,可以从线程池中拿到多个线程,并采用多线程对多组数据进行处理。具体的,每个线程可以处理一组数据,也可以处理多组数据。优选的是,每个线程可以处理一组数据,能够有效地提高处理效率。所述处理可以包括但不限于:对数据进行分析、判断、计算或转换格式等。不同的信息系统可能需要对数据进行不同的业务处理。对待导入的数据进行处理的具体实现方式属于现有技术,此处不再赘述。
优选的是,在对数据进行处理之前,还可以先对数据进行校验,例如校验数据正确性、数据合法性、数据唯一性等,并在校验成功后,再对数据进行处理。
步骤104、将所述处理结果存入数据库。
可以理解的是,本实施例中,是将处理完成后得到的数据即处理结果存入数据库,而不是直接将步骤101中获取的原始数据存入数据库。并且,只有对数据处理成功才能获得处理结果。若对一条数据处理失败,则无法获得对应的处理结果,也无法存入数据库。
在实际应用中,当导入数据时,可以首先将待导入的数据进行分组,并从线程池中选择多个线程,分别对待导入的多组数据进行处理,处理完成后,将所述处理结果存入数据库,由于采用了多线程处理,有效解决了数据导入缓慢、导入时需要用户在导入页面长时间等待的问题,原本需要十几分钟处理完的数据,现在仅需一两分钟即可处理完成。
本实施例提供的数据导入方法,通过对待导入的多条数据进行分组,获得多组数据,将所述多组数据存入缓存,并采用多个线程对缓存中的多组数据进行处理,再将所述处理结果存入数据库,能够有效提高数据导入效率,无需用户长时间等待,提高了用户体验度。
实施例二
本发明实施例二提供一种数据导入方法。本实施例是在实施例一提供的技术方案的基础上,通过各组数据的标识信息来实现多组数据与多个线程一一对应。
图2为本发明实施例二提供的数据导入方法的流程图。如图2所示,本实施例中的数据导入方法,可以包括:
步骤201、对待导入的多条数据进行分组,获得多组数据。
步骤202、将所述多组数据存入缓存。
本实施例中,步骤201至步骤202的具体实现原理与实施例一中的步骤101至步骤102类似,此处不再赘述。
步骤203、获取缓存中的每组数据的标识信息。
步骤204、将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应。
步骤205、通过每组数据的标识信息对应的线程对该组数据进行处理,获得处理结果。
本实施例中,可以利用步骤203至步骤205来实现通过多个线程对缓存中的多组数据进行处理。
具体的,缓冲中的每组数据可以对应一个标识信息,所述标识信息可以为该组数据对应的key,可以为每个key分配一个线程。例如,将待导入的数据分为20组,则可以获取每组数据的key,共计获取20个key,并将20个key传入20个线程,20个key与20个线程为一一对应的关系。
线程在获取到key之后,可以根据key拿到对应的一组数据,并对该组数据进行处理。
进一步地,通过每组数据的标识信息对应的线程对该组数据进行处理,可以包括:通过对应的线程对每组线程中的每条数据执行如下操作:对所述数据进行校验;校验成功后,对所述数据进行处理。
步骤206、将所述处理结果存入数据库。
本实施例中,步骤206的具体实现原理与实施例一中的步骤104类似,此处不再赘述。
本实施例提供的数据导入方法,通过各组数据的标识信息来实现多组数据与多个线程一一对应,使得每个线程处理一组数据,进一步提高了数据处理效率。
实施例三
本发明实施例三提供一种数据导入方法。本实施例是在上述实施例提供的技术方案的基础上,在数据处理完成后,向用户反馈处理失败的数据及失败原因。
图3为本发明实施例三提供的数据导入方法的流程图。如图3所示,本实施例中的数据导入方法,可以包括:
步骤301、对待导入的多条数据进行分组,获得多组数据。
本实施例中,步骤301的具体实现原理可以参见实施例一中的步骤101。
优选的是,对待导入的多条数据进行分组,获得多组数据,可以具体包括:
获取用户上传的表格,所述表格中存储有待导入的数据;对所述表格进行解析,将所述待导入的数据转换为列表数据;对所述列表数据进行分组,获得多组数据。其中,所述表格可以为Excel表格。
具体的,当待导入数据时,用户可以在相关功能页面中,点击导入按钮,然后选择Excel表格文件,点击确定实现数据导入。后台在获取到用户上传的Excel表格后,可以将Excel表格中的数据转换为Java语言中的列表数据即list数据,列表数据能够更加方便地存入缓存。
进一步地,对所述列表数据进行分组,获得多组数据,可以包括:
若待导入的列表数据的条数小于第一预设阈值,则按K条一组对待导入的列表数据进行分组;若待导入的列表数据的条数在第一预设阈值与第二预设阈值之间,则将待导入的列表数据分为M组;若待导入的列表数据的条数大于第二预设阈值,则将待导入的列表数据分为N组;其中,所述第二预设阈值大于所述第一预设阈值,K、M、N均为大于1的自然数,且M小于N。
步骤302、将所述多组数据存入缓存。
本实施例中,步骤302的具体实现原理可以参见实施例一中的步骤102,此处不再赘述。
步骤303、通过多个线程分别对缓存中的多组数据进行校验和处理,获得处理结果。
具体的,针对每一条数据,可以利用对应的线程对其进行校验,校验成功后,再对所述数据进行处理。
步骤304、将所述处理结果存入数据库。
步骤305、获取校验失败和/或处理失败的数据。
步骤306、将校验失败和/或处理失败的数据反馈给用户。
本实施例中,在处理完成后,除了将所述处理结果存入数据库,还可以将失败的数据反馈给用户。具体的,可以将失败的数据以及对应的失败原因反馈给用户,所述失败原因可以为校验不通过、数据重复导入或数据格式错误等。
在步骤301中通过表格获取待导入的数据的情况下,步骤306中的将校验失败和/或处理失败的数据反馈给用户,可以包括:
在用户导入的表格中增加一列,在增加的列中,查找校验失败和/或处理失败的数据对应的单元格;在所述校验失败和/或处理失败的数据对应的单元格中添加所述数据导入失败的原因;将添加有失败原因的表格推送给用户。
具体的,在数据处理完成后,可以在用户导入的Excel表格中增加一列用于填写失败原因,在校验失败和/或处理失败的数据所在的行与增加的列所形成的单元格中,填写校验失败和/或处理失败的原因,方便用户根据原因及时改正数据。用户可以在查看导入结果的页面中,查询自己之前的导入历史记录,还可以根据Excel表格中给出的导入失败的原因,对数据进行修复并重新导入失败部分。
反馈给用户的表格中可以包括处理成功(即处理结果已经存入数据库)的数据和处理失败的数据,仅在处理失败的数据后增加失败原因,处理成功的数据不作处理。用户可以根据失败原因对处理失败的数据进行修改,在修改完成后,删除处理成功的数据并重新上传表格。
或者,反馈给用户的表格中可以仅包括处理失败的数据,不包括处理成功的数据。用户在对处理失败的数据进行修改后,可以直接上传表格,完成之前处理失败的数据的重新导入。
添加有失败原因的表格可以通过多种方式推送给用户,例如可以在数据处理完毕后直接打开所述表格显示给用户失败原因,也可以设计下载按键,用户可以通过点击下载按键来自主下载所述表格。
本实施例提供的数据导入方法,在处理完成后,向用户反馈处理结果,同时告知用户处理失败的原因,无需用户在导入过程中一直关注处理进度,方便用户根据失败的原因对数据进行修改并重新上传,提高了数据上传的整体效率,为用户提供了便利。
实施例四
本发明实施例四提供一种数据导入装置。图4为本发明实施例四提供的数据导入装置的结构框图。如图4所示,本实施例中的数据导入装置,可以包括:
获取模块401,用于对待导入的多条数据进行分组,获得多组数据;
第一存入模块402,用于将所述多组数据存入缓存;
处理模块403,用于通过多个线程对缓存中的多组数据进行处理,获得处理结果;
第二存入模块404,用于将所述处理结果存入数据库。
本实施例中的数据导入装置,可以用于执行上述任一实施例所述的数据导入方法,其具体实现原理可以参见上述任一实施例,此处不再赘述。
本实施例提供的数据导入装置,通过对待导入的多条数据进行分组,获得多组数据,将所述多组数据存入缓存,并采用多个线程对缓存中的多组数据进行处理,再将所述处理结果存入数据库,能够有效提高数据导入效率,无需用户长时间等待,提高了用户体验度。
可选的,所述处理模块403具体可以用于:
获取缓存中的每组数据的标识信息;
将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应;
通过每组数据的标识信息对应的线程对该组数据进行处理。
可选的,所述处理模块403具体可以用于:
获取缓存中的每组数据的标识信息;
将缓存中多组数据的标识信息分别传入多个线程,其中,所述多组数据的标识信息与所述多个线程一一对应;
通过对应的线程对每组线程中的每条数据执行如下操作:对所述数据进行校验;校验成功后,对所述数据进行处理。
可选的,所述处理模块403还可以用于:
获取校验失败和/或处理失败的数据;
将校验失败和/或处理失败的数据反馈给用户。
可选的,所述获取模块401具体可以用于:
获取用户上传的表格,所述表格中存储有待导入的数据;
对所述表格进行解析,将所述待导入的数据转换为列表数据;
对所述列表数据进行分组,获得多组数据。
可选的,所述处理模块403还可以用于:
获取校验失败和/或处理失败的数据;
在用户导入的表格中增加一列,在增加的列中,查找校验失败和/或处理失败的数据对应的单元格;
在所述校验失败和/或处理失败的数据对应的单元格中添加所述数据导入失败的原因;
将添加有失败原因的表格推送给用户。
可选的,所述获取模块401具体可以用于:
若待导入的数据的条数小于第一预设阈值,则按K条一组对待导入的数据进行分组;
若待导入的数据的条数在第一预设阈值与第二预设阈值之间,则将待导入的数据分为M组;
若待导入的数据的条数大于第二预设阈值,则将待导入的数据分为N组;
其中,所述第二预设阈值大于所述第一预设阈值,K、M、N均为大于1的自然数,且M小于N。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如上述任一实施例所述方法的步骤。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被一个或多个处理器执行时实现上述任一实施例所述方法的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。