使用场景:
        当你有一个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秒,比原来有所提高,从而也就提高的效率。
         撰写这篇文章主要是给我们发散一下思维,不要老用以往的定式思维想问题。串联模式容易造成系统性能瓶颈情况下,此时可以考虑系统的并联模式。

由“大数据量Excel入库高效方式”瞥见“并联系统”之优势的更多相关文章

  1. POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

    1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...

  2. [转]POI大数据量Excel解决方案

    全文转载自:jinshuaiwang的博客 目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本.另外一种是Apach ...

  3. POI读写大数据量EXCEL

    另一篇文章http://www.cnblogs.com/tootwo2/p/8120053.html里面有xml的一些解释. 大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较 ...

  4. POI3.8解决导出大数据量excel文件时内存溢出的问题

    POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用.SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入 ...

  5. 大数据量情况下高效比较两个list

    比如,对两个list<object>进行去重,合并操作时,一般的写法为两个for循环删掉一个list中重复的,然后再合并. 如果数据量在千条级别,这个速度还是比较快的.但如果数据量超过20 ...

  6. C#读取大数据量Excel

    var worksheet = workbook.Worksheets["工作表1"]; var maxN = worksheet.Range["A1"].En ...

  7. python3 修改大数据量excel内容

    最好使用python3 64位 对excel的修改操作: from openpyxl import load_workbook import time #打开一个excel表格.xlsx wb = l ...

  8. POI 读写大数据量 EXCEL

    参考:https://www.cnblogs.com/tootwo2/p/6683143.html

  9. 使用OPENROWSET、Microsoft.ACE.OLEDB实现大数据量的高效导入

    首先说明使用的环境是:java和Sqlserver. 最近公司需要进行大数据量的导入操作.原来使用的是Apache POI,虽然可以实现功能,但是因为逻辑处理中需要进行许多校验,处理速度太慢,使用多线 ...

随机推荐

  1. <转+改>Web测试中关于登录的测试

    请问,你为自己写过的用例怀疑过吗? 前两天听一个朋友说他同事写了100个用例,结果有92个是无效的,差点被公司开了,本人以前也写过不少用例,但现在忽然怀疑我的用例了,觉得越来越糊涂了,拿登陆框来说吧, ...

  2. 【转】linux mknod命令解析

    转自:http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html 个人觉得linux的软件设计思想异常强大,比如把所有的设备都当做文件 ...

  3. TCP经受时延的ACK

    下午看<卷1>的时候,感觉“TCP经受时延ACK”这段看的有些迷糊,最后还算理解了,所以这里记下来以免以后又忘了. 经受时延的ACK就是在接收到数据后不立马确认,而是等到内核的一个定时器到 ...

  4. iframe和frame的区别

    在同时有frame和Iframe的一个窗口里frame最大可以做个frameset的儿子,Iframe最大也只能做到frameset的孙子.frame的布局限于几种,Iframe想放哪里放哪里.fra ...

  5. 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

  6. Bubble Sort

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  7. localStorage的一些简单的操作

    本地存储     cookie     localStorage                           cookie             localStorage     生存周期 ...

  8. Spark RDD概念学习系列之为什么会引入RDD?(一)

        为什么会引入RDD? 我们知道,无论是工业界还是学术界,都已经广泛使用高级集群编程模型来处理日益增长的数据,如MapReduce和Dryad.这些系统将分布式编程简化为自动提供位置感知性调度. ...

  9. Cocos手游录制插件:cocos-plugin

    Cocos手游录制插件:cocos-plugin Testinlab2014-10-29 13:42:27153 次阅读 Cocos手游录制插件,用于添加Testin手游自动化测试支持,支持cocos ...

  10. HD1064Financial Management

    Problem Description Larry graduated this year and finally has a job. He's making a lot of money, but ...