`
dylan0514sina.cn
  • 浏览: 92330 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

web大数据导出

    博客分类:
  • any
 
阅读更多
关于csv文件导出的开源框架很多,可以到http://sourceforge.net/search/?type_of_search=soft&words=csv去了解学习。在典型的基于java的MVC框架中,当要下载数据时需求在页面上添加链接或按钮,触发一次请求返回一个流,在响应中指定mime type类型比如
response.setContentType("application/ms-excel;charset=gbk")
。常用的web框架struts2,webwork,Spring MVC都提供了一致的方式只要你构造一个流。流行的eXtremeComponents分页工具直接向当前页的信息写入到内存中,用一个ByteArrayOutputStream实现,对于分页数据来讲一页通常都不大,内置的导出功能通常也没有问题。当需要根据条件导出所有数据时,对于下载数据很大的情况,更确切的来讲对内存很有影响,一般来讲CPU开销通常都不是问题。对于这种在web界面导出大数据(不是指现在流行的“大数据”)的需求,可以直接在数据库端用存储过程实现,这通常比较容易实现:只需要固定在某时写入到文件中,供后续下载。DB2有相应的工具集导出直接通过SQL导出数据,只需要一个命令而已,前提是要有权限去执行这种命令操作。不管是用何种处理方式:jdbc或存储过程,都不可能把数据集放在一次性放在内存中处理。常用游标作为解决实现,使用游标循环结果集的时候,非常注意循环体代码,不要搞对象封装、缓存因此不要用持久化框架;代码简洁,越少越好;循环体的代码,尽量保证少一些耗内存的不必要代码。特别不要乱用一些开源的API。JXL和POI,搞的很高深;搞数据库中的字符和系统中对应的枚举中文输出转化也是不必要的,总之代码尽量保持简洁。在本系统中开发了一个JAR包用于支持大数据导出。
    使用多线程的方式
    统一接口调用,sql统一配置
    生产者消费者模式避免内存溢出
    使用现成的web压缩技术
    避免异常处理
    日志支持
    可扩展,实现自己的输出而非WEB Response
    十分高效,经测试,数据输出速度可达 10MB/s(数据库非本机,同一内网)
    可配置JDBC连接与CPU核数比例,1是最高效的。如果CPU核数太高,比例配置低些,至少不影响同一系统中的其他的业务操作的JDBC连接请求
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics