日期:2014-05-17  浏览次数:20621 次

指点,百万级别数据量处理。谢谢
现有一需求,百万级别数据量存放在一个xls文件中,要将此文件里面的所有字段(列)取出存放到数据库中,大约为28列,上传至服务器端后如何处理。

1.百万级数据量(xls 28列 ,oracle数据库)
2.要检查数据库中是否存在该数据中的一条数据
3.要求性能要快
4.在插入过程中怎么时时将后台发现出现异常的数据传入到前端给用户查看,如:第多少行添加失败。
5.在上传过程中能不能做一些相应的处理

求大神指点指点,谢谢。

------解决方案--------------------
xls文件可以直接插入数据库的,写个脚本就可以了,以前做保险项目的时候,总做这个,不过当时的脚本是别人写的,你可以去oracle技术区发个帖。
------解决方案--------------------
百万条数据往数据库里插入,直接用脚本也得半个小时时间,用程序时间的更久。
------解决方案--------------------
楼主可以尝试下poi去处理excel文件的方式。
------解决方案--------------------
话说XLS也就是 excle2003的格式吧?

貌似excel2003 一个sheet最多只能65535行吧,,,你这个。。。。。。
------解决方案--------------------
引用:
xls文件可以直接插入数据库的,写个脚本就可以了,以前做保险项目的时候,总做这个,不过当时的脚本是别人写的,你可以去oracle技术区发个帖。



引用:
Quote: 引用:

xls文件可以直接插入数据库的,写个脚本就可以了,以前做保险项目的时候,总做这个,不过当时的脚本是别人写的,你可以去oracle技术区发个帖。


不是我们自己到入  是客户那边他们导入 得写这么一个功能 

把xls整个上传到Server,然后在Server端用脚本执行,两个功能都有了。

返回执行错误,用AJAX。
------解决方案--------------------
引用:
现有一需求,百万级别数据量存放在一个xls文件中,要将此文件里面的所有字段(列)取出存放到数据库中,大约为28列,上传至服务器端后如何处理。

1.百万级数据量(xls 28列 ,oracle数据库)
2.要检查数据库中是否存在该数据中的一条数据
3.要求性能要快
4.在插入过程中怎么时时将后台发现出现异常的数据传入到前端给用户查看,如:第多少行添加失败。
5.在上传过程中能不能做一些相应的处理

求大神指点指点,谢谢。


xls最大行数65536

引用:
现有一需求,百万级别数据量存放在一个xls文件中,要将此文件里面的所有字段(列)取出存放到数据库中,大约为28列,上传至服务器端后如何处理。

1.百万级数据量(xls 28列 ,oracle数据库)
2.要检查数据库中是否存在该数据中的一条数据
3.要求性能要快
4.在插入过程中怎么时时将后台发现出现异常的数据传入到前端给用户查看,如:第多少行添加失败。
5.在上传过程中能不能做一些相应的处理

求大神指点指点,谢谢。


一个XLS文件最大行数65535行还是65536行,我不知道你这个XLS是怎么样的。
如果按你所述有那么大,如果是我做的话我会用多线程。
比如:一个线程从1-10000,第N个线程处理(N-1)*10000+1 ~ N*10000的数据,
插入过程中有异常,把错误信息存入某张数据库表,
用户前端可以用AJAX轮训这张数据表的信息。
------解决方案--------------------
这么多数据用poi读取太慢了,直接用oracle的脚本命令导入excel.客户把文件上传到了服务器你直接在用oracle脚本导入就是了
------解决方案--------------------
感觉都没说到点子上。
批量插入百万行数据,我个人认为程序上不是瓶颈,瓶颈是数据库。像楼上说的多线程,只不过是解决了表面现象,数据库该堵的还得堵,真要这样做了,效率上不会有什么提升的。
不做任何检查的插入百万行数据,就需要不少耗时了,更何况楼主还要求每条数据插入前做数据检查是否已存在。

个人感觉楼主的要求不可能兼顾,如果要尽量快速导入,SQL SERVER 可以使用BCP导入。
如果表结构上有唯一性约束,BCP是会保证的。
但是还要求实时返回错误信息,这个真心没想好怎么弄。
------解决方案--------------------
百万级别的数据做校验的话肯定是比较慢的,毕竟这个数据库的交互次数没法避免,错误信息可以在解析校验的时候用一个字符串去拼接好,然后返回前台展示,主要还是性能不好解决吧
------解决方案--------------------