各种电脑系统
这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助。
做一个MySQL百万数据级别的excel导出功能,如果走接口同步导出,该接口肯定会非常容易。
需要注意的是:如果用job的话,要避免重复执行的情况。比如job每隔5分钟执行一次,但如果数据导出的功能所花费的时间超过了5分钟,在一个job周期内执行不完,就会被下一个job执行周期执行各种电脑系统。
这样导出数据的功能,在第一个job周期内执行不完,在第二次job执行时,查询状态,并不会查询出状态的数据,也就是说不会重复执行。
但它们都存在一个严重的问题就是:,POI有一套SAX模式的API可以一定程度的解决一些的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,依然很大。
百万级别的excel数据导出功能各种电脑系统,如果使用传统的Apache POI框架去处理,可能会消耗很大的内存,容易引发问题。
而重写了POI对07版Excel的解析,之前一个3M的excel用POI sax解析,需要100M左右内存,如果改用easyexcel可以降低到几M,并且再大的Excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。
easyexcel能大大减少占用内存的主要原因是:在解析Excel时没有将文件数据,而是从磁盘上一行行读取数据,逐个解析。
即使我们可以从数据库中一次性查询出所有数据,没出现连接超时问题,这么多的数据全部加载到应用服务的内存中,也有可能会导致应用服务出现问题。
每页大小和页码,是SearchModel类中的成员变量,在创建searchModel对象时,可以设置设置这两个参数。
我们知道,excel对一个sheet存放的最大数据量,是有做限制的,一个sheet最多可以保存行数据。否则在保存数据时会直接报错:
如果只有一个sheet可以这么玩,但如果有多个sheet就会有问题。因此,我们需要重新计算的起始位置。
我们可以将excel名称和访问路径保存到中,这样的话,后面就可以直接通过,访问excel文件了。
我们可以加一张专门的,记录通过webSocket推送的通知的标题、用户、附件地址、阅读状态、类型等信息。
用户拿到这个百万级别的excel文件,到底有什么用途,在他们的电脑上能否打开该excel文件,电脑是否会出现太大的卡顿了,导致文件使用不了。
比如:用户发现excel中有50万的数据,可以正常访问和操作excel,这时候我们可以将总条数调整成500000,把多余的数据截取掉。
其实各种电脑系统,在,增加更多的查询条件各种电脑系统,用户通过修改查询条件,多次导数据,可以实现将所有数据都导出的功能,这样可能更合理一些。
因此,我们需要考虑在sql语句中使用商品编号,先把数据排好顺序,再查询出数据,这样就能将相同商品编号,仓库不同的数据放到一起。
但加了order by关键字进行排序之后,如果查询sql中了很多张表,可能会导致查询性能变差。
我们按照这套方案的开发了代码,发到了pre环境,原本以为会非常顺利,但后面却还是出现了性能问题。