X 关闭

世界视点!关于ES查询内存溢出的欲盖弥彰
来源: 哔哩哔哩      时间:2023-04-22 11:50:11

故事BUG的起因是某客户点击了分页的最后一页——第18643页,然后es直接达拉崩吧了。

后端大哥说这个BUG一直存在,只是没想到真的有客户会看最后一页,毕竟是日志数据,此后省略吐槽。

但是,客户上帝佛祖说,我要看最后一页。


(资料图)

先说明我们欲盖弥彰的做法,前端的组件用的是ant-design-vue 1.7.8版本,附带一下网址https://1x.antdv.com/components/table-cn/,分页效果如下图所示的前一页、页码、向后5页、最后一页、后一页。

首先要满足客户说的”看最后一页“这个要求。

所以我们增加了个倒序,原本数据是降序排列,也就是最新的数据在前,历史数据在后,客户既然要看最后一页,那我增加个倒序排列,把最后一页直接转化成第一页,直接把用户点击最后一页的操作转化成点击第一页,问题解决了一半。

然后,我们后端大哥提了个骚建议,直接把原组件里带的最后一页给他去掉,不存在即不点击。

看了一下他的结构,这个class ant-pagination-item-20就写的很有灵性,20就是页码数,数据接口有,即使没有总页数,total也能算出来,把classname是“ant-pagination-item-”+总页数的dom元素给他remove掉或者欲盖弥彰的display:none都可。

接下来介绍一下搜索"床上等你"(CSDN)得到的解决方法,推荐直接跳转大佬的文章,http://t.csdn.cn/w8llT

简单总结一下大佬的说法,es查询分页有两种,一种使用from+size,一种使用after_search,前者是普通分页,后者是深度分页。但是两种都有弊端。

深度分页(滚动式)理论上可以查询全部历史,但是不能实现跳页(也就是笔者上文分页示图中显示的功能);普通分页,在海量数据下OOM家常便饭。

所以加个倒序吧。

标签:

广告

X 关闭

广告

X 关闭