最近几天终于把项目里面的大数据量下载功能开发完成了,特地做一下笔记,归纳一下思路,如果有同行们路过,不访在看了
文章之后发表一下自己的看法,大家相互参考,共同进步。
要点:大数据、JDBC、IO、XML、EXCEL
一:大数据:
项目的基础就是面对海量的大数据操作,因此以合理的方式将这些有效数据进行适当的处理并加以展现就显得成为重要,单单
针对数据下载这块就完全能够说明这点,面对轻则几十万,动则上百万甚至千万级别的下载量,试问你们会以怎样的方式去实现,
刚开始的时候,我也有地疑问,私下里也会质问用户这样的要求有没有合理性,如果这么大的数量下载之后你会仔细的去看那显然
是不现实的,但如果你不看,那下载又有什么意义?话虽这么说,毕竟这是用户的需求,所谓存在即为合理,没有办法,做!
起初,下载的功能已经有了实现的方式,他的实现思路是通过MYBATIS将数据分页读出,然后用JAVA的EXCEL API插件陆续写入
到XLS文件中,完成之后供用户下载,由于这个功能是一哥们之前就已经实现了,所以没有特别在意,但是在后来的测试阶段我们
发现它用起来好像不是传说中的给力,别上几十万的数据,就是上万条的数据量下载起来都十分困难,一般都需要好几钟的时间,
这让项目用户情何以堪…于是我们进行了反复的测试,发现病根竟然出现在了框架MYBATIS身上,光是查询一万条记录他都杠不住,
在这里就耗费了不少的宝贝时间,更别说文件流写入了,曾经也试图将里面的代码进行局部修改,加以优化,好让他能够担负起
这重大的使命,结果只是竹篮打水、杯水车薪。在这种情况下,我们不得不做出更多的尝试,看看用其它的方式是否能够更好的
完成这一重要支点。至于现在的方式,相信朋友们在看了上面的几个要点之后就大致清楚了。
二:JDBC:
刚开始的时候,我们并没有想到用传统的JDBC方式去连接和操作数据库,因此在我看来,IBATIS根本就采取的是SQL的方式,后
来特地对两者做了比较,发现原来存在一个误区,查询方式毋庸置疑,都是以原生态的语言,但是IBATIS的不同大于它是一个框架,
它会将查询出来的结果进行封装,要么是以Map等数据的集合形式出现,要么就是某种形式的JAVABEAN结果集出现,总之,它封装了,
封装就会消耗性能,也就会消耗时间,当我们面对小数量的时候感觉不到这一点,但如果是现在的项目需求,IBATIS这个致命的缺陷
我们就不得不去正视了(IBATIS自己不是很熟,也许缺陷这个词会有些小题大作,不过欢迎大家指正)。这里的解决之道就是JAVA自已
的JDBC方式,自己查询,自己组装。
三:JAVA.IO:
IO流在这里也非常重要,数据的读取只是第一步,接下来就是如何写入到文件的问题了,刚开始的时候我采用了传统的字符流方
式,即用它的BufferOutputStream来执行文件写入,很明显,这里用到了缓存机制,相似的问题,小数量不会有问题,大数量它必然
导制内存逸出,当然,如果能够控制每次读取的数据行数,那么内存逸出的现象就可以得到解决,可是,这个得到了解决,那么我上
百万条的数据要读取多少次能够完全写入呢?思考一下。每次一万条?好像会内存逸出,既使不逸出也会对内存有很大的占用,那如
果是并发下载呢?那结果将是一个悲剧~ 最初我考虑的是将一行数据进行拼接,当然不用是String,而是用StringBuffer类,以免为内
存造成大的压力,当我每次读取五万条的时候,我发现它也杠不住,于是改变策略,不拼接,直接读取写入,结果是内存逸出的现象
没有了,又报了一个错误,Mysql异常,几翻度娘之后还是没有找到比较好的解决办法,最后还是那位哥们提醒了我,循环读取的时候
,就要对Connection进行关闭,下次读的时候再打开,经过测试,问题解决。
四:XML
这里的文件格式还是XLS,只不过没有用到POI以及XML相关的jar包来进行操作,而是采取传统的字符串拼接,以XML格式进行写入
,当然,这里的XML格式必须是EXCEL支持的特定格式,否则生成出来的XLS文件无法打开,网上说POI的最新版本对于内存的控制效果
有了很大的改善,但是基于保守思想,没有进行实地测试,个人感觉现在的方式应该会更好。
最后,说一下整个过程的生产效率,100万数据一般需要的时间(从读取到写入,再生成zip文件)需要3-4分钟,个人感觉还算比较
满意,如果有更好的解决方式还望多多指点,不对的观点还请多加包涵,并且给以意见,感谢。
分享到:
相关推荐
本篇文章将详细探讨行业分类中的设备装置在数据平台上的大数据量下载方法。 首先,我们需要理解“行业分类-设备装置”这一概念。在不同行业中,设备装置可能指的是各种各样的硬件系统,如工业自动化设备、医疗设备...
Java 动态大数据量EXCEL下载是一个常见的需求,在企业级应用中尤为常见,尤其是在数据分析、报表生成和数据导出场景下。以下是对这个主题的详细解释: 首先,我们需要理解Java如何处理大数据量的EXCEL文件。传统的...
在Oracle数据库环境中,处理大数据量的表数据导出是一项挑战,特别是当数据达到百万或千万级别时。"plsql大数据量导出工具"是专为解决这类问题而设计的工具,它能有效地从Oracle数据库中导出大规模数据,并将其保存...
在Java开发中,批量导出大数据量到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据交换场景下。为了高效地处理这种情况,开发者通常需要掌握一些特定的技术和策略。本资料"Java_批量导出大数据量Excel方法...
在Java开发中,处理大数据量的数据导出是一个常见的挑战,特别是在CSV格式的文件处理上。CSV(Comma Separated Values)是一种广泛使用的数据交换格式,因其简单性和通用性而受到青睐。然而,当数据量达到千万级别时...
在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...
mysql200万+条大数据量测试sql文件,可以用于测试服务器数据库性能,学习sql性能优化和调优。资源是.sql文件压缩后上传。用navicat导入实测用时几分钟时间,数据量200W+条。快速获取百万级真实测试数据。
然而,当处理大数据量的Excel文件时,POI可能会导致内存溢出(Out of Memory, OOM),因为默认情况下它会将整个工作簿加载到内存中。为了防止这种问题,我们需要采用优化策略来高效地处理大量数据。 1. **分块读取*...
在Java开发中,处理Excel大数据量的导出是一项常见的任务,尤其在数据分析、报表生成等领域。这个"java excel大数据量导出demo"提供了一个高效、灵活的解决方案,它支持模板导出,分页查询,以及处理大数据量的能力...
`EasyExcel`是阿里巴巴开源的一款基于Java的高效、低内存消耗的Excel读写框架,它专门针对大数据量场景进行了优化,能够有效地处理大量数据的导入和导出问题。 `EasyExcel`的核心设计理念是分片读写,即在处理...
作为一名架构师,处理大数据量是一个核心挑战。为了解决这个问题,本文将提供实战经验的总结,帮助读者更好地理解和应对实际项目中的技术挑战。本文将从两个方面入手:数据分区和分库分表。 数据分区 数据分区是...
skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~
对添加大量的数据进行较为优化的处理(测试),效果有限,可看文章https://blog.csdn.net/qq_44471040/article/details/113842777
Mapv 是一款基于百度地图的大数据可视化开源库,可以用来展示大量的点、线、面的数据,每种数据也有不同的展示类型,如直接打点、热力图、网格、聚合等方式展示数据。 git 地址:...
这种方法适用于上传或下载大数据量的文件。 9. **数据压缩**: 在传输前对数据进行压缩,如使用GZIP等算法,可以减少网络传输的时间。 10. **缓存(Caching)**: 对频繁访问的数据进行本地缓存,减少后续请求的时间。...
在IT行业中,大数据量的处理是一项常见的挑战,尤其是在数据导出和存储方面。"多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将...
在处理大数据量的Excel文件时,使用phpExcel工具进行数据导出是一个常见的任务。然而,在这个过程中,开发者经常面临内存溢出错误的问题。这主要是因为phpExcel在内存中保存单元格信息,当数据量大时,内存消耗超过...
web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在导出时,根据最大行数重新建立新的excel文件; 数据从数据库取出使用纯jdbc方式读数据,边读边向文件中写; 待所有数据写完,将各个小excel...
在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...
可以 一次性下载较大的数据量,提供磁盘缓冲,避免了下载时JVM溢出