博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
由“大数据量Excel入库高效方式”瞥见“并联系统”之优势
阅读量:5139 次
发布时间:2019-06-13

本文共 891 字,大约阅读时间需要 2 分钟。

使用场景:
        当你有一个Excel文件,需要把其中的数据高速录入到数据库中,文件中包含10万条以上数据。
设计方案:
       我们将整个过程分成三个阶段,A(装载Excel文件)、B(读取Excel文件中的数据)、C(数据入库)。一种方法是常规的,ABC三个阶段顺序执行,直到全部数据入库。入库采用数据库的批量插入操作,以便提高效率。这个方案我使用装载Excel文件较快的fastexcel组件来完成A阶段,实验结果是,我将Excel中的两个Sheet全部13万条数据(每条3列)入库,需花费11秒左右。其中三个阶段耗费时间如下图所示:
          从图中我们看到A阶段几乎不耗费多少时间,如果使用POI组件的话,将耗费最主要的时间,因为其比较复杂,初始化工作较多,我们这里只读Excel,所以采用了fastExcel组件。而B和C阶段耗费时间最多,所以其性能瓶颈就出在这两个阶段。很显然由于先前采用的是单线程执行,所以C阶段必须等待B阶段完成后才能执行,从而影响的性能。如果我们能提早执行C阶段的话,不就可以缩短整个入库时间了吗?非常好的注意,于是采用多线程方案,设计如图所示:
 
         由于A阶段耗费时间极少,且只有一个Excel文件,所以这个过程仍然保持串联方式进行,我们需要并联的部分是B和C阶段,因为这两个阶段才是系统的瓶颈坐在,需要分流负载。比如说:我们将Sheet0工作表交给一个线程,该线程负责该工作表的读取和入库操作。这样,我们系统整个入库阶段的工作就可以提前开始,而不用等到单线程模式下B阶段全部完成才开始了。其余的Sheet类似。注意多线程并不能怎么多的提高数据入库的效率,在这里,只是让数据库提前开始了入库工作,从而也就缩短了整个阶段的时间。
 
         结果实验结果,同样的数据量,入库时间变为7-8秒,比原来有所提高,从而也就提高的效率。
         撰写这篇文章主要是给我们发散一下思维,不要老用以往的定式思维想问题。串联模式容易造成系统性能瓶颈情况下,此时可以考虑系统的并联模式。
原文参见刘彻官方网站:

转载于:https://www.cnblogs.com/liuche/p/3185526.html

你可能感兴趣的文章
语言基础思维导图
查看>>
mysql自动添加时间的方法
查看>>
使用Python编的猜数字小游戏
查看>>
Java 日期时间
查看>>
UVa 540 Team Queue 【STL】
查看>>
BaseAdapter
查看>>
I;P : How to track the achievement event
查看>>
百度网盘如何批量添加音乐播放列表
查看>>
多元函数
查看>>
第一章计算机网络和因特网-day01
查看>>
基于ubuntu的docker安装
查看>>
【模板】文艺平衡树(Splay)
查看>>
DOS批量拷贝本地目录到远程主机(定时执行)
查看>>
vue基于webpack说明
查看>>
React 回忆录(四)React 中的状态管理
查看>>
1076 Forwards on Weibo (30)(30 分)
查看>>
mySQL远程访问
查看>>
访问局域网中机器不能访问
查看>>
Centos 7 Sublime 安装 package control
查看>>
html学习笔记(1)--处理特殊字符以及其他的一些小细节
查看>>