使用场景:
        当你有一个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. hibernate建表一对多 一的一方控制多的方

    级联操作,操作class对象的时候 级联操作 student Classes.java文件 package cn.itcast.hiberate.sh.domain; import java.util ...

  2. 4. 2D绘制与控件绘制

    绘制基本图形和文本 绘制图形和文本的基本方法 drawPoint(绘制点).drawLine(绘制直线).drawCircle(绘制圆) drawArc(绘制弧).drawText(绘制文本) pac ...

  3. Web开发中设置快捷键来增强用户体验

    从事对日外包一年多以来,发现日本的无论是WinForm项目还是Web项目都注重快捷键的使用,日本人操作的时候都喜欢用键盘而不是用鼠标去点,用他们的话来说"键盘永远比鼠标来的快",所 ...

  4. PropertyPlaceholderConfigurer加载属性配置文件:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. motan源码解读:注册中心zookeeper(2)

    上文大概讲解了利用zookeeper如何实现注册中心的.本文主要是从源码角度说明下.代码都在模块motan-registry-zookeeper中,其实在在这个模块中就3个类. ZkNodeType: ...

  6. 25个让人无法抗拒的HTML5网站设计实例

    原文地址:http://www.goodfav.com/html5-website-designs-8272.html HTML5在其功能方面给网络市场带来了惊人的改进. HTML5是万维网联盟,在起 ...

  7. (转)PHP开发框架浅析

    开发框架的定义我没有找到很准确的描述,下面几句话基本概括了开发框架的的功能和用途 框架是一种应用程序的半成品: 框架就像是人的骨骼一样: 框架是一组可复用的组件: 框架是一个可复用的设计构件…… 简而 ...

  8. 搭建sql注入实验环境(基于windows)

    搭建服务器环境 1.下载xampp包 地址:http://www.apachefriends.org/zh_cn/xampp.html 很多人觉得安装服务器是件不容易的事,特别是要想添加MySql, ...

  9. html5 canvas 旋转扩大

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好

    https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...