ES数据删除优化

简介: ES数据删除优化

记录一次在单位里做的删除优化,使用delete_by_query的时候发现了一个问题,就是删除效率太低。当打流日志并发变高的时候,删除往往跟不上ES数据增加的速度,导致磁盘占用率过高。



第一版尝试调整过相关代码的删除阈值,发现ES会在查询到大数据量的情况下删除失败,后面经过定位发现是并发写入和删除产生的版本冲突问题。


//新增conflicts=proceed.delete_by_query?conflicts=proceed



经过修改后,发现虽然解决了版本冲突导致的删除中断问题,但是在某些极端情况下还是会删除超时。

查询了一下官方文档,发现了2种解决方案

一种是ES的异步删除,返回一个taskId。

另外一种是多线程删除。


经过实际测试,决定使用第二种方式来应对当下的业务场景。

在代码中新增


scroll_size//这个参数是执行删除的时候,每次每个线程会查询的数据量,然后进行删除。//默认是100,就是说每个线程每次都会查询出100条数据然后再删除。slices//这个就相当于开启的线程数,同时会有多少个线程执行查询然后删除程序。//默认是1,就是同时只会有一个线程进行查询删除操作。delete_by_query?conflicts=proceed&scroll_size=5000&slices=10


注意:以上这2个值对于不同性能的机器往往是不一样的,以上的只是参考值,我们可以根据实际测试情况,比如删除多少数据,用多少线程,共计多少时间,来设置最符合我们当下业务的线程。

目录
相关文章
|
5月前
|
网络架构
ES6中数组新增了哪些扩展?
ES6中数组新增了哪些扩展?
44 1
|
4月前
|
JSON 前端开发 JavaScript
ES6(2015)-ES13(2022)新增特性大总结
ES6(2015)-ES13(2022)新增特性大总结
42 0
|
5月前
|
存储
ES批量写入数据
ES批量写入数据
66 1
|
7月前
|
索引
如何在已创建的 es 索引中增加分片
如何在已创建的 es 索引中增加分片
76 0
|
8月前
|
JavaScript 前端开发
ES6新增特性学习
ES6新增特性学习
|
9月前
|
网络架构
ES6中数组新增了哪些扩展?
ES6通过扩展元素符…,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
|
10月前
|
JSON 移动开发 NoSQL
【ES系列九】——批量同步数据至ES
通过es官网提供的bulk方法进行实现
|
12月前
|
测试技术 索引
ES数据删除优化
分享一下ES数据删除优化的相关经历,根据业务需要一共优化了3次,包含了其中踩到的坑和一些花时间解决的问题.
843 0
|
JSON API 数据格式