论坛首页 编程语言技术论坛

如何设计复杂统计查询的导出excel功能?

浏览 4936 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-14  

前提:查询是复杂耗时的比如要几分钟,但是最后结果的数据量是可控的,一般不超过几百行,也就是没必要分页.然后需要一
个导出excel的功能,当然也可以是导出其他的,道理是一样的.

疑惑:
如果每次导出时重新做查询的话,非常的耗时,感觉是一种浪费.用户已经等了几分钟得出查询结果,为什么还要再等这几分钟呢?不太友好.而且对于后台数据库也多一次负担.
如果每次都缓存下来是不是会违反web的无状态原则?呵呵,我是Web方面的新手:)

我的方案:
开始时是把结果存到session里面,如果点导出就会把最后一次查询结果从session里面取出来,然后导出.后来因为数据太大更新不到数据里面去(数据库用的是SQL Server,是遗留系统),改为存到磁盘上.
这个有个问题,就是如果同一个用户,同时执行几个查询,然后再导出,其实只能导出最后一次查询的结果.我现在想的是,给每次查询生成一个唯一ID作为导出链接的一部分,然后结果以这个唯一ID缓存到磁盘上,这样就可以处理同时打开多个查询的情况.缓存数据进行定期清理,比如每过一小时把超过一小时的缓存数据清理掉.

不知道,我这个方案有什么问题,大家都是怎么处理这种问题的?有什么更好的方案吗?

   发表时间:2008-07-15  
只将每次查出的数据的 ID 作为 Array 缓存到 session 里即可,需要的时候直接把这个 Array 传给 find 方法来查,速度很快。

另外,每次查询要几分钟,是否可以考虑改进数据库设计来提高查询速度。
0 请登录后投票
   发表时间:2008-07-16  
不知道这里的Excel导出是否必须是xls格式的。Excel可以打开csv格式的文件,如果csv(逗号分隔值)可以接受的话,用FasterCSV来做那个导出或许也可以?
我只是之前给同学写个小东西的时候用过这个,当时也是需要导出数据。冒昧回个帖,呵呵
0 请登录后投票
   发表时间:2008-07-16  
kiol 写道

开始时是把结果存到session里面,如果点导出就会把最后一次查询结果从session里面取出来,然后导出.后来因为数据太大更新不到数据里面去(数据库用的是SQL Server,是遗留系统),改为存到磁盘上.
这个有个问题,就是如果同一个用户,同时执行几个查询,然后再导出,其实只能导出最后一次查询的结果.我现在想的是,给每次查询生成一个唯一ID作为导出链接的一部分,然后结果以这个唯一ID缓存到磁盘上,这样就可以处理同时打开多个查询的情况.缓存数据进行定期清理,比如每过一小时把超过一小时的缓存数据清理掉.

不知道,我这个方案有什么问题,大家都是怎么处理这种问题的?有什么更好的方案吗?


你的这个方案肯定不成,查询一次就缓存一次?你怎么知道查询后就一定导出?系统浪费太严重,而且实现起来也蛮麻烦!

这个问题很好解决呀,你不是已经把所有记录查出来放在客户端了吗?导出就在客户端做呗,用js生成excel!

另外几百行记录的查询和导出需要花几分钟?

0 请登录后投票
   发表时间:2008-07-16  
js生成excel据我所知有两种办法,一个就是调用ActiveX,一个是修改contentType。我一直用第二种,挺方便的。
0 请登录后投票
   发表时间:2008-07-16  
这个是复杂的同意查询,及时一堆sum,group by还有一堆的乱七八糟判断的,所以才会慢.很可能几百万的数据,最总出几十条来.因此也不可能只记录ID的.

我也是通过修改contentType来到处excel的.我是想知道导出时,怎么避免二次查询.如果要缓存的话,怎么缓存更好?如果不缓存的话,是否可以在客户端完成导出excel的功能.
0 请登录后投票
   发表时间:2008-08-01  
有同事做过导出excel,但是好象据说是乱码的说,不晓得怎么解决。不知道你们有遇到过没有。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics