一种分布式环境中大批量导出数据的方法技术

技术编号:17467506 阅读:33 留言:0更新日期:2018-03-15 05:01
本发明专利技术公开了一种分布式环境中大批量导出数据的方法,针对传统导出数据的不足进行改进,采用先使用多线程单表查询,再将查询到的数据使用多线程再次进行表查询,从而达到加快数据导出速度,缩短用户等待时间的效果。本发明专利技术采用多次使用多线程的技术,缩短用户等待时间的同时降低数据库服务器以及应用服务器的负载。

【技术实现步骤摘要】
一种分布式环境中大批量导出数据的方法
本专利技术涉及数据处理
,特别涉及一种分布式环境中大批量导出数据的方法。
技术介绍
随着软件的不断升级,需求逐渐增多传统的设计方式已经不能满足业务需求。因此必定采用分布式开发方式,将业务进行拆分。数据库层设计采用多库,多表进行设计。云平台运营人员或企业管理人员需要随时对运营数据进行导出分析。虽然软件开发者能根据数据分析人员的需求开发出满足要求的功能。但是从需求提出到上线使用中间会经历需求分析、概要设计、代码编写、测试、修改bug、发布等一系列繁琐的过程。然而,市场往往是风云变幻的,机会也是随着时间转瞬即逝的,因此,及时分析运营数据成为每位网站运营者的必修课。日常工作中,运营者更习惯于导出成Excel表格对数据进行各种可视化操作。因此导出大批量数据便成了开发者需要面临的问题。传统架构采用单数据库,单服务器模式。直接查询导出成Excel就可以了。但是在分布式环境中在使用传统的方式将不能导出大量数据。分布式环境主要面临的问题是数据库采用多库的方式设计。传统的方式可以对数据库进行联合查询而分库后将不能进行联合查询。由上可以看出在分布式环境中采用传统的方式进行导出,用户必定面临长时间等待,系统也将面临M*N的查询问题(M是查询的数据条数,N是涉及到的表)。例如在导出一万条数据,涉及到3张表。将会对数据库查询3万次。在并发量比较高的情况下,数据库必然会崩溃。因此,传统的导出表的方式不利于提升数据导出速度及减少数据库查询时间。
技术实现思路
本专利技术的目的是克服上述
技术介绍
中不足,提供一种分布式环境中大批量导出数据的方法,采用先使用多线程单表查询,再将查询到的数据使用多线程再次进行表查询,从而有效加快数据导出速度,缩短用户等待时间。为了达到上述的技术效果,本专利技术采取以下技术方案:一种分布式环境中大批量导出数据的方法,包含以下步骤:A.web前端发送需要导出的数据的条件,通过聚合查询出满足用户需要导出的数据条数,计算每一个线程完成多少条数据查询;B.创建一个实现java.util.concurrent.Callable接口线程,所述接口线程用于分页获取订单表的数据;C.根据服务器的配置情况创建线程池,将查询任务加入到线程池中,且为每个所述线程池预设最佳线程数目,根据线程池的调度策略,自动调用查询任务,进行订单表的数据查询,并将查询获取的订单表的数据保存至第一文件中;D.对数据进行联合查询,建立与订单表一一对应的查询任务,并对单表查询出的数据进行内存分页,并将查询出的数据采用Map的形式存储在内存中,获取key值及value值,其中,所述key值为订单数据的id值,value值为关联表需要获取到的数据值;E.将所述第一文件中的数据与步骤D中获取的Map形式的数据进行组装,组合出符合导出要求的List集合,并将List集合存到第二文件中;F.对第二文件中的数据进行解析,采用IO流的形式获取数据,并将数据写入到Excel文件中;G.给Excel文件预设一个Excel条数上限值,在步骤F中将数据写入到Excel文件中时,若写入的Excel条数到达所述Excel条数上限值时,则将存储在内存中的Map的形式的数据写入到硬盘中;H.使用http协议,往web前端的http请求的响应输出流中写入文件数据,完成大批量数据导出。进一步地,所述步骤B中获取订单表的数据时,具体为在Service层中封装好查询数据的方法、调用jpa,使用sql语句进行查询,在controller层中通过传分页参数和查询条件到Service层以获取分页查询的数据。进一步地,所述步骤C中为所述线程池预设最佳线程数目时采用以下计算方式:最佳线程数目=(线程等待时间/线程CPU时间+1)*CPU数目。进一步地,所述步骤C中所述线程池的调度策略为:首先运行加入到线程池中的线程,当线程数目超过预设的线程数目时,多余的线程在等待队列中排队等待运行。进一步地,所述步骤E中的导出要求为:要求导出的数据中至少包含订单信息、创建人信息、公司信息。进一步地,所述步骤G中将数据写入到Excel文件中时,主要使用的是POI的SXSSFWorkbook。本专利技术与现有技术相比,具有以下的有益效果:在本专利技术的一种分布式环境中大批量导出数据的方法中,其处理逻辑为多次使用多线程,将io的等待时间缩到最短;其中,使用多线程单表查询,再将查询到的数据使用多线程再次进行表查询,能有效加快数据导出速度,缩短用户等待时间,同时还有利于降低数据库服务器以及应用服务器的负载。附图说明图1是本专利技术的一种分布式环境中大批量导出数据的方法的一个实施例的处理流程示意图。具体实施方式下面结合本专利技术的实施例对本专利技术作进一步的阐述和说明。实施例:如图1所示,一种分布式环境中大批量导出数据的方法,具体包含以下流程步骤:S101:web前端发送需要导出的数据的条件;S102:web前端将带有导出条件的数据获取请求发到后台接口对应的controller方法中,再根据导出条件查询出需导出的总数据条数;S103:根据查询的总条数计算需要分为多少个线程进行单表导出,计算时,线程数=总条数/每个线程导出的总条数,每个线程能完成的总条数通过程序测试最大负载能查询多少条即可,将创建好的多个线程即查询任务放到线程池中,进行订单表的数据查询。S104:将查询获取到的订单表的大数据量存入到文件系统中,并再次计算需要多少个线程完成数据组装。例如一个订单导出的需求中,Excel里面希望能看看到订单信息,创建人信息,公司信息,这三个信息分别存放在三个数据库的三个表中,首先查询出订单数据后将订单数据存放到文件系统A中,然后取出订单ID存入到List中,因为还有两个表需要查询,因此还需要创建两个线程池,使用获取订单的方式去获取创建人信息和公司信息,获取到后分别使用两个Map存储获取到的创建人信息和公司信息。其中,一个线程完成一个批次数据组装,启动一起线程的同时启动数据关联的数据表对应的线程。每个关联线程使用In查询批量查询数据,再组装成Excel希望的格式,例如Excel中有订单信息,创建人信息,公司信息,则将已有的三部分数据组装成一行。S105:使用流的形式读取文件中的数据,将读取到的数据写入到Excel表格中,在Excel表格中设置一个存储条数阀值,当到达存储条数阀值的时候自动将数据写入到硬盘中,如此循环便完成批量数据导出到Excel中,再使用http协议往web前端的http请求的响应输出流中写入文件数据,完成大批量数据导出。可以理解的是,以上实施方式仅仅是为了说明本专利技术的原理而采用的示例性实施方式,然而本专利技术并不局限于此。对于本领域内的普通技术人员而言,在不脱离本专利技术的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本专利技术的保护范围。本文档来自技高网...
一种分布式环境中大批量导出数据的方法

