`
eddysheng
  • 浏览: 111975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

征求方案-关于多个excel,大数据量同时导入

阅读更多
以前我们的管理系统用poi可以通过一个excel文件批量导入手机号码,在这个过程中需要验证号码格式、是否重复、系统是否存在等,因为效率问题,所以最后限定只导入excel文件的第一列,也就是65535行数据。

有一点要说一下,系统的数据量非常大,关联表的数据都是亿级。

现在有这么一个需求,要支持多个excel文件同时导入,不知道各位是否有好的建议?要从效率和空间上考虑,还好我们的服务器是4G内存。

我能想到的仅是多线程来处理,不至于处理过程要等半天。

any others?
分享到:
评论
15 楼 kusix 2009-07-30  
LZ的情况还是没说清楚

如果只是一个保存有65535行的手机号的EXCEL,大小应当在10MB以下

POI读取全部数据的速度是百毫秒级的

内存占用最多也就几十MB

POI读取EXCEL方面并不是瓶颈。

瓶颈应当是在校验数据上,LZ应当多在这上面下下功夫。

14 楼 whiletrue 2009-07-30  
你这个操作是谁来做?一次性还是经常性?作为给客户使用的一个功能吗?
13 楼 eddysheng 2009-07-30  
问题应该是几个.
首先是多个excel文件在java代码中同时导入,如果用poi,它所产生的一堆对象对内存肯定会造成很大的压力,这是第一个担忧,所以想知道有没有更好的解析excel的策略或者组件.我解析这个excel文件都是使用的最简单poi提供的例子代码.

其次是数据库的压力问题,假如前面的问题解决了,同时这么多的数据读取写入数据库,那压力也是很大,虽然入库已经采用了批量处理.但是读取呢,一条条的去数据库验证其是否存在?

最后是对用户最重要的,这个导入要等多少时间才能做完???这个必须要改善.


谢谢楼上各位的回复
baoq 写道
oracle 的话 先转成文本 然后用sqlldr

这种方案肯定客户是不会接受的.

bnulz 写道
转文本或CSV,导入临时表,异步执行校验,完了再通知!

也想过这种方案,但是也被否决了,首先客户的认知水平就是熟悉excel,而不知道csv.中间增加一步转csv文件,增加了客户的操作曲线.

12 楼 ubotutwin 2009-07-30  
<p>     至于不同组件读取excel文件的速度差异带来的延迟的变化,如果和硬件IO造成的延迟相比就显得微不足道了~~</p>
11 楼 ubotutwin 2009-07-30  
<p>     如果文件数量比较多的话,程序多线程不能解决根本问题,因为多线程技术本来就不是为了解决资源等待的问题的,多线程的强项是并行的计算和内部多任务的处理。</p>
<p>     如果问题出在excel文件的读取上,那么首先应该考虑把多个文件的读取分散到多个IO通道上,可以走raid或者raid+存储切分,而且这样也便于把数据校验分散到多个serv上。如果问题出在数据读取到系统后,那就还是要搞数据库的优化,这个就只能看你们公司的硬功夫了!</p>
10 楼 qqggcc 2009-07-30  
FASTEXCEL
9 楼 qqggcc 2009-07-30  
所以最后限定只导入excel文件的第一列

那就没有必要用excel了

直接用TXT
8 楼 bnulz 2009-07-30  
转文本或CSV,导入临时表,异步执行校验,完了再通知!
7 楼 baoq 2009-07-30  
oracle 的话 先转成文本 然后用sqlldr
6 楼 springoflove 2009-07-29  
eddysheng 写道
或者大家有没有更好的只读excel的组件???如果不是我使用有问题的话,这种情况下好像poi和jxl都不太满足我的需求.


感觉你遇到的问题重点不是如何解析excel,而是如何高效率的把数据导入数据库中。
多线程导入的话 首先要解决在同时导入的excel中重复的号码如何处理?
5 楼 eddysheng 2009-07-29  
或者大家有没有更好的只读excel的组件???如果不是我使用有问题的话,这种情况下好像poi和jxl都不太满足我的需求.
4 楼 langhua9527 2009-07-29  
找个DBA看有什么办法没有?
3 楼 langhua9527 2009-07-29  
我认为多线程不一定就会使速度快起来
2 楼 baoq 2009-07-29  
直接在数据库里导
1 楼 xingqiliudehuanghun 2009-07-28  
前不久一个项目让我做一个导入模板,需要关联的数据也很多。我最初的设计师这样
把关联的和检查这一部分任务转嫁到客户端去做。excel模板被保护起来了不允许直接
输入只能通过我的VBA程序去输入和删除。这样VBA程序起到了JavaScript脚本的作用
如果要求不是很严格的话,后台的验证逻辑能简化不少

相关推荐

Global site tag (gtag.js) - Google Analytics