我们正在做的一个项目,他们提出的项目需求是将excell格式的数据从web客户端导入到oracle中,入库后生成一个导入结果的日志文件给他们下载下来。上线后发现有一些表格有十几万条数据,提交到服务器上去之后服务器端写库的时间过长,导致session超时,超时之后链接就会自动断开,日志文件就无法下载。为了防止在线用户过多导致系统崩溃,session的时间被定死了不允许设置的过长,这个问题想了好几天了都没想到怎么解决,这个bug需要马上解决,各位有什么高招吗!

解决方案 »

  1.   

    规定你的web客户端写一部分数据就commit一次?不知道能否解决??
      

  2.   

    我的后台处理的时候是读excel中的一条数据然后就入库,没有用事务包裹,也就不用commit,这样是不是会导致处理时间过长啊!
      

  3.   

    如果数据量超大,本身就得花很长时间,那就把session有效时间改长,要不得把那一个Excel分成几个小点的,十几万条的我没多过,我弄过几千条的,时间要4、5分钟。
      

  4.   

    另外,如果是Excel2003的话,最多有66536行数据,一般不会真正装满,当你装满是那个文件打开是都得很长时间。跟别说是几十万行数据一次性导入。顺便说一下,我也跟楼主一样直接读取一行的值就insert到数据库,没有把本地文件上传到Web服务器然后再倒入。
      

  5.   

    这个太简单了吧。
    不知道你session断开时什么时候的事情,只是上传文件会不会导致断开。
    如果文件太大的话恐怕在上传途中就完蛋了,
    所以你必须采用压缩的办法。设计一个表记录这个上传任务,状态和更新数据库的log.然后设定一个后台任务就行了。
    先把excel压缩文件上传到服务器的制定目录下,
    然后启动一个线程去解压并更新到数据库中。最后输出log到刚才的那个表中就行了。
    如果用户非要在线实时得到结果的话,那么就用AJAX维持session就行了,给用户个提示说正在更新请耐心等候。
      

  6.   

    我这个excell表格不是很大,上传过程中session不会超期的,就是数据入库的时候会超期。楼上的大哥我不懂ajax啊,这个上传的界面我是用ext做的,能给个例子或者再详细讲解一下怎样用ajax来维持session吗,是不是不断的用ajax来访问服务器啊!