`
kiol
  • 浏览: 43396 次
  • 来自: ...
社区版块
存档分类
最新评论

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

阅读更多

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

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

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

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

分享到:
评论
6 楼 ryuuzaki 2008-08-01  
有同事做过导出excel,但是好象据说是乱码的说,不晓得怎么解决。不知道你们有遇到过没有。
5 楼 kiol 2008-07-16  
这个是复杂的同意查询,及时一堆sum,group by还有一堆的乱七八糟判断的,所以才会慢.很可能几百万的数据,最总出几十条来.因此也不可能只记录ID的.

我也是通过修改contentType来到处excel的.我是想知道导出时,怎么避免二次查询.如果要缓存的话,怎么缓存更好?如果不缓存的话,是否可以在客户端完成导出excel的功能.
4 楼 superxielei 2008-07-16  
js生成excel据我所知有两种办法,一个就是调用ActiveX,一个是修改contentType。我一直用第二种,挺方便的。
3 楼 liuqiang 2008-07-16  
<div class='quote_title'>kiol 写道</div>
<div class='quote_div'>
<p>开始时是把结果存到session里面,如果点导出就会把最后一次查询结果从session里面取出来,然后导出.后来因为数据太大更新不到数据里面去(数据库用的是SQL Server,是遗留系统),改为存到磁盘上.<br/>这个有个问题,就是如果同一个用户,同时执行几个查询,然后再导出,其实只能导出最后一次查询的结果.我现在想的是,给每次查询生成一个唯一ID作为导出链接的一部分,然后结果以这个唯一ID缓存到磁盘上,这样就可以处理同时打开多个查询的情况.缓存数据进行定期清理,比如每过一小时把超过一小时的缓存数据清理掉.<br/><br/>不知道,我这个方案有什么问题,大家都是怎么处理这种问题的?有什么更好的方案吗?</p>
</div>
<p><br/>你的这个方案肯定不成,查询一次就缓存一次?你怎么知道查询后就一定导出?系统浪费太严重,而且实现起来也蛮麻烦!</p>
<p>这个问题很好解决呀,你不是已经把所有记录查出来放在客户端了吗?导出就在客户端做呗,用js生成excel!</p>
<p>另外几百行记录的查询和导出需要花几分钟?</p>
2 楼 RednaxelaFX 2008-07-16  
不知道这里的Excel导出是否必须是xls格式的。Excel可以打开csv格式的文件,如果csv(逗号分隔值)可以接受的话,用FasterCSV来做那个导出或许也可以?
我只是之前给同学写个小东西的时候用过这个,当时也是需要导出数据。冒昧回个帖,呵呵
1 楼 rainux 2008-07-15  
只将每次查出的数据的 ID 作为 Array 缓存到 session 里即可,需要的时候直接把这个 Array 传给 find 方法来查,速度很快。

另外,每次查询要几分钟,是否可以考虑改进数据库设计来提高查询速度。

相关推荐

    Excel报表导出,复杂Excel模板导出(带单元格合并),jxls2

    总结起来,这个项目通过`jxls2`库提供了一种高效、灵活的Excel报表导出解决方案,支持单元格合并和复杂的模板设计,能够满足多样化的需求,对于提升企业级应用的数据处理能力有着显著的作用。开发者只需花费较少的...

    Excel模板导出(针对复杂模板情况)

    总之,Excel模板导出在复杂情况下的处理涉及多个方面,需要综合运用Excel的各种功能和编程技术,确保数据准确、格式一致且高效地生成。对于IT专业人士来说,熟练掌握这一技能不仅能提高工作效率,还能提升在数据分析...

    Unity导出Excel

    本文将深入探讨如何在Unity中导出Excel,并介绍相关知识点。 首先,Unity导出Excel的关键在于找到合适的插件或库。常见的有ExcelExport、NatCruise等,这些插件能够帮助开发者在Unity中创建和写入Excel文件。例如,...

    c#开发的全国第二次土地调查应用软件(到导出复杂的excel)

    标签中的“导出excel”表明软件具有将数据导出为Excel文件的功能,这对于数据共享、报告制作和进一步的数据分析非常有用。“导出access数据库”则意味着用户可以将数据导出到Access数据库文件,便于离线查看或与其他...

    Excel统计分析功能

    Excel作为一款广泛使用的电子表格软件,其统计分析功能在数据处理和决策支持中扮演着重要角色。在Excel 2003中,引入了多项新特性,极大地增强了统计分析的能力。以下是对这些特性的详细说明: 1. **列表功能**:...

    poi excel 模板读取并导出带公式的excel文档

    在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI库能够实现这一功能,即可以通过Java程序操作Excel文件,包括读取、...

    Excel导入导出 Excel导入 Excel导出

    综上所述,Excel的导入导出功能是其强大功能之一,允许用户在各种格式和应用程序之间自由移动数据,进行数据分析和管理。无论是简单的工作表还是复杂的数据项目,了解并熟练掌握这些技巧对于提升工作效率至关重要。

    flex 多层表头advancegrid 导出excel

    导出到Excel时,关键在于正确地复制这种复杂的表头结构。一个常见的解决方案是使用ActionScript类,例如在提供的文件名"**MyDgToExcelOrPdf.as**"中,可能包含了一个专门用于导出的工具类。这个类可能会使用Adobe的...

    Grid导出Excel: advcolumgrid,dbgrideh,dbgrid

    通过结合AdvcolumnGrid和DBGridEh的特性和导出Excel的技术,开发者可以创建出功能强大且用户友好的数据管理工具,满足用户对数据展示和分析的需求。在实际开发中,不仅要关注代码实现,还要注意用户体验,确保数据...

    notes导入导出excel

    **导出Excel至Notes**的过程与导入过程类似,但操作方向相反。主要步骤包括: - 创建Excel Application对象。 - 打开指定的Excel文件。 - 读取Excel文件中的数据。 - 创建或更新Notes中的文档。 - 关闭Excel ...

    通用导出Excel数据库中的表,视图或存储过程返回记录集.rar

    标题和描述中提到的"通用导出Excel数据库中的表,视图或存储过程返回记录集",是指在数据库管理中,将数据从SQL查询(包括表、视图和存储过程)的结果导出到Microsoft Excel文件的过程。这个过程通常用于数据分析、...

    java导出Excel文件.pdf

    在本文档中,我们将深入探讨如何使用Java技术栈实现导出Excel文件的功能。文档标题为“java导出Excel文件.pdf”,描述了从导入依赖、配置文件、前端实现到后端处理的完整流程。涉及到的技术标签包括POI、Vue、Spring...

    EXCEL快速导入导出(增加数据库直接导出及2007文件格式支持).zip

    例如,可以将数据库中的销售记录导出为Excel,便于财务人员进行统计分析;也可以将用户填写的Excel表单数据导入系统,实现自动化录入。此外,还可以结合VBA宏或其他脚本语言,实现更复杂的自定义功能。 总结: ...

    C#读取和导出EXCEL类库 AppLibrary.dll

    这个类库专为C#开发者设计,用于方便地读取和导出Excel数据,特别是涉及多工作表(Sheet)的操作。下面我们将深入探讨这个库的使用方法、功能以及在实际开发中的应用。 首先,`AppLibrary.dll`是一个动态链接库,它...

    报表导出excel word pdf html

    "报表导出excel word pdf html"这个主题涵盖了将数据导出为不同格式的技术,这些格式都是日常工作和交流中常用的文档类型。以下是关于这些格式以及如何在Java环境中实现导出的详细知识: 1. Excel:Microsoft Excel...

    poi 导入导出Excel相关jar包

    导出Excel的过程则相反。首先,你需要创建一个新的Workbook对象,然后创建Sheet和Row,填充Cell数据。最后,使用Workbook的write方法将数据写入到OutputStream中,可以是文件流或内存流,从而生成Excel文件。 除了...

    xamarin/android 导出excel第三方dll文件

    本篇将详细讲解如何在Xamarin.Android项目中使用POI库来导出Excel,并涉及到DLL文件的打包和使用。 POI是Apache软件基金会的一个开源项目,它提供了Java API来处理Microsoft Office格式的文件,包括Excel。在...

    导出数据库表结构(excel)程序

    在压缩包的"数据库导出excel"文件中,可能包含有以下内容: 1. 程序源代码:如Java、Python或C#,用于实现数据库连接、查询和Excel导出的功能。 2. 配置文件:用于设置数据库连接参数,如用户名、密码、服务器地址等...

    C#导出Excel高级报表的实例

    总结来说,"C#导出Excel高级报表的实例"涉及到的技术点包括: 1. C#与SQL Server 2005的数据访问(ADO.NET) 2. Visual Studio 2005中的Windows Forms应用开发 3. DataGridView控件的使用 4. 使用Microsoft.Office....

    ExcelHelper(Excel导入导出)实例源码

    首先,ExcelHelper的主要功能是简化Excel文件与DataTable之间的转换。DataTable是一种.NET Framework中的数据结构,常用于存储和操作数据,类似于数据库的表格。通过ExcelHelper,我们可以将已有的DataTable数据快速...

Global site tag (gtag.js) - Google Analytics