解决myxls开源组件导出大数据时内存溢出的问题

简介:
因为工作需求,客户要求把数据导出excel表格。开始时我们用的是开源的myxls组件,测试时还没问题,可是到了正常使用后程序老是爆出内存溢出的问题,经检测发现因为在用户使用中,一次导出的数据量超过数十万行,不内存溢出才怪~~,之前测试时因为数据量都比较小所以测试都没问题。上帝永远是上帝,我们查阅网络上的相关资料得出以下解决方案:

1.分页查询

2.是否存在死循环

3.是否有引用没有被收回

4.使用内存查看工具查看内存使用情况

而经分析,该方案不适用于我们的产品需求,因为客户需要的是一个完整的excel文件,来备份数据信息,所以再次研究 ,我们得出以下两种解决方案:
  • 使用分块输出;
1. 多文件输出方式;
2. 单文件多sheet输出;
  • 使用序列化对象的方式,分级输出序列化对象,最后在反序列化合并数据。
对于第一种方式而言,相当于在导入数据时也要考虑到多文件方式导入,而除非数据大量丢失不然上帝是不会经常使用导入功能的。导出多sheet也不是上帝想要看到的。
SO...... 我们采取了第二种方式,每 n(1000<n<10000)条数据序列化为一个对象存储到本地磁盘中,当数据提取完时,合并反序列化对象,存储为同一个excel文件,虽然这样做使数据导出过程变得相对复杂了,但是能支持同时导出数十及数百万的数据量,好处是那么的明显,原理有了...代码实现就简单了,无论你是用.net平台还是用java平台,他们都支持序列化对象操作。核心代码略


本文转自 tongling_zzu 51CTO博客,原文链接:http://blog.51cto.com/tongling/1188275

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
3月前
|
存储 JSON NoSQL
Redis 内存优化神技,小内存保存大数据
Redis 内存优化神技,小内存保存大数据
36 0
|
9月前
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的基本使用的命令行接口的导入/导出文件
在 Hdfs 中,使用命令行接口可以方便地对数据进行操作。
49 0
|
5月前
|
SQL 分布式计算 调度
在MaxCompute中,你可以通过SQL语句来查询和导出实例的运行状态和时间等信息
在MaxCompute中,你可以通过SQL语句来查询和导出实例的运行状态和时间等信息
50 5
|
7月前
|
存储 缓存 Java
大数据Flink内存管理
大数据Flink内存管理
69 0
|
SQL 分布式计算 关系型数据库
超详细!搭建本地大数据研发环境(16G内存+CDH)(二)
超详细!搭建本地大数据研发环境(16G内存+CDH)(二)
761 0
超详细!搭建本地大数据研发环境(16G内存+CDH)(二)
|
10月前
|
SQL 数据采集 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之基本命令和使用的导入/导出数据
在大数据领域,数据迁移(同步/传输)也是非常重要的一环。Sqoop作为一个开源的数据迁移工具,可以帮助我们轻松地实现关系型数据库与Hadoop之间的数据迁移。本文将会对Sqoop的基本命令和使用进行详细介绍。
169 1
|
10月前
|
SQL 分布式计算 数据可视化
无需导出,Hologres加速查询MaxCompute限时5折
Hologres共享集群(湖仓加速版)提供Severless的在线查询加速服务,基于存算分离的架构,针对MaxCompute交互式分析场景,无需将数据导出,即可将查询性能提升数十倍以上。
|
11月前
|
SQL 存储 缓存
「大数据系列」Ignite:基于内存分布式数据库和缓存和处理平台
「大数据系列」Ignite:基于内存分布式数据库和缓存和处理平台
|
11月前
|
算法 大数据 数据处理
大数据开发基础的操作系统的内存管理和调度
在大数据开发中,操作系统的内存管理和调度是非常重要的概念。这些概念可以帮助我们更好地理解计算机系统的工作原理和方式,并且对于实现高效的大数据处理和传输具有重要的意义。以下是这些概念的简要介绍。
68 0
|
11月前
|
存储 算法 Java
大数据开发基础的编程语言的Java的JVM虚拟机的JVM内存模型
Java虚拟机(JVM)是Java语言的核心,它是一个虚拟的计算机,可以在不同的操作系统上运行Java程序。在Java中,JVM内存模型是JVM的重要组成部分,它负责管理Java程序所需的内存资源。本文将介绍Java的JVM内存模型和常见问题。
83 0