目前我的需求是给用户生成excel报表,一个excel表大概会有6W行左右的数据,大概会有几十的并发量,计划使用easyexcel像下面这样处理:
- 使用多个read线程连接远程数据库读取数据然后写入阻塞队列
- 使用单个write线程从队列中取数据,每取到1000就刷入到excel 我想通过这种方式防止OOM,但是ExcelWriter似乎只有调用finish才会正在的写入磁盘,在此之前数据都会驻留在内存。 HELP,我该怎么办哦。
目前我的需求是给用户生成excel报表,一个excel表大概会有6W行左右的数据,大概会有几十的并发量,计划使用easyexcel像下面这样处理:
你要搞清楚问题的所在。6W的数据应该不会有啥问题。
你要搞清楚问题的所在。6W的数据应该不会有啥问题。
- 异步导出,生成报表 不能几十并发,点击生成后,自己开5个线程慢慢来。
- 处理好sql,mybatis数据占用的内存也非常大,记得分页+flushcache
谢谢,看来也只有这样了
我们以前也遇到过oom,问题在于mysql 而不是poi,所以mysql 真的要注意下
你要搞清楚问题的所在。6W的数据应该不会有啥问题。
- 异步导出,生成报表 不能几十并发,点击生成后,自己开5个线程慢慢来。
- 处理好sql,mybatis数据占用的内存也非常大,记得分页+flushcache
@zhuangjiaju 请教一下,5 个线程怎么分配? 4 个读数据,1 个写么?如果要求内容有顺序,4 个线程读数据,还得保持线程读数据的先后顺序。 谢谢
你要搞清楚问题的所在。6W的数据应该不会有啥问题。
- 异步导出,生成报表 不能几十并发,点击生成后,自己开5个线程慢慢来。
- 处理好sql,mybatis数据占用的内存也非常大,记得分页+flushcache
@zhuangjiaju 请教一下,5 个线程怎么分配? 4 个读数据,1 个写么?如果要求内容有顺序,4 个线程读数据,还得保持线程读数据的先后顺序。 谢谢
jdk包里面有很多线程协同的工具类可以保证执行顺序,比如CountDownLatch之类
你要搞清楚问题的所在。6W的数据应该不会有啥问题。
- 异步导出,生成报表 不能几十并发,点击生成后,自己开5个线程慢慢来。
- 处理好sql,mybatis数据占用的内存也非常大,记得分页+flushcache
@zhuangjiaju 请教一下,5 个线程怎么分配? 4 个读数据,1 个写么?如果要求内容有顺序,4 个线程读数据,还得保持线程读数据的先后顺序。 谢谢
jdk包里面有很多线程协同的工具类可以保证执行顺序,比如CountDownLatch之类
谢谢回复! 哥们的意思是,我自己编排 4 个分页读取数据的线程顺序么? 如: t1 读取第一页 t2 读取第二页 t3 读取第三页 t4 读取第四页 写 excel 数据,顺序是 t1 > t2 > t3 > t4 重复上面的步骤,直至完成。
@JimmyLincole
谢谢回复! 哥们的意思是,我自己编排 4 个分页读取数据的线程顺序么? 如: t1 读取第一页 t2 读取第二页 t3 读取第三页 t4 读取第四页 写 excel 数据,顺序是 t1 > t2 > t3 > t4 重复上面的步骤,直至完成。
对的,我的就是这样做的
对的,我的就是这样做的
@614756773 好的,谢谢! 请教一下,你是如何控制最后一批次没有必要的数据库访问呢? 如:每个批次有 4 个线程,最后一批次时,第一个线程读取之后,数据就读完了,这时候第二,第三,第四线程就没必要访问数据库了。