es数据导出

有大数据量导出的需求

整体思路:分页查询es,一页查询2000条,下一页查询的截止时间取上一页最后一条记录的创建时间(因为分页是按照创建时间逆序排列的),组装最后导出的list,利用EasyExcel导出到excel表里。

结果实际测试中遇到一些问题,记录一下

(1)少量数据没问题

(2)数据多时,excel导出报错了,.xls最大只支持65535行  --->调整成.xlsx多个sheet,一个sheet 10w条数据,改成分批写入excel(避免一个大list OOM)

(3)数据条数有问题,es查询某个时间区间数据条数和导出的excel里的条数不一致,导出的总是少一些  -->

解决办法:

        一开始我发现es的时间区间查询用的from to,后来直接改成gte lte,也就是闭区间,想着这样下一页和上一页同一秒如果有重复订单也不会遗漏吧。

        但这样导出会有重复数据,于是又改造了一下把上一页数据的id都保存下来,下一页查询要导出时,过滤下上一页的id,如果已经存在,则不必加入导出队列

        但这样发现导出的条数总是少一些,导出数量越多缺失的越多!到底哪里有问题呢,后来从es的kibbana命令看突然发现一个问题,es的时间是带毫秒的,而我查出来之后转成的date只到秒,所以,第一页的创建时间如果是40秒.738Z,解决办法分页查询的下一页的截止时间是上一页截止时间+1秒。再次导出,总数对上了,终于解决了,但这里估计细究还是有一个小问题(如果一秒内有2000+数据)那这里可能就死循环了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值