您的位置:首页 > 娱乐 > 明星 > 国内服务器租用_爱站小工具_建设优化网站_91关键词排名

国内服务器租用_爱站小工具_建设优化网站_91关键词排名

2025/4/29 21:16:50 来源:https://blog.csdn.net/hnzhoujunmei/article/details/147562783  浏览:    关键词:国内服务器租用_爱站小工具_建设优化网站_91关键词排名
国内服务器租用_爱站小工具_建设优化网站_91关键词排名

有大数据量导出的需求

整体思路:分页查询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+数据)那这里可能就死循环了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com