蛋疼系列1

需求描述:标签化活动之后,需要导出参与活动的用户的书架书籍和所有标签的详情,导出为Excel。

涉及到的存储: mysql数据库(参与的所有用户,所有的标签数据) redis(每个标签的点赞数和踩数) 还有一部分数据需要调用taf服务(比较耗时)

数据量级: 用户数在16万(书架每个人不等) 标签数在140万左右

实现方案: 线程池开启多个线程,每个线程处理一页数据,先从mysql查出,遍历再从redis补全信息,封装到list中,最后导出为Excel。

出现问题:

1. redis连接的释放问题
2. mysql的连接释放问题
3. list的作用域,设置为成员变量,导致多线程造成并发问题
4. 程序运行一段时间导致内存溢出,运行失败,由于list构造太大,一直循环占用,不能释放。
复制代码

最终解决方案:

由于书架书籍量级无法预估,故而不做导出,以后注意要提前预估数据的量级。
采用单线程直接写到日志文件中,然后在从TXT导出为Excel。
复制代码

收获:

要注意细节问题
在涉及到资源释放的时候,要做好封装,防止犯错
要考虑到一个程序的内存使用和时间效率问题,评估之后才会制定最优方案
要减少taf服务的调用,尽量采取批量复制代码

转载于:https://juejin.im/post/5bcda4cce51d457a7863c977

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值