【技术保护点】
一种分布式环境中大批量导出数据的方法,其特征在于,包含以下步骤:A.web前端发送需要导出的数据的条件,通过聚合查询出满足用户需要导出的数据条数,计算每一个线程完成多少条数据查询;B.创建一个实现java.util.concurrent.Callable接口线程,所述接口线程用于分页获取订单表的数据;C.根据服务器的配置情况创建线程池,将线程即查询任务加入到线程池中,且为每个所述线程池预设最佳线程数目,根据线程池的调度策略,自动调用查询任务,进行订单表的数据查询,并将查询获取的订单表的数据保存至第一文件中;D.对数据进行联合查询,建立与订单表一一对应的查询任务,并对单表查询出的数据进行内存分页,并将查询出的数据采用Map的形式存储在内存中,获取key值及value值,其中,所述key值为订单数据的id值,value值为关联表需要获取到的数据值;E.将所述第一文件中的数据与步骤D中获取的Map形式的数据进行组装,组合出符合导出要求的List集合,并将List集合存到第二文件中;F.对第二文件中的数据进行解析,采用IO流的形式获取数据,并将数据写入到Excel文件中;G.给Excel文件预设一个Excel条数上限值,在步骤F中将数据写入到Excel文件中时,若写入的Excel条数到达所述Excel条数上限值时,则将存储在内存中的Map的形式的数据写入到硬盘中;H.使用http协议,往web前端的http请求的响应输出流中写入文件数据,完成大批量数据导出。...

【技术特征摘要】
1.一种分布式环境中大批量导出数据的方法,其特征在于,包含以下步骤:A.web前端发送需要导出的数据的条件,通过聚合查询出满足用户需要导出的数据条数,计算每一个线程完成多少条数据查询;B.创建一个实现java.util.concurrent.Callable接口线程,所述接口线程用于分页获取订单表的数据;C.根据服务器的配置情况创建线程池,将线程即查询任务加入到线程池中,且为每个所述线程池预设最佳线程数目,根据线程池的调度策略,自动调用查询任务,进行订单表的数据查询,并将查询获取的订单表的数据保存至第一文件中;D.对数据进行联合查询,建立与订单表一一对应的查询任务,并对单表查询出的数据进行内存分页,并将查询出的数据采用Map的形式存储在内存中,获取key值及value值,其中,所述key值为订单数据的id值,value值为关联表需要获取到的数据值;E.将所述第一文件中的数据与步骤D中获取的Map形式的数据进行组装,组合出符合导出要求的List集合,并将List集合存到第二文件中;F.对第二文件中的数据进行解析,采用IO流的形式获取数据,并将数据写入到Excel文件中;G.给Excel文件预设一个Excel条数上限值,在步骤F中将数据写入到Excel文件中时,若写入的Excel条数到达所述Excel条数上限值时,则将存储在内...

【专利技术属性】
技术研发人员:李波岳永胜
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川,51

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

